如何禁用XDebug


124

我认为自从安装XDebug之后,我的服务器就变慢了。因此,为了检验我的假设,我想完全禁用XDebug。我一直在寻找有关如何执行此操作的教程,但找不到此类信息。

Answers:


163

查找您的内容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文件的远程调试?


谢谢!我发现我的问题是APC,我的记忆力显然很低。没错,xdebug是PHP的一部分,而不是Apache的模块。现在一切正常。
贝托·阿维加

1
@Uday,如果我在php.ini中找不到任何内容,该怎么办。我已经检查了/ etc / php中的所有地方,包括grep搜索。
Haralan Dobrev

@HaralanDobrev检查phpinfo()以查看xdebug是否真正启用。如果是,请检查是否有附加到php.ini文件的其他ini文件。另外,请确保您正在编辑正确的ini文件。可以将这些文件放在多个位置。
Uday Sawant

18
@UdaySawant我能评论的行之后禁用它zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so/etc/php5/conf.d/xdebug.ini。但是,答案中指定的行/usr/lib/php5/etc行均不可用。
Haralan Dobrev 2013年

5
实际上,最好完全不加载扩展,仅在需要时加载它。即使禁用,XDebug实际上也会使速度大大降低。在调试/分析某些创建网页的脚本时,可能没有感觉到性能下降太多,但是对于守护程序脚本,它显示了很多。我只写上为什么不能在所有加载它一个博客帖子,是更好的,在这里:bit.ly/14SaWpp
thesilentman

99

在类似于Ubuntu的Linux发行版上工作的简单解决方案

sudo php5dismod xdebug
sudo service apache2 restart

10
您能否详细说明您的答案,并提供有关您提供的解决方案的更多说明?
abarisone 2015年

3
该命令用于ubuntu,而不是centOS。应该提供该说明,因为您不是唯一使用同一Linux发行版的人。
MaXi32

1
这是针对apache2而非CLI。这些可能具有不同的php.ini文件
Adib Aroui

6
根据您的PHP版本,您应该输入$ sudo phpdismod xdebug
RousseauAlexandre

2
该答案仅适用于与Apache的mod-php一起使用的PHP。
约翰·亨特

35

在带有PHP 5的Linux Ubuntu可能也是另一个-未经测试)发行版中,您可以使用:

sudo php5dismod xdebug

并与PHP 7

sudo phpdismod xdebug

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

sudo service apache2 restart

我相信PHP 7从ini文件中删除了xdebug。所以这个答案帮助了我。
基思·霍利迪

1
为PHP7工作。注释php.ini中的xdebug设置无效。
卡洛夫·陶里恩

1
没用 警告:模块xdebug ini文件在/etc/php/7.1/mods-available下不存在
dxvargas

25

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

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


32
这只会禁用显示堆栈跟踪,实际上并不会禁用xdebug(我知道这是个非常命名的函数)
BlueRaja-Danny Pflughoeft 2013年

这是处理很多情况的好方法。即使这并不能满足OP的需求,也要为此感谢。
杰克

3
@Jake,我不确定操作人员是否在寻找屠夫。
thephpdev

1
@杰克呵呵 反正只是在开玩笑。😛–
thephpdev

1
@BinarWeb,因为人们可能会认为此功能会禁用整个xdebug并提高性能,但事实并非如此
Fogus

12

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

$ 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/cli/conf.d中而不是在/etc/php/7.0/fpm/conf.d中
将于

这也将在Mac osx或centos vagrant上的php 7.2,9上运行。只需将其重命名为xdebug.ini即可,将其重命名为xdebug.ini.old或其他内容
vknyvz

这就是首席
Micheal C Wallas

10

在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

8

在xubuntu中,我完全禁用xdebug的CLI与此...

sudo rm /etc/php5/cli/conf.d/*xdebug*

注意:这确实帮助我进行了作曲家更新。需要禁用xdebug来解决性能问题。
Artistan 2014年

3
这也适用于laravel宅基。禁用宅基地/ laravel中的xdebug只需注释掉文件中的这一部分/etc/php5/cli/conf.d/20-xdebug.ini
ulkas 2014年

值得一提的是,如果从终端运行php脚本,并通过passthru启用xdebug的功能从终端运行另一个php脚本,则xdebug可能会挂起并停止执行。
Gherman

1
不确定下降的目的是什么,这似乎是禁用CLI和其他环境的xdebug的唯一方法。虽然我用unlinkrm,如果它是可用的。
安迪

4
我不会rm /取消链接ini,而是按照ulkas的建议做,sudo nano /etc/php/7.0/cli/conf.d/20-xdebug.ini并注释掉它。
贾斯汀

7

在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则不会。


4

两种选择:

1:在初始化脚本中添加以下代码:

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

2:将以下标志添加到php.ini中

 xdebug.remote_autostart=0
 xdebug.remote_enable=0

推荐第一个选项。


4

找到您的PHP.ini,然后寻找XDebug。

通常在Ubuntu中,它的路径是

/etc/php5/apache2/php.ini  

进行以下更改(最好在开头添加;

xdebug.remote_autostart=0
xdebug.remote_enable=0
xdebug.profiler_enable=0

然后再次为Ubuntu重新启动服务器

sudo service apache2 restart

4

禁用xdebug

对于PHP 7: sudo nano /etc/php/7.0/cli/conf.d/20-xdebug.ini

对于PHP 5: sudo nano /etc/php5/cli/conf.d/20-xdebug.ini

然后注释掉所有内容并保存。


更新-仅对CLI禁用

根据@igoemon的评论,这是一个更好的方法:

PHP 7.0(NGINX)

sudo mv /etc/php/7.0/cli/conf.d/20-xdebug.ini /etc/php/7.0/cli/conf.d/20-xdebug.ini.old
sudo service nginx restart

注意:将路径更新为您的PHP版本。


这不是解决方案,因为/etc/php/7.0/cli/conf.d/20-xdebug.ini只是一个符号链接,如果您对其进行编辑,则可以编辑cli和non-cli通用的原始文件。我认为正确的解决方案是简单删除符号链接。
igoemon

更新了答案^。
贾斯汀

4

Ubuntu 16.04从PHP移除xdebug。

找到您的php.ini文件,并确保存在xdebug:

grep -r "xdebug" /etc/php/

如果可能,它可能会带有不同的版本,如果php -v可以找到您的版本。

编辑php.ini文件,例如:

sudo vi /etc/php/5.6/mods-available/xdebug.ini

评论这一行:

//zend_extension=xdebug.so

保存文件


是的,您绝对需要第一个命令来找出您执行的所有(错误的)xdebug配置。谢谢!
刘亚伦

4

如果您使用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

3

我遇到了类似的问题。有时,您不会在php.ini中找到xdebug.so。在这种情况下,请phpinfo()在php文件中执行并检查Additional .ini files parsed。在这里,您将看到更多的ini文件。其中之一将是xdebug的ini文件。只需删除(或重命名)此文件,重新启动apache,此扩展名将被删除。


3

我有以下问题:即使我设置了

xdebug.remote_enable=0 

显示了Xdebug-Error-Message-Decoration。

我的解决方案:

xdebug.default_enable=0

仅当我使用此标志时,Xdebug才被禁用。


3

(这是针对CentOS的)

重命名配置文件并重新启动apache。

sudo mv /etc/php.d/xdebug.ini /etc/php.d/xdebug.ini.old
sudo service httpd restart

进行相反的操作以重新启用。



1

所以,是的,所有您需要的只是在INI文件中注释行即可zend_extension=xdebug.so

可以通过添加分号进行注释。

但是,已经添加了这种答案,我想分享准备好的解决方案来切换Xdebug状态。

我已经为Xdebug设置了快速切换器。也许对某人有用。

Xdebug切换器


1

对于WAMP,在任务栏托盘中的Wamp图标上单击鼠标左键。将鼠标悬停在PHP上,然后单击php.ini并在您的texteditor中将其打开。

现在,搜索短语“ zend_extension”并添加;(分号)在前面。

重新启动WAMP,一切顺利。


1

Apache / 2.4.33(Win64)PHP / 7.2.4 myHomeBrew堆栈

在php.ini结尾,我使用以下内容来管理Xdebug与PhpStorm一起使用

; jch ~ Sweet analizer at https://xdebug.org/wizard.php for matching xdebug to php version.
; jch ~ When upgrading php versions check if newer xdebug.dll is needed in ext directory.
; jch Renamed... zend_extension = E:\x64Stack\PHP\php7.2.4\ext\php_xdebug-2.6.0-7.2-vc15-x86_64.dll

zend_extension = E:\x64Stack\PHP\php7.2.4\ext\php_xdebug.dll

; jch !!!! Added the following for Xdebug with PhpStorm

[Xdebug]
; zend_extension=<full_path_to_xdebug_extension>
; xdebug.remote_host=<the host where PhpStorm is running (e.g. localhost)>
; xdebug.remote_port=<the port to which Xdebug tries to connect on the host where PhpStorm is running (default 9000)>

xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000

xdebug.profiler_enable=1
xdebug.profiler_output_dir="E:\x64Stack\Xdebug_profiler_output"
xdebug.idekey=PHPSTORM
xdebug.remote_autostart=1

; jch ~~~~~~~~~To turn Xdebug off(disable) uncomment the following 3 lines restart Apache~~~~~~~~~ 
;xdebug.remote_autostart=0  
;xdebug.remote_enable=0
;xdebug.profiler_enable=0

; !!! Might get a little more speed by also commenting out this line above... 
;;; zend_extension = E:\x64Stack\PHP\php7.2.4\ext\php_xdebug.dll
; so that Xdebug is both disabled AND not loaded

1

受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

我创建了这个bash脚本来切换xdebug。我认为它至少应该在Ubuntu / Debian上有效。这适用于PHP7 +。对于PHP5,请使用php5dismod / php5enmod。

#!/bin/bash

#
# Toggles xdebug
#

if [ ! -z $(php -m | grep "xdebug") ] ; then
    phpdismod xdebug
    echo "xdebug is now disabled"
else
    phpenmod xdebug
    echo "xdebug is now enabled"
fi

# exit success
exit 0

1

仅对某些PHP版本或sapi禁用xdebug。在这种情况下,PHP 7.2 fpm

sudo phpdismod -v 7.2 -s fpm xdebug
sudo service php7.2-fpm nginx restart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.