坑爹的Fatal error Class 'Memcached' not found错误
前段时间遇到这么一个坑爹的情况:(PHP 5.3.5有问题,但PHP 5.2.却是正常)
有一个PHP脚本(有用到Memcached客户端),通过浏览器在网页调用的时候是可以正常执行的;但如果直接通过命令行用php /test/mem.php
却会报一个『Fatal error Class ‘Memcached’ not found』的错误。
这种情况和网络上找到的资料所说的相差甚远,我在浏览器中调用info.php可以看到Memcached已经加载,但用php --info |grep -i memcached
却坑爹的没有反应。
费了我一天的时间分析找原因,居然白痴得最后才去看看两者之间的启动和执行有什么不同,但这么一找还真找到了问题所在。
在进程中正在运行的PHP进程是用一个SHELL调用的,里面有详细的调用参数,其中有一个是『-c /usr/local/services/php-5.3.5/lib/php.ini』。
而我在命令行调用是没有带任何参数就启动的,但我想不明白的是为什么我的PHP-5.2.6版本能在命令行中不带任何参数直接运行这个脚本。
直到我查看了『php –ini』和『php –info』,对比了两者的编译参数。
有一个坑爹的--with-config-file-path=/usr/local/services/php-5.3.5/lib/php.ini
,
而不是正常的--with-config-file-path=/usr/local/services/php-5.3.5/lib
,所以导致了下面的情况:
PHP 5.2.6: Configuration File (php.ini) Path: /usr/local/services/php-5.2.6/lib Loaded Configuration File: /usr/local/services/php-5.2.6/lib/php.ini
PHP 5.3.5: onfiguration File (php.ini) Path: /usr/local/services/php5.3.5/lib/php.ini Loaded Configuration File: (none)
这样一切问题就迎刃而解了,WELL DONE!