web-dev-qa-db-ja.com

PHPモジュールはすでにロードされています警告

CLIで実行すると、PHPは警告をスローすることに気づきました:

phpモジュールはすでにロードされています

$ php -v
PHP Warning:  Module 'PDO' already loaded in Unknown on line 0
PHP Warning:  Module 'calendar' already loaded in Unknown on line 0
PHP Warning:  Module 'ctype' already loaded in Unknown on line 0
PHP Warning:  Module 'exif' already loaded in Unknown on line 0
PHP Warning:  Module 'fileinfo' already loaded in Unknown on line 0
PHP Warning:  Module 'ftp' already loaded in Unknown on line 0
PHP Warning:  Module 'gettext' already loaded in Unknown on line 0
PHP Warning:  Module 'iconv' already loaded in Unknown on line 0
PHP Warning:  Module 'Phar' already loaded in Unknown on line 0
PHP Warning:  Module 'posix' already loaded in Unknown on line 0
PHP Warning:  Module 'shmop' already loaded in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/sockets.so' - /usr/lib/php/20151012/sockets.so: undefined symbol: php_network_gethostbyname in Unknown on line 0
PHP Warning:  Module 'sysvmsg' already loaded in Unknown on line 0
PHP Warning:  Module 'sysvsem' already loaded in Unknown on line 0
PHP Warning:  Module 'sysvshm' already loaded in Unknown on line 0
PHP Warning:  Module 'tokenizer' already loaded in Unknown on line 0
PHP 7.0.3-5+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0RC4, Copyright (c) 2002-2016, by Derick Rethans

私はそれらを防ぐ方法を知っています-単にextension={extname}.soファイルから/etc/php/7.0/cli/conf.d/{extname}.iniを削除してください。だが:

INIファイルのこの行を削除することは、警告メッセージを回避するための解決策または単なる回避策ですか?これにより副作用が発生する可能性がありますか?なぜ発生するのですか/何ですか?実際に引き起こされた問題?​​

4
automatix

表示されている拡張子をphp.iniファイルに2回ロードした可能性があります。

/etc/php/7.0フォルダーを検索すると、そのサブフォルダーにphp.iniファイルがあります。おそらく次の場所にあります。

  • /etc/php/7.0/cli/
  • /etc/php/7.0/Apache2/

これらのphp.iniファイルでいくつかのextension = something.soが2回繰り返されている場合は、一方から削除するか、警告が両方から削除を示している場合は削除できます。

4
Anurag Kumar

Linux上のPHPは通常、サブフォルダーをスキャンしてより多くの構成ファイルを探します。これがこの場合に発生したことです。

Configuration File (php.ini) Path => /etc/php/7.0/cli Loaded
Configuration File => /etc/php/7.0/cli/php.ini Scan this dir for additional .ini files => /etc/php/7.0/cli/conf.d 
Additional .ini files parsed => 
  /etc/php/7.0/cli/conf.d/10-opcache.ini,
  /etc/php/7.0/cli/conf.d/10-pdo.ini,
  /etc/php/7.0/cli/conf.d/20-calendar.ini,
  /etc/php/7.0/cli/conf.d/20-ctype.ini,
  /etc/php/7.0/cli/conf.d/20-curl.ini,
  /etc/php/7.0/cli/conf.d/20-exif.ini,
  /etc/php/7.0/cli/conf.d/20-fileinfo.ini,
  /etc/php/7.0/cli/conf.d/20-ftp.ini,
  /etc/php/7.0/cli/conf.d/20-gettext.ini,
  /etc/php/7.0/cli/conf.d/20-iconv.ini,
  /etc/php/7.0/cli/conf.d/20-json.ini,
  /etc/php/7.0/cli/conf.d/20-mcrypt.ini,
  /etc/php/7.0/cli/conf.d/20-mongodb.ini,
  /etc/php/7.0/cli/conf.d/20-mysqli.ini,
  /etc/php/7.0/cli/conf.d/20-pdo_mysql.ini,
  /etc/php/7.0/cli/conf.d/20-pdo_sqlite.ini,
  /etc/php/7.0/cli/conf.d/20-phar.ini,
  /etc/php/7.0/cli/conf.d/20-posix.ini,
  /etc/php/7.0/cli/conf.d/20-readline.ini,
  /etc/php/7.0/cli/conf.d/20-shmop.ini,
  /etc/php/7.0/cli/conf.d/20-sockets.ini,
  /etc/php/7.0/cli/conf.d/20-sqlite3.ini,
  /etc/php/7.0/cli/conf.d/20-sysvmsg.ini,
  /etc/php/7.0/cli/conf.d/20-sysvsem.ini,
  /etc/php/7.0/cli/conf.d/20-sysvshm.ini,
  /etc/php/7.0/cli/conf.d/20-tokenizer.ini,
  /etc/php/7.0/cli/conf.d/20-xdebug.ini,
  /etc/php/7.0/cli/conf.d/20-xsl.ini

少しウォークスルーPHPフォルダ/etc/php/7.0/cli/をスキャンし、php.iniというサブディレクトリにさらに構成(ini)ファイルがあるはずだと告げるconf.dを見つけました。各モジュールには、通常Linuxおよびそれ以降のバージョンのPHPで独自のiniファイルがあります。

「INIファイルのこの行を削除することは、警告メッセージを回避するための解決策ですか、それとも単なる回避策ですか?」という質問に答えるために。

正直なところ、各モジュールの構成を別々のファイルに入れるのが好きですが、conf.dファイルでモジュールを構成する場合は、php.iniのファイルを削除できます。散らかっています。

3
Philip Rollins

PHPはモジュールを複数回ロードしています。余分なphp.iniファイルを見つけて削除します。

  1. 次のphpファイルを実行します。それはあなたのphpインストールに関する多くの情報を表に出力します:

<?php
phpinfo();
  1. 表で、"Loaded Configuration File"のエントリを見つけます。 php.iniがどこにあるかがわかります。ディスクに移動し、名前をphp.ini.bakに変更します。
  2. サーバーを再起動し、上記のファイルをもう一度実行します。 "Loaded Configuration File"は、他のphp.iniがどこにあるかを教えてくれます。それは重複です。
  3. 重複をバックアップして削除します。元の状態に戻すと、元の状態に戻ります。
2
BeetleJuice

/etc/php5/Apache2/php.iniと/etc/php5/cli/php.iniを確認してください。このディレクトリの各php.iniに拡張子xdebug.soをロードしないでください。 1つのphp.iniのみがロードする必要があります。 PHP警告:モジュールはすでに0行目の不明にロードされています

0
kenai37

私も同じ問題を抱えていました。 PHPバージョンを更新し、問題を解決しました。

何らかの理由で、composer.lockファイルのステータスが一貫していないことが原因で問題が発生しました。コンポーザーを更新した後(そしてもちろん、すべての単体テストを実行して何も壊れていないことを確認した後)、エラーはなくなり、composer runはクリーンでした。

0
VBage Tech