如何禁用XDebug

150

我认为自从安装了XDebug后,我的服务器变得很慢。因此,为了验证我的假设,我想完全禁用XDebug。我一直在搜索如何禁用它的教程,但是我找不到相关信息。

27个回答

197

找到你的php.ini文件并查找XDebug。

将xdebug的自动启动设置为false。

xdebug.remote_autostart=0  
xdebug.remote_enable=0

禁用您的分析器

xdebug.profiler_enable=0

请注意,即使禁用了 xdebug,但加载它仍可能会导致性能损失要禁用扩展本身的加载,您需要在 php.ini 中将其注释掉。找到类似于以下条目:

zend_extension = "/path/to/php_xdebug.dll"

并且在注释时要加上;,例如;zend_extension = ...

请查看这篇帖子:XDebug,如何为单个.php文件禁用远程调试?


1
@Uday 如果我在php.ini中找不到这些内容怎么办?我已经在/ etc / php中的所有位置进行了检查,包括使用grep搜索。 - Haralan Dobrev
1
@HaralanDobrev 检查phpinfo()以查看xdebug是否已启用。如果是,请检查是否有任何附加的ini文件附加到php.ini文件。此外,请确保您正在编辑正确的ini文件。这些文件可能位于多个位置。 - Uday Sawant
19
在注释掉/etc/php5/conf.d/xdebug.ini中的zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so这一行后,我成功地将其禁用。然而,在/usr/lib/php5/etc中,回答中指定的那些行都不可用。 - Haralan Dobrev
7
实际上最好根本不加载这个扩展,并且只有在需要时才加载它。即使已禁用,XDebug实际上会导致很大的性能下降。当调试/分析一些创建网页的脚本时,人们可能感觉性能没有那么严重下降,但是对于后台脚本来说,情况就完全不同了。我刚刚写了一篇关于为什么不加载它更好的博客文章,链接在这里:http://bit.ly/14SaWpp - thesilentman
@thesilentman 我读了你的博客文章。需要在我的电脑上测试一下。只是为了交叉验证,EasyPHP使用两个不同的文件,一个用于网页(apache),另一个用于控制台应用程序。希望你已经编辑了正确的ini文件。 - Uday Sawant
显示剩余4条评论

103

适用于类似Ubuntu的Linux发行版的简单解决方案

sudo php5dismod xdebug
sudo service apache2 restart

11
请问您能否详细阐述一下您的答案,并对您提供的解决方案进行更多描述? - abarisone
3
该命令适用于Ubuntu而不是CentOS。你需要提供这个解释,因为你不是唯一使用相同Linux发行版的人。 - MaXi32
你应该注意这只适用于特定的操作系统,在这种情况下似乎是Ubuntu。无论如何,它在我的Mac上肯定不起作用。 - Matt Fletcher
1
这是针对apache2而不是CLI的。它们可能有不同的php.ini文件。 - Adib Aroui
6
根据您的PHP版本,您应该输入“$ sudo phpdismod xdebug”。 - alexandre-rousseau
2
本答案仅适用于在Apache的mod-php下使用PHP。 - John Hunt

48

在Linux Ubuntu(也可能是其他的,没有测试过)上,如果预装了PHP 5,可以使用以下命令:

sudo php5dismod xdebug

并且使用PHP 7

sudo phpdismod xdebug

之后,请重新启动服务器:

sudo service apache2 restart

1
PHP 7从ini文件中删除了xdebug,我相信。所以这个答案帮助了我。 - Keith Holliday
1
曾经为PHP7工作过。在php.ini中注释掉xdebug设置并没有起作用。 - Kalob Taulien
1
没有起作用。警告:模块xdebug ini文件不存在于/etc/php/7.1/mods-available下。 - dxvargas
php -v; phpdismod -v 7.4 xdebug; 根据第一个命令的输出更改7.4为相应的PHP版本。 - Oleg Apanovich

27

此外,您可以在代码中添加 xdebug_disable()。尝试:

if(function_exists('xdebug_disable')) { xdebug_disable(); }


39
这只是禁用堆栈跟踪的显示,它并没有真正禁用 xdebug(函数命名很糟糕,我知道)。 - BlueRaja - Danny Pflughoeft
这是一个处理许多情况的绝妙方式。即使它并不完全符合 OP 的需求,也感谢您提供了这个方法。 - Jake
6
@Jake,我不确定原帖作者在寻找一个屠夫。 - thephpdev
1
@Jake 呵呵。反正我只是开玩笑而已。 - thephpdev
1
@BinarWeb 因为人们可能会认为这个函数禁用了整个 xdebug 并提高了性能,但实际上并非如此。 - Fogus
显示剩余2条评论

15

我重命名了配置文件并重新启动了服务器:

$ mv /etc/php/7.0/fpm/conf.d/20-xdebug.ini /etc/php/7.0/fpm/conf.d/20-xdebug.ini.bak

$ sudo service php7.0-fpm restart && sudo service nginx restart

它对我有效。


这对我有用,只是在 /etc/php/7.0/fpm/conf.d 的位置上,改为 /etc/php/7.0/cli/conf.d。 - Will
这个方法在Mac OSX或CentOS Vagrant上的PHP 7.2、9也可以使用。只需将文件名从xdebug.ini更改为xdebug.ini.old或其他名称即可。 - vknyvz
这就是它,首领。 - Micheal C Wallas
1
对于非 FPM PHP: sudo mv /etc/php/7.4/apache2/conf.d/20-xdebug.ini /etc/php/7.4/apache2/conf.d/20-xdebug.ini.bak - Vlad Pavlov

11
在php.ini中启用评论扩展,并重新启动Apache。这里是一个简单的脚本(您可以为其分配快捷方式)

xdebug-toggle.php

define('PATH_TO_PHP_INI', 'c:/xampp/php/php.ini');
define('PATH_TO_HTTPD', 'c:/xampp/apache/bin/httpd.exe');
define('REXP_EXTENSION', '(zend_extension\s*=.*?php_xdebug)');

$s = file_get_contents(PATH_TO_PHP_INI);
$replaced = preg_replace('/;' . REXP_EXTENSION . '/', '$1', $s);
$isOn = $replaced != $s;
if (!$isOn) {
    $replaced = preg_replace('/' . REXP_EXTENSION . '/', ';$1', $s);
}
echo 'xdebug is ' . ($isOn ? 'ON' : 'OFF') . " now. Restarting apache...\n\n";
file_put_contents(PATH_TO_PHP_INI, $replaced);

passthru(PATH_TO_HTTPD . ' -k restart');

为了真正完全禁用XDebug,这是正确的答案,请参见我在@UdaySawant答案中的评论。 - thesilentman

9
在Xubuntu中,我完全禁用了xdebug用于CLI,方式如下...
sudo rm /etc/php5/cli/conf.d/*xdebug*

注意:这对我在更新Composer时非常有帮助。由于性能问题,需要禁用Xdebug。 - Artistan
3
这也适用于Laravel Homestead。要在Homestead/Laravel中禁用xdebug,只需注释掉文件/etc/php5/cli/conf.d/20-xdebug.ini中的部分即可。 - ulkas
值得一提的是,如果您在终端中运行 PHP 脚本,并通过 passthru 函数从终端运行另一个 PHP 脚本并启用了 xdebug,则 xdebug 可能会挂起并停止执行。 - Gherman
1
不确定为什么会被踩,这似乎是禁用CLI的xdebug而不影响其他环境的唯一方法。虽然如果可用的话,我会使用unlink而不是rm - Andy
4
我不会删除/取消链接ini文件,相反,可以按照ulkas的建议执行 sudo nano /etc/php/7.0/cli/conf.d/20-xdebug.ini 并将其注释掉。 - Justin

8
如果您正在使用php-fpm,则以下内容应该足够:
sudo phpdismod xdebug
sudo service php-fpm restart

请注意,您需要根据自己的php版本进行调整。例如,在运行php 7.0时,您应该执行以下操作:
sudo phpdismod xdebug
sudo service php7.0-fpm restart

如果您正在运行php-fpm,那么就不需要重新启动实际的Web服务器。但是,如果您不使用fpm,则可以使用以下任何一种命令简单地重新启动Web服务器:

sudo service apache2 restart
sudo apache2ctl restart

1
太好了!sudo phpdismod xdebug sudo service php7.2-fpm restart 这解决了我的问题。 - matinict

8
在Windows(WAMP)的CLI ini文件中:
X:\wamp\bin\php\php5.x.xx\php.ini
注释行
; XDEBUG Extension

;zend_extension = "X:/wamp/bin/php/php5.x.xx/zend_ext/php_xdebug-xxxxxx.dll"

Apache会处理 xdebug,而composer不会。


7
受 PHPStorm 的启发,右键单击文件 -> 调试 -> ...
www-data@3bd1617787db:~/symfony$ 
php 
-dxdebug.remote_enable=0 
-dxdebug.remote_autostart=0 
-dxdebug.default_enable=0 
-dxdebug.profiler_enable=0 
test.php

重要的内容是 -dxdebug.remote_enable=0 -dxdebug.default_enable=0

1
所有其他关于文件系统的解决方案都可以无视了,这个简直是传奇!:raised_hands: 这甚至可以在 docker execdocker run 中使用。 - MrMesees
1
对于xdebug 3,请使用xdebug.mode=off或在此情况下使用-dxdebug.mode=off - Sandra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接