我最近安装xdebug
在我的服务器上,但限制它用于我们的测试站点,该站点使用它自己的php.ini
文件.
例如,测试站点php.ini
位于:
/home/test_site/public_html/subdomain_name/php.ini
在这个php.ini
文件里面我有以下xdebug:
[XDebug] zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so xdebug.profiler_append = 0 xdebug.profiler_enable = 1 xdebug.profiler_enable_trigger = 0 xdebug.profiler_output_dir = /home/test_site/xdebug xdebug.profiler_output_name = "cachegrind.out.%s-%u.%h_%r"
现在,事情是,xdebug 工作正常,没有问题.
但是,在我们的主站点上,它也有自己的php.ini
文件,例如位于:
/home/main_site/public_html/php.ini
在这个文件里面,我什么都没有xdebug
.
现在,我最近在cpanel中设置了一个cron,用于main site
:
php -f /home/main_site/public_html/cron_jobs/main_cron.php > /home/main_site/public_html/logs/main_cron.log 2>&1
现在,在检查日志文件中的cron输出后,我得到输出:
Failed loading xdebug.so: xdebug.so: cannot open shared object file: No such file or directory
当主站点甚至不能加载xdebug时,为什么会出现此错误?
即使您将两个站点分开并使用两个不同的php.ini文件,CRON仍将使用PHP-CLI配置使用的任何php.ini文件.因此,要弄清楚哪个php.ini CRON正在使用,这是要使用的命令:
php -i | grep php.ini
如果PHP-CLI碰巧使用的是你不希望它使用的php.ini文件(例如/usr/local/lib/php.ini
),那么这将是弄清楚为什么你在日志中看到Xdebug错误的关键.
事实证明该/usr/local/lib/php.ini
文件设置了这两个值:
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20090626" zend_extension = "xdebug.so"
这导致CRON运行的PHP脚本(即PHP-CLI)出错,因为zend_extensions需要模块的完整路径.这也在Xdebug文档中说明:http://xdebug.org/docs/install
因此,要消除错误,只需注释掉该行(或只删除它).extension_dir
只要您没有加载任何其他模块,您也可以注释掉或删除该行,例如:
extension = memcached.so