命令行跟website模式下访问php小坑

今天在开发环境下碰到一个问题:
命令行执行脚本出现PHP Fatal error: Class ‘Yaf_Application’ not found,但是通过website访问是正常的。
我本地命令行跟website一点问题也没有,最后发现是命令行跟website模式下使用的php版本不同导致的。算是个小坑,记一笔。

本地、开发环境都是centos
在开发环境命令行执行php -v的版本是5.6,但是通过website访问使用phpinfo查看版本是5.4。
yum list installed | grep php 查看依赖包,发现已经删除了旧的php的依赖包

find / -name php 查看所有php版本
显示结果中可以找到下面两个命令:
/usr/local/php/bin/php
/etc/bin/php

可以看到旧的php版本本身没有删除,也就是说开发环境存在两个版本的php。
执行 php -v 系统访问的路径默认访问的是5.6版本的包,但是通过nginx去访问的时候还是旧的5.4版本的php。
分别执行 /usr/local/php/bin/php -v 和 /etc/bin/php -v 可以看到,一个是5.4版本,一个是5.6版本,这就是为什么上面php -v 看到的是5.6版本,
而phpinfo看到的是5.4版本的原因。
原因分析:http请求nginx,nginx转发到127.0.0.1:9000,监听9000端口的php-fpm接收到请求后,将请求转交给对应的php解释器进行处理,也就是说使用的是哪个版本
的php是由php-fpm决定,而php-fpm只是php的一个补丁,通过编译安装php时configure加上参数 –enable-fpm 安装php-fpm,所以安装php时就已经决定了php-fpm
调用的是哪一个版本的php,如果需要改变使用的php版本,只能重新下载更新的php源代码,然后重新编译安装带上–enable-fpm参数,
这样才能成功改变phpinfo()显示的版本。

我在本地虚拟机开发,php版本使用只有一个,所以在命令行和website都正常, php -m查看加载的模块都能看到yaf。

网上查资料还发现一种情况关于用户组的
root用户装的php /usr/bin/php
非root用户装的php /usr/local/bin/php
不同用户组执行php -v 版本可能不同导致php.ini中加载的模块不同,而出现一些问题。 如php -m 一个可以找到Yaf 一个不能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值