我最近在我的服务器上安装了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中为main site
设置了一个cron,例如:
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时会出现此错误?
答案 0 :(得分:13)
即使您将两个站点分开并使用两个不同的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
答案 1 :(得分:2)
为了记录,在Linux Mint和我认为在一些Ubuntu系统中。要更改php.ini,最好去 /etc/php/7.0/cli/conf.d 并查找xdebug.ini并且必须更改所说的行我上面的帖子。
答案 2 :(得分:2)
有时可能很难从XDebug库加载的地方加载,因为可以通过在php.ini中指定路径或在mods-available中添加lib来完成。
首先,运行:
$ sudo grep 'xdebug' -r /etc/php/*
这将为您提供加载扩展名的文件。
现在确定正在使用哪个php.ini:
$ php -i | grep php.ini
这将为您提供正在使用的php版本(如果您有多个php版本)。现在将php版本与第一步的结果链接起来。
现在,要么必须注释掉加载xdebug扩展名的行,要么从/ etc / php / xx / mods-available中删除xdebug.ini文件(加载扩展名)(其中xx代表php正在使用的版本。)
答案 3 :(得分:1)
我在Linux上尝试以下方法并工作了,
您可以使用以下命令找到xdebug.so文件路径
locate xdebug.so
ex: /usr/lib/php/20160303/xdebug.so
使用以下命令找到当前的php.ini文件
php -i | grep php.ini
ex:
Configuration File (php.ini) Path => /etc/php/7.1/cli
Loaded Configuration File => /etc/php/7.1/cli/php.ini
之后,将xdebug配置下面的文件添加到cli和apache2文件夹的php.ini文件中,并带有正确的xdebug.so文件路径。
vi /etc/php/7.1/cli/php.ini
vi /etc/php/7.1/apache2/php.ini
[xdebug]
zend_extension=/usr/lib/php/20190902/xdebug.so
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_autostart = 1
最后,重新启动apache2服务器
sudo service apache2 restart
确保在编辑器中使用正确的xdebug端口!
干杯! :)
答案 4 :(得分:0)
我尝试了上面提到的所有过程,并在谷歌搜索后尝试了 this 和许多类似的过程,但最终还是出现了这个错误
$ php -i | grep php.ini
Failed loading /usr/lib/php/20200930/xdebug.so: /usr/lib/php/20200930/xdebug.so: undefined symbol: zend_get_properties_for
Configuration File (php.ini) Path => /etc/php/7.3/cli
Loaded Configuration File => /etc/php/7.3/cli/php.ini
我通过使用 Pecl更新 Xdebug 解决了这个问题。如果您没有按照说明安装它 here
$ pecl install xdebug
现在我更改了我的 xdebug.ini
文件。你可以使用
$ locate xdebug.ini
将 zend_extension = usr/lib/php/20180731/xdebug.so
添加到文件中。
xdebug.ini
[xdebug]
zend_extension = usr/lib/php/20180731/xdebug.so
最新版本的 Xdebug 3.0.4 仍然使用这些 usr/lib/php/20180731/xdebug.so
,但如果您尝试使用 $ locate xdebug.so
,您会看到不同的文件位置。
Php 输出正确的 Zend 扩展
$ php -v
PHP 7.3.27-9+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Feb 23 2021 15:10:08) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.27, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.27-9+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
with Xdebug v3.0.4, Copyright (c) 2002-2021, by Derick Rethans