php cli設定檔有關問題

來源:互聯網
上載者:User
php cli設定檔問題

引言

今天在教別人使用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.protodrwsrwxr-x 2 yanruitao users 4096 10月 10 17:54 ProtobufCompiler-rwxrwxr-x 1 yanruitao users 2969 3月   9 2015 protoc-php.php

後面兩個是必須的,產生pb協議實作類別庫檔案時會用到,前面兩個是一個簡單的例子,使用也很簡單,就像下面這樣。

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'

兩種使用者載入的不是同一個設定檔,普通使用者載入的是/usr/local/php/lib/php.ini,而root使用者載入的是/etc/php.ini這個檔案,我看了下這兩個檔案內容不一致,哈哈,好開心,趕緊把先把/etc/php.ini備份,/usr/local/php/lib/php.ini複製到/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 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

這讓我摸不著頭腦了。

時間過去了好久,沒有發現任何突破,卻發現了一個備用的解決這個問題的方案,修改/data/php_proto/檔案夾許可權為0775,其他普通使用者就可以直接使用了,不用加sudo(這個是我的錯,忘記修改檔案夾許可權了,這也讓我發現了這個詭異的問題)

chmod -R 0775 /data/php_proto

看了報的這些錯誤,大部分都是擴充的問題,有的是擴充載入不成功,有的是擴充不存在,我就納悶了,為什麼普通使用者可以,root使用者就不可以。

看到root使用者php -i的時候,設定檔的地方跟非root使用者有不一致的地方:

//非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,......

命名載入的是一樣的設定檔怎麼載入之後的內容就不一樣呢?
搜了半天,知道了報的錯裡面有部分是跟這個有關係的,但是這個在哪裡修改搜了老久也沒有搜到。

忽然想到root使用者和非root使用者使用的php可執行檔是不一致的

root => /usr/bin/php非root => /usr/local/bin/php

嘗試著對這兩個檔案使用了php -v,結果下了我一跳,root使用者的版本是5.3.3,非root使用者是5.4.6,呵呵,我就呵呵了,誰部署的環境~,坑人啊。

嘗試著將原有/usr/bin/php備份後,複製/usr/local/bin/php過來覆蓋掉,在使用php -v發現版本一致了,也不報錯了,再次去執行php protoc-php.php -n --psr dmp.proto,發現all is well,至此問題解決。

糾結了半天,結果就是版本的問題。

總結

多思考,多換個角度思考。
做事要完善啊,別給後輩留下一些詭異問題←_←。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.