PHP cli 設定ファイルの問題
今日、他の人に protobuf の使い方を教えていたときに、偶然 PHP cli モードで奇妙な問題を発見しました。解決策を見つけるのに長い時間がかかりました。ここで共有してください。
最初に protobuf プロトコルを導入し、allegro/php-protobuf 拡張機能を使用してインストールしました。他の同僚もここ数日でこれを使用する予定なので、PHP クラス ライブラリ ファイルを生成する protobuf の部分を、これらのコンテンツを含む公開場所の /data/php_proto/
フォルダーに、
<code>drwsrwxr-x 2 yanruitao users 4096 10月 14 17:05 Dmp-rwxrwxr-x 1 yanruitao users 472 10月 10 17:59 dmp.protodrwsrwxr-x 2 yanruitao users 4096 10月 10 17:54 ProtobufCompiler-rwxrwxr-x 1 yanruitao users 2969 3月 9 2015 protoc-php.php</code>
の後ろに置きました。 2 つは必要で、pb プロトコル実装クラス ライブラリ ファイルを生成するときに使用されます。最初の 2 つは単純な例であり、次のように非常に簡単に使用できます。
<code>php protoc-php.php -n --psr dmp.proto //-n是使用命名空间,--psr是使用psr-4标准</code>
同僚が使用したところ、エラーが報告されることがわかりました。
<code>PHP Warning: file_put_contents(pb_proto_dmp.php): failed to open stream: Permission denied in /data/php_proto/ProtobufCompiler/ProtobufParser.php on line 309</code>
同僚に尋ねられたとき、私は直接、sudo
を追加してくださいと言いました。その結果、sudo の問題が発生し、さらに悪いことに、最初にインストールされた拡張プログラムがロードできませんでした。いくつかのトラブルシューティングを行った結果、次の問題が見つかりました:
<code>$yanruitao: php -i | grep 'php.ini'$yanruitao: sudo php -i | grep 'php.ini'</code>
2 人のユーザーが同じ設定ファイルをロードしませんでした。一般ユーザーがロードしたのは /usr/local/php/lib/php.ini
で、root ユーザーがロードしたファイルは /etc/php.ini
でした。ははは、すぐにバックアップしました。 🎜> を最初にコピーし、 /etc/php.ini
を /usr/local/php/lib/php.ini
にコピーしました。コピー後、再度使用するとショックを受け、多くのエラーが報告されました: /etc/php.ini
<code>PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/web_stub_cntl.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/web_stub_cntl.so: undefined symbol: zend_new_interned_string in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/web_stub_cntl.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/web_stub_cntl.so: undefined symbol: zend_new_interned_string in Unknown on line 0PHP Warning: PHP Startup: test: Unable to initialize moduleModule compiled with module API=20100525PHP compiled with module API=20090626These options need to match in Unknown on line 0Warning: PHP Startup: test: Unable to initialize moduleModule compiled with module API=20100525PHP compiled with module API=20090626These options need to match in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/protobuf.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/protobuf.so: undefined symbol: zend_new_interned_string in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/protobuf.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/protobuf.so: undefined symbol: zend_new_interned_string in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/imagick.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/imagick.so: undefined symbol: zend_new_interned_string in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/imagick.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/imagick.so: undefined symbol: zend_new_interned_string in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/data/boss/phpredis-develop/modules/redis.so' - /data/boss/phpredis-develop/modules/redis.so: undefined symbol: zend_new_interned_string in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/data/boss/phpredis-develop/modules/redis.so' - /data/boss/phpredis-develop/modules/redis.so: undefined symbol: zend_new_interned_string in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/curl.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/curl.so: cannot open shared object file: No such file or directory in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/curl.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/curl.so: cannot open shared object file: No such file or directory in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/fileinfo.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/fileinfo.so: cannot open shared object file: No such file or directory in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/fileinfo.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/fileinfo.so: cannot open shared object file: No such file or directory in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/gd.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/gd.so: cannot open shared object file: No such file or directory in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/gd.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/gd.so: cannot open shared object file: No such file or directory in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/json.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/json.so: cannot open shared object file: No such file or directory in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/json.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/json.so: cannot open shared object file: No such file or directory in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/phar.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/phar.so: cannot open shared object file: No such file or directory in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/phar.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/phar.so: cannot open shared object file: No such file or directory in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/data/boss/phpredis-develop/modules/redis.so' - /data/boss/phpredis-develop/modules/redis.so: undefined symbol: zend_new_interned_string in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/data/boss/phpredis-develop/modules/redis.so' - /data/boss/phpredis-develop/modules/redis.so: undefined symbol: zend_new_interned_string in Unknown on line 0PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/zip.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/zip.so: cannot open shared object file: No such file or directory in Unknown on line 0Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/zip.so' - /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/zip.so: cannot open shared object file: No such file or directory in Unknown on line 0protoc-php.php requires protobuf extension installed to run</code>
フォルダーのアクセス許可を 0775 に変更すると、他の一般ユーザーは sudo を追加せずに直接使用できるようになります。原因は、フォルダーのアクセス許可を変更するのを忘れたため、この奇妙な問題を発見することにもなりました) /data/php_proto/
<code>chmod -R 0775 /data/php_proto</code>
を表示すると、設定ファイルは root 以外のユーザーと矛盾します: php -i
<code>//非rootScan this dir for additional .ini files => (none)Additional .ini files parsed => (none)//rootScan this dir for additional .ini files => /etc/php.dAdditional .ini files parsed => /etc/php.d/curl.ini,......</code>
長い間検索した結果、報告されたエラーの一部がこれに関連していることがわかりましたが、長い間検索してもどこを修正すればよいのかわかりませんでした。
<code>root => /usr/bin/php非root => /usr/local/bin/php</code>
を使用してみましたが、混乱しています。root ユーザーのバージョンは 5.3.3 で、非 root ユーザーのバージョンは 5.4.6 です。ははは、環境をデプロイしたのは誰ですか~、これは詐欺です。 php -v
をバックアップし、/usr/bin/php
をコピーして上書きしてみました。/usr/local/bin/php
を使用した後、バージョンは一貫しており、エラーは報告されませんでした。php -v
を再度実行しました。すべてが解決したことがわかりました。問題はもう解決しました。 php protoc-php.php -n --psr dmp.proto
仕事は完璧にし、子孫に変な問題を残さないようにしなければなりません←_←。