Как отключить XDebug


124

Я думаю, что мой сервер стал медленным с тех пор, как я установил XDebug. Итак, чтобы проверить свою гипотезу, я хочу полностью отключить XDebug. Я искал учебники о том, как это сделать, но не могу найти такую ​​информацию.

Ответы:


164

Найдите свой 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. Теперь все работает нормально.
Beto Aveiga 06

1
@Uday, а что, если я не могу найти ничего из этого в моем php.ini. Я проверил везде внутри / etc / php, в том числе с помощью поиска grep.
Haralan Dobrev

@HaralanDobrev Проверьте phpinfo (), чтобы узнать, действительно ли xdebug включен. если это так, проверьте, есть ли у вас какие-либо дополнительные ini-файлы, прикрепленные к файлу php.ini. Кроме того, убедитесь, что вы редактируете правильный ini-файл. эти файлы можно хранить в нескольких местах.
Удай Савант

18
@UdaySawant Я смог отключить его после того, как прокомментировал строку zend_extension=/usr/lib/php5/20090626+lfs/xdebug.soиз /etc/php5/conf.d/xdebug.ini. Однако ни в, /usr/lib/php5ни в /etcстроках, указанных в ответе, нет.
Haralan Dobrev

5
Собственно, расширение лучше вообще не загружать, а загружать только при необходимости. XDebug на самом деле сильно замедляет работу, даже если он отключен. Можно не почувствовать, что производительность сильно упала, при отладке / профилировании некоторых сценариев, создающих веб-страницу, но со сценариями демона это показывает многое. Я только что написал в блоге сообщение о том, почему бы его вообще не загружать, лучше здесь: bit.ly/14SaWpp
thesilentman

99

Простое решение, работающее в дистрибутивах Linux, похожее на Ubuntu

sudo php5dismod xdebug
sudo service apache2 restart

10
Не могли бы вы подробнее рассказать о своем ответе, добавив еще немного описания предлагаемого вами решения?
abarisone

3
Эта команда предназначена для ubuntu, а не для CentOS. Следует предоставить такое объяснение, потому что вы не единственный, кто пользуется одним и тем же дистрибутивом Linux.
MaXi32

1
это для apache2, а не для CLI. У них могут быть разные файлы php.ini
Адиб Аруи

6
В зависимости от вашей версии PHP вы должны ввести$ sudo phpdismod xdebug
RousseauAlexandre

2
Этот ответ относится только к PHP, когда он используется с Apache mod-php.
Джон Хант

35

В дистрибутиве Linux Ubuntu ( может быть, и другом - не тестировался ) с PHP 5 на борту вы можете использовать:

sudo php5dismod xdebug

А с PHP 7

sudo phpdismod xdebug

И после этого перезапустите сервер:

sudo service apache2 restart

Я считаю, что PHP 7 удалил xdebug из файла ini. Так что этот ответ мне помог.
Кейт Холлидей,

1
Работал на PHP7. Комментирование настроек xdebug в php.ini не помогло.
Kalob Taulien

1
Не сработало. ПРЕДУПРЕЖДЕНИЕ: ini-файл модуля xdebug не существует в /etc/php/7.1/mods-available
dxvargas

24

Также вы можете добавить xdebug_disable()в свой код. Пытаться:

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


33
Это только отключает отображение трассировок стека, но на самом деле не отключает xdebug (функция с
ужасным

Это отличный способ справиться с множеством ситуаций. Спасибо за это, даже если это действительно не удовлетворяет потребности OP.
Джейк

3
@ Джейк, я не уверен, что ОП искал мясника.
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
будет

Это также будет работать на php 7.2,9 на mac osx или на centos vagrant. Просто переименуйте xdebug.ini в xdebug.ini.old или что-нибудь еще
vknyvz

Это начальник
Майкл Си Валлас

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

3
это работает и для усадьбы laravel. чтобы отключить xdebug в homestead / laravel, просто закомментируйте раздел в файле/etc/php5/cli/conf.d/20-xdebug.ini
ulkas

Стоит упомянуть, что если вы запускаете php-скрипт из терминала, который запускает другой php-скрипт из терминала через passthruфункцию с включенным xdebug, xdebug может зависнуть и остановить выполнение.
Gherman

1
Не уверен, для чего был сделан отрицательный голос, похоже, это единственный способ отключить xdebug для CLI, а не для других сред. Хотя я бы использовал unlinkболее, rmесли он есть.
Энди

4
Я бы не стал rm / unlink ini, вместо этого сделал бы то, что было предложено ulkas, sudo nano /etc/php/7.0/cli/conf.d/20-xdebug.iniи закомментировал его.
Джастин

7

В Windows (WAMP) в ini-файле CLI:

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, а композитор - нет.


4

Два варианта:

1: Добавьте следующий код в сценарий инициализации:

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

2: Добавьте следующий флаг в php.ini

 xdebug.remote_autostart=0
 xdebug.remote_enable=0

Рекомендуется 1-й вариант.


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 03

Обновленный ответ ^.
Джастин

4

Ubuntu 16.04 удаляет xdebug из PHP.

Найдите свой файл 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, нет необходимости перезапускать фактический веб-сервер. В любом случае, если вы не используете fpm, вы можете просто перезапустить свой веб-сервер, используя любую из следующих команд:

sudo service apache2 restart
sudo apache2ctl restart

3

Я столкнулся с подобной проблемой. Иногда вы не найдете xdebug.so в php.ini. В этом случае выполните phpinfo()в файле php и проверьте наличие Additional .ini files parsed. Здесь вы увидите больше ini-файлов. Одним из них будет ini-файл xdebug. Просто удалите (или переименуйте) этот файл, перезапустите 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 Switcher


1

Для WAMP щелкните левой кнопкой мыши значок Wamp на панели задач. Наведите курсор на PHP, затем щелкните php.ini и откройте его в текстовом редакторе.

Теперь найдите фразу «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

Отключите xdebug только для определенной версии PHP или sapi. В этом случае PHP 7.2 fpm

sudo phpdismod -v 7.2 -s fpm xdebug
sudo service php7.2-fpm nginx restart
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.