php cliプロファイルの問題

9099 ワード

引用する
今日protobufの使用を他の人に教えたとき、何気なくphp cliモードの奇妙な問題を見つけて、長い間解決方法を見つけて、ここで共有しました.
問題の説明
ここで最初にprotobufプロトコルを導入しました.allegro/php-protobufという拡張インストールを使用しています.ここ数日他の同僚もこれを使います.そこでprotobufがphpクラスライブラリファイルを生成した部分を共通の場所/data/php_proto/フォルダの下に置きました.
drwsrwxr-x 2 yanruitao users 4096 10  14 17:05 Dmp
-rwxrwxr-x 1 yanruitao users  472 10  10 17:59 dmp.proto
drwsrwxr-x 2 yanruitao users 4096 10  10 17:54 ProtobufCompiler
-rwxrwxr-x 1 yanruitao users 2969 3    9 2015 protoc-php.php

後の2つは必須で、pbプロトコル実装クラスライブラリファイルを生成する際に使用されます.前の2つは簡単な例で、使用も簡単です.以下のように.
php protoc-php.php -n --psr dmp.proto //-n       ,--psr   psr-4  

同僚が使っている間に間違いを報告することに気づきました.
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

同僚が私に聞いたとき、私は直接sudoを加えればいいと言ったが、結果的にsudoの問題がさらに深刻になり、もともと組み込まれた拡張プログラムのロードが成功しなかったので、次のような質問があった.
$yanruitao: php -i | grep 'php.ini'
$yanruitao: sudo php -i | grep 'php.ini'

2つのユーザーがロードしたのは同じプロファイルではなく、普通のユーザーがロードしたのは/usr/local/php/lib/php.iniで、rootユーザーがロードしたのは/etc/php.iniというファイルです.多くのエラーが報告されました.
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 0

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 0
PHP Warning:  PHP Startup: test: Unable to initialize module
Module compiled with module API=20100525
PHP    compiled with module API=20090626
These options need to match
 in Unknown on line 0

Warning: PHP Startup: test: Unable to initialize module
Module compiled with module API=20100525
PHP    compiled with module API=20090626
These options need to match
 in Unknown on line 0
PHP 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 0

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 0
PHP 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 0

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 0
PHP 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 0

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 0
PHP 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 0

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 0
PHP 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 0

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 0
PHP 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 0

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 0
PHP 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 0

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 0
PHP 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 0

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 0
PHP 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 0

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 0
PHP 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 0

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 0
protoc-php.php requires protobuf extension installed to run

これは私に頭がつかめなくなった.
時間が過ぎて久しく、何の突破も発見されなかったが、この問題を解決するための代替案を発見した./etc/php.iniフォルダの権限を変更するのは0775で、他の一般ユーザーは直接使用することができ、sudoを追加する必要はない(これは私のせいで、フォルダの権限を変更するのを忘れた.これも私にこの奇妙な問題を発見させた).
chmod -R 0775 /data/php_proto

新聞のこれらのエラーを見て、大部分は拡張の問題で、あるのは拡張ロードが成功しないことで、あるのは拡張が存在しないことで、私はどうして普通のユーザーができるのか、rootユーザーはできないのかと悩んだ.
rootユーザー/usr/local/php/lib/php.iniを見たとき、プロファイルの場所がroot以外のユーザーと一致しない場所があります.
// root
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)

//root
Scan this dir for additional .ini files => /etc/php.d
Additional .ini files parsed => /etc/php.d/curl.ini,
......

ネーミングロードは同じプロファイルですが、どのようにしてロードした後の内容が違いますか?長いこと探して、新聞の間違いの中にこれと関係がある部分があることを知っていましたが、これはどこで修正して長い間探しても見つかりませんでした.
rootユーザと非rootユーザが使用するphp実行可能ファイルが一致しないことをふと思い出す
root => /usr/bin/php
 root => /usr/local/bin/php

この2つのファイルに/etc/php.iniを使ってみたところ、私はジャンプしました.rootユーザーのバージョンは5.3.です.3,root以外のユーザは5.4である.6,ほほほ、私はほほほ、谁が配置する环境~、坑人.
従来の/data/php_proto/のバックアップを試みた後、php -iをコピーして上書きし、php -vを使用してバージョンが一致したことを発見し、エラーも報告せず、再び/usr/bin/phpを実行し、all is wellを発見し、この問題を解決した.
長い間悩んでいたが、結局バージョンの問題だった.
まとめ
多く考えて、多く角度を変えて考えます.后辈に変な问题を残さないでください←_←.