YiluPHP
这家伙很懒,什么都没有留下...

经验 PHP cli下运行PHP时报错Class 'Redis' not found

浏览数 191686
今天想用PHP cli运行PHP,结果报错 Class 'Redis' not found
PHP Fatal error:  Class 'Redis' not found
而这个PHP代码通过HTTP访问是正常的,说明redis扩展是没有问题的。

使用以下第一种方法解决了,另外在网上看到其它可能的解决方法,一并收藏了
第一种方法
php 命令行模式使用的php.ini 可能和正常的不是一个,所以,你需要在命令行下执行:

php --ini


看一下加载的ini是否和网页的是一个。如果是一个的话,还有看一下 php.ini 里 extension_dir 的路径,改为绝对路径。 否则将正常的替换到上图 Loaded Configuration File 目录。修改后记得重启php-fpm哦。

sudo vim /usr/local/etc/php/5.5/php.ini
sudo kill -USR2 `cat /var/run/php-fpm.pid`


第二种方法
解决步骤:
1.首先,通过phpinfo或php -i | grep -i redis,或php -m确认php的redis扩展安装成功
2.新建redis连接测试脚本test_redis_connect.php,以cli方式命令行运行该脚本,成功连接到redis服务器
3.通过浏览器以web方式请求该脚本,连接redis服务器失败,怀疑apache运行用户与cli执行用户的权限差异导致了二者的连接差异
4.通过修改/usr/lib64/php/modules/下扩展文件的权限,以及apache用户的运行权限,重复执行第3步测试仍然失败,排除执行权限问题
5.通过tcpdump对6379端口截包发现,命令行运行test_redis_connect.php时有发送tcp连接请求,而web请求test_redis_connect.php时,6379端口没有任何tcp连接请求信息,由此怀疑可能操作系统的网络安全策略有问题
6.确认防火墙iptables已经关闭,经查,CentOS系统SElinux阻止httpd进行网络连接,通过将SElinux的运作模式由enforcing【强制模式】调整为permissive【宽容模式】后,重复执行第5步测试,
此时web请求test_redis_connect.php时,tcpdump能截取到6379端口的tcp连接请求信息,测试脚本连接redis服务器成功
7.至此,问题已经确定并解决,注意SElinux的permissive【宽容模式】只是临时设置,永久设置或关闭需要重启操作系统


我来说说