Jak wyłączyć XDebug

124

Myślę, że mój serwer zwolnił, odkąd zainstalowałem XDebug. Tak więc, aby sprawdzić moją hipotezę, chcę całkowicie wyłączyć XDebug. Szukałem poradników, jak to zrobić, ale nie mogę znaleźć takich informacji.

Beto Aveiga
źródło

Odpowiedzi:

164

Znajdź swój php.inii poszukaj XDebug.

Ustaw autostart xdebug na false

xdebug.remote_autostart=0  
xdebug.remote_enable=0

Wyłącz swój profiler

xdebug.profiler_enable=0

Zauważ, że może wystąpić utrata wydajności nawet przy wyłączonym, ale załadowanym xdebug . Aby wyłączyć ładowanie samego rozszerzenia, musisz skomentować je w swoim php.ini. Znajdź wpis wyglądający tak:

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

i wstaw ;komentarz, np ;zend_extension = ….

Sprawdź ten post XDebug, jak wyłączyć zdalne debugowanie dla pojedynczego pliku .php?

Uday Sawant
źródło
Dzięki! Odkryłem, że moim problemem był APC, moja pamięć była najwyraźniej słaba. Masz rację, xdebug jest częścią PHP, a nie modułem Apache. Teraz wszystko działa dobrze.
Beto Aveiga
1
@Uday a co, jeśli nie mogę znaleźć tego w moim php.ini. Sprawdziłem wszędzie w / etc / php, łącznie z wyszukiwaniem grep.
Haralan Dobrev
@HaralanDobrev Sprawdź phpinfo (), aby zobaczyć, czy xdebug jest rzeczywiście włączony. jeśli tak, sprawdź, czy masz dodatkowe pliki ini dołączone do pliku php.ini. Dodatkowo upewnij się, że edytujesz poprawny plik ini. możliwe jest przechowywanie tych plików w wielu lokalizacjach.
Uday Sawant
18
@UdaySawant Udało mi się go wyłączyć po skomentowaniu linii zend_extension=/usr/lib/php5/20090626+lfs/xdebug.soz /etc/php5/conf.d/xdebug.ini. Jednak ani w, /usr/lib/php5ani w /etcwierszach określonych w odpowiedzi nie są dostępne.
Haralan Dobrev
5
Właściwie lepiej w ogóle nie ładować rozszerzenia i ładować je tylko w razie potrzeby. XDebug w rzeczywistości bardzo spowalnia działanie, nawet jeśli jest wyłączony. Podczas debugowania / profilowania niektórych skryptów tworzących stronę internetową można nie mieć wrażenia, że ​​wydajność spadła tak bardzo, ale w przypadku skryptów demonów to wiele pokazuje. Właśnie napisałem post na blogu o tym, dlaczego w ogóle go nie ładować, jest lepiej, tutaj: bit.ly/14SaWpp
thesilentman
99

Proste rozwiązanie działające na dystrybucjach Linuksa podobnych do Ubuntu

sudo php5dismod xdebug
sudo service apache2 restart
Arvi Võime
źródło
10
Czy mógłbyś bardziej szczegółowo opisać swoją odpowiedź, dodając więcej opisu rozwiązania, które oferujesz?
abarisone
3
To polecenie dotyczy ubuntu, a nie centOS. Powinieneś podać to wyjaśnienie, ponieważ nie jesteś jedyną osobą używającą tej samej dystrybucji Linuksa.
MaXi32
1
to jest dla apache2 a nie dla CLI. Te mogą mieć różne pliki php.ini
Adib Aroui
6
W zależności od wersji PHP, powinieneś wpisać$ sudo phpdismod xdebug
RousseauAlexandre
2
Ta odpowiedź dotyczy tylko PHP, gdy jest używany z mod-php Apache.
John Hunt
35

W dystrybucji Linuksa Ubuntu ( może i innej - nie jest testowana ) z PHP 5 na pokładzie można użyć:

sudo php5dismod xdebug

A z PHP 7

sudo phpdismod xdebug

Następnie zrestartuj serwer:

sudo service apache2 restart
kkochanski
źródło
Wydaje mi się, że PHP 7 usunęło xdebug z pliku ini. Więc ta odpowiedź mi pomogła.
Keith Holliday
1
Pracował dla PHP7. Komentowanie ustawień xdebug w php.ini nie działało.
Kalob Taulien
1
Nie udało się. OSTRZEŻENIE: Plik ini modułu xdebug nie istnieje w /etc/php/7.1/mods-available
dxvargas
24

Możesz także dodać xdebug_disable()do swojego kodu. Próbować:

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

Zack Katz
źródło
33
To tylko wyłącza wyświetlanie śladów stosu, tak naprawdę nie wyłącza xdebug (strasznie nazwana funkcja, wiem)
BlueRaja - Danny Pflughoeft
To wspaniały sposób na radzenie sobie w wielu sytuacjach. Dzięki za to, nawet jeśli tak naprawdę nie zaspokaja potrzeb OP.
Jake
3
@Jake, nie jestem pewien, czy OP szukał rzeźnika.
thephpdev
1
@Jake hehe. I tak tylko żartowałem. 😛
thephpdev
1
@BinarWeb, ponieważ ludzie mogliby pomyśleć, że ta funkcja wyłącza cały xdebug i poprawia wydajność, ale tak nie jest
Fogus
12

Zmieniłem nazwę pliku konfiguracyjnego i zrestartowałem serwer:

$ 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

U mnie zadziałało.

Sinan Eldem
źródło
To zadziałało dla mnie, z wyjątkiem /etc/php/7.0/cli/conf.d zamiast /etc/php/7.0/fpm/conf.d
Will
Będzie to również działać na php 7.2,9 na Mac OSX lub na Centos Vagrant. Po prostu zmień nazwę na xdebug.ini na xdebug.ini.old lub coś innego
vknyvz
To jest szef
Micheal C Wallas
10

Rozszerzenie komentarza w php.ini i zrestartuj Apache. Oto prosty skrypt (możesz przypisać do niego skrót)

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');
antonpinchuk
źródło
Aby naprawdę całkowicie wyłączyć XDebug, ta jest poprawną odpowiedzią, zobacz mój komentarz w odpowiedzi @ UdaySawant.
thesilentman
8

w xubuntu całkowicie wyłączyłem xdebug dla CLI tym ...

sudo rm /etc/php5/cli/conf.d/*xdebug*
Artistan
źródło
uwaga: to naprawdę pomogło mi w aktualizacji kompozytorów. potrzebne do wyłączenia xdebug z powodu problemów z wydajnością.
Artistan
3
działa to również w przypadku gospodarstwa laravel. aby wyłączyć xdebug w homestead / laravel, po prostu zakomentuj sekcję w pliku/etc/php5/cli/conf.d/20-xdebug.ini
ulkas
Warto wspomnieć, że jeśli uruchamiasz skrypt php z terminala, który uruchamia inny skrypt php z terminala za pośrednictwem passthrufunkcji z włączonym xdebug, xdebug może zawiesić się i zatrzymać wykonywanie.
Gherman
1
Nie jestem pewien, za co głosowano, wydaje się, że jest to jedyny sposób na wyłączenie xdebug dla CLI, a nie innych środowisk. Chociaż użyłbym unlinkwięcej, rmjeśli jest dostępny.
Andy,
4
Nie rmowałbym / rozłączał ini, zamiast tego zrobiłbym tak, jak sugerowały ulkas sudo nano /etc/php/7.0/cli/conf.d/20-xdebug.inii skomentował to.
Justin
7

W systemie Windows (WAMP) w pliku ini CLI:

X:\wamp\bin\php\php5.x.xx\php.ini

wiersz komentarza

; XDEBUG Extension

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

Apache przetworzy xdebug, a kompozytor nie.

Vladimir Vukanac
źródło
4

Dwie opcje:

1: Dodaj następujący kod w skrypcie inicjalizacyjnym:

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

2: Dodaj następującą flagę do php.ini

 xdebug.remote_autostart=0
 xdebug.remote_enable=0

Zalecana jest pierwsza opcja.

Sumoanand
źródło
4

Znajdź swój plik PHP.ini i poszukaj XDebug.

zwykle w Ubuntu jego ścieżka to

/etc/php5/apache2/php.ini  

Wprowadź następujące zmiany (lepiej je po prostu skomentować, dodając; na początku)

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

następnie ponownie uruchom serwer w systemie Ubuntu

sudo service apache2 restart
Shadab Salam
źródło
4

Wyłącz xdebug

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

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

Następnie skomentuj wszystko i zapisz.


UPDATE - Wyłącz tylko dla CLI

Zgodnie z komentarzem @ igoemon jest to lepsza metoda:

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

Uwaga: zaktualizuj ścieżkę do swojej wersji PHP.

Justin
źródło
To nie jest rozwiązanie, ponieważ /etc/php/7.0/cli/conf.d/20-xdebug.ini to tylko dowiązanie symboliczne i jeśli go edytujesz, edytujesz oryginalny plik, który jest wspólny dla cli i non-cli. Myślę, że właściwym rozwiązaniem jest proste usunięcie linku symbolicznego.
igoemon
Zaktualizowana odpowiedź ^.
Justin
4

Ubuntu 16.04 usuwa xdebug z PHP.

Znajdź swój plik php.ini i upewnij się, że xdebug tam jest:

grep -r "xdebug" /etc/php/

Może to spowodować pojawienie się różnych wersji, jeśli tak, uruchom, php -vaby znaleźć swoją wersję.

Edytuj plik php.ini, na przykład:

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

Skomentuj linię:

//zend_extension=xdebug.so

Zapisz plik

Andrew Atkinson
źródło
Tak, zdecydowanie potrzebujesz pierwszego polecenia, aby znaleźć wszystkie (błędne) konfiguracje xdebug, które zrobiłeś. Dzięki!
Aaron Liu
4

Jeśli używasz php-fpmnastępujących, powinno wystarczyć:

sudo phpdismod xdebug
sudo service php-fpm restart

Zauważ, że będziesz musiał to dostosować w zależności od wersji php. Na przykład uruchomienie php 7.0 zrobiłbyś:

sudo phpdismod xdebug
sudo service php7.0-fpm restart

Ponieważ używasz php-fpm, nie powinno być potrzeby restartowania właściwego serwera WWW. W każdym razie, jeśli nie używasz fpm, możesz po prostu zrestartować serwer WWW za pomocą dowolnego z poniższych poleceń:

sudo service apache2 restart
sudo apache2ctl restart
Cyclonecode
źródło
3

Wpadłem na podobny problem. Czasami nie znajdziesz xdebug.so w php.ini. W takim przypadku uruchom phpinfo()plik php i sprawdź Additional .ini files parsed. Tutaj zobaczysz więcej plików ini. Jednym z nich będzie plik ini xdebug. Po prostu usuń (lub zmień nazwę) tego pliku, uruchom ponownie apache, a to rozszerzenie zostanie usunięte.

jerrymouse
źródło
3

Miałem następujący problem: nawet jeśli ustawię

xdebug.remote_enable=0 

Pokazano Xdebug-Error-Message-Decoration.

Moje rozwiązanie:

xdebug.default_enable=0

Tylko jeśli użyję tej flagi, Xdebug został wyłączony.

suther
źródło
3

(To jest dla CentOS)

Zmień nazwę pliku konfiguracyjnego i uruchom ponownie Apache.

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

Zrób w odwrotnej kolejności, aby ponownie włączyć.

crmpicco
źródło
1

Jeśli używasz MAMP Pro w systemie Mac OS X, odbywa się to za pośrednictwem klienta MAMP, odznaczając opcję Aktywuj Xdebug na karcie PHP :

Wyłączanie Xdebug w MAMP Pro

Casper André Casse
źródło
1

Więc tak, wszystko, czego potrzebujesz, po prostu komentarz w pliku INI zend_extension=xdebug.solub podobny.

Komentarze można dodawać, dodając średnik.

Ale taka odpowiedź już dodana i chciałbym podzielić się gotowym rozwiązaniem zmiany statusu Xdebug.

Zrobiłem szybką zmianę dla Xdebug. Może komuś się przyda.

Xdebug Switcher

Kirby
źródło
1

W przypadku WAMP kliknij lewym przyciskiem myszy ikonę Wampa na pasku zadań. Najedź na PHP, a następnie kliknij php.ini i otwórz go w swoim edytorze tekstowym.

Teraz wyszukaj frazę „zend_extension” i dodaj; (średnik) na początku.

Uruchom ponownie WAMP i gotowe.

bantya
źródło
1

Apache / 2.4.33 (Win64) PHP / 7.2.4 stos myHomeBrew

Na końcu php.ini używam poniższego do zarządzania Xdebug do użytku z 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
Jim
źródło
1

Zainspirowany PHPStorm kliknij prawym przyciskiem myszy plik -> debuguj -> ...

www-data@3bd1617787db:~/symfony$ 
php 
-dxdebug.remote_enable=0 
-dxdebug.remote_autostart=0 
-dxdebug.default_enable=0 
-dxdebug.profiler_enable=0 
test.php

ważne jest -dxdebug.remote_enable=0 -dxdebug.default_enable=0

max4ever
źródło
1

Stworzyłem ten skrypt bash do przełączania xdebug. Myślę, że powinno działać przynajmniej na Ubuntu / Debian. To jest dla PHP7 +. W przypadku PHP5 użyj 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
Firze
źródło
1

Wyłącz xdebug tylko dla niektórych wersji PHP lub sapi. W tym przypadku PHP 7,2 fpm

sudo phpdismod -v 7.2 -s fpm xdebug
sudo service php7.2-fpm nginx restart
alvaro.canepa
źródło