php cli配置文件问题分析


Posted in PHP onOctober 15, 2015

引言

今天在教别人使用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

后面两个是必须的,生成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 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

这让我摸不着头脑了。

时间过去了好久,没有发现任何突破,却发现了一个备用的解决这个问题的方案,修改/data/php_proto/文件夹权限为0775,其他普通用户就可以直接使用了,不用加sudo(这个是我的错,忘记修改文件夹权限了,这也让我发现了这个诡异的问题)

chmod -R 0775 /data/php_proto
看了报的这些错误,大部分都是扩展的问题,有的是扩展加载不成功,有的是扩展不存在,我就纳闷了,为什么普通用户可以,root用户就不可以。

看到root用户php -i的时候,配置文件的地方跟非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

尝试着对这两个文件使用了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,至此问题解决。

纠结了半天,结果就是版本的问题。

PHP 相关文章推荐
域名查询代码公布
Oct 09 PHP
php入门小知识
Mar 24 PHP
php简单的会话类代码
Aug 08 PHP
PHP循环语句笔记(foreach,list)
Nov 29 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
PHP用身份证号获取星座和生肖的方法
Nov 07 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
php截取字符串函数分享
Feb 02 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
PHP微信API接口类
Aug 22 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
Oct 15 #PHP
10个php函数实用却不常见
Oct 13 #PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 #PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
Oct 13 #PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 #PHP
apache和PHP如何整合在一起
Oct 12 #PHP
php实现Mysql简易操作类
Oct 11 #PHP
You might like
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
如何运行Python程序的方法
2013/04/21 Python
python获取糗百图片代码实例
2013/12/18 Python
讲解Python中运算符使用时的优先级
2015/05/14 Python
python日志记录模块实例及改进
2017/02/12 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
python能自学吗
2020/06/18 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
DNA测试:Orig3n
2019/03/01 全球购物
化学学院毕业生自荐信范文
2013/12/17 职场文书
法制宣传教育方案
2014/05/09 职场文书
校园广播稿精选
2014/10/01 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
学习nginx基础知识
2021/09/04 Servers
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL