วิธีปิดใช้งาน XDebug


124

ฉันคิดว่าเซิร์ฟเวอร์ของฉันช้าตั้งแต่ฉันติดตั้ง XDebug ดังนั้นเพื่อทดสอบสมมติฐานของฉันฉันต้องการปิดการใช้งาน XDebug อย่างสมบูรณ์ ฉันค้นหาแบบฝึกหัดเกี่ยวกับวิธีการนี้ แต่ไม่พบข้อมูลดังกล่าว

คำตอบ:


163

ค้นหาของคุณphp.iniและมองหา XDebug

ตั้งค่า xdebug autostart เป็น 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

1
@Uday แล้วจะเกิดอะไรขึ้นถ้าฉันไม่พบสิ่งนี้ใน php.ini ของฉัน ฉันได้ตรวจสอบทุกที่ภายใน / etc / php รวมถึงการค้นหาด้วย grep
Haralan Dobrev

@HaralanDobrev ตรวจสอบ phpinfo () เพื่อดูว่า xdebug เปิดใช้งานจริงหรือไม่ ถ้าเป็นเช่นนั้นให้ตรวจสอบว่าคุณมีไฟล์ ini เพิ่มเติมที่แนบมากับไฟล์ php.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

5
ที่จริงแล้วจะเป็นการดีกว่าที่จะไม่โหลดส่วนขยายเลยและโหลดเฉพาะเมื่อจำเป็นเท่านั้น XDebug ทำให้สิ่งต่างๆช้าลงได้มากแม้ว่าจะปิดใช้งานก็ตาม อาจไม่รู้สึกว่าประสิทธิภาพลดลงมากนักเมื่อทำการดีบัก / ทำโปรไฟล์สคริปต์บางสคริปต์ที่สร้างเว็บเพจ แต่ด้วยสคริปต์ daemon จะแสดงจำนวนมาก ฉันเพิ่งเขียนบล็อกโพสต์ว่าทำไมไม่โหลดเลยจะดีกว่าที่นี่: bit.ly/14SaWpp
thesilentman

99

โซลูชันง่ายๆที่ทำงานบน Linux ดิสทริบิวชันที่คล้ายกับ Ubuntu

sudo php5dismod xdebug
sudo service apache2 restart

10
คุณช่วยอธิบายเพิ่มเติมได้ไหมโดยเพิ่มคำอธิบายเพิ่มเติมเกี่ยวกับโซลูชันที่คุณให้มา
หอยเป๋าฮื้อ

3
คำสั่งนั้นมีไว้สำหรับ ubuntu ไม่ใช่ centOS ควรให้คำอธิบายนั้นเนื่องจากคุณไม่ใช่คนเดียวที่ใช้ linux distro เดียวกัน
MaXi32

1
นี่สำหรับ apache2 ไม่ใช่สำหรับ CLI ไฟล์เหล่านี้อาจมีไฟล์ php.ini ที่แตกต่างกัน
Adib Aroui

6
ขึ้นอยู่กับเวอร์ชัน PHP ของคุณคุณควรป้อน$ sudo phpdismod xdebug
RousseauAlexandre

2
คำตอบนี้ใช้ได้กับ PHP เมื่อใช้กับ mod-php ของ Apache เท่านั้น
John Hunt

35

ในLinux Ubuntu ( อาจจะเป็นรุ่นอื่น - ยังไม่ได้ทดสอบ ) การแจกจ่ายด้วยPHP 5บนบอร์ดคุณสามารถใช้:

sudo php5dismod xdebug

และด้วยPHP 7

sudo phpdismod xdebug

และหลังจากนั้นโปรดรีสตาร์ทเซิร์ฟเวอร์:

sudo service apache2 restart

PHP 7 ลบ xdebug ออกจากไฟล์ ini ฉันเชื่อว่า ดังนั้นคำตอบนี้ช่วยฉันได้
Keith Holliday

1
ทำงานสำหรับ PHP7 การแสดงความคิดเห็นการตั้งค่า xdebug ใน php.ini ไม่ได้ผล
Kalob Taulien

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

นี่เป็นวิธีที่ยอดเยี่ยมในการจัดการกับสถานการณ์ต่างๆมากมาย ขอบคุณสำหรับสิ่งนี้แม้ว่าจะไม่ต้องการเนื้อสัตว์จริงๆ
Jake

3
@ เจคฉันไม่แน่ใจว่า OP กำลังมองหาคนขายเนื้อ
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

นี่คือหัวหน้า
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

3
สิ่งนี้ใช้ได้กับ laravel homestead ด้วย หากต้องการปิดใช้งาน xdebug ใน homestead / laravel เพียงแค่แสดงความคิดเห็นในส่วนนี้/etc/php5/cli/conf.d/20-xdebug.ini
ulkas

ควรค่าแก่การกล่าวถึงหากคุณเรียกใช้สคริปต์ php จากเทอร์มินัลที่เรียกใช้สคริปต์ php อื่นจากเทอร์มินัลผ่านpassthruฟังก์ชันที่เปิดใช้งาน xdebug xdebug อาจหยุดทำงานและหยุดการดำเนินการ
Gherman

1
ไม่แน่ใจว่าการลงคะแนนคืออะไรดูเหมือนจะเป็นวิธีเดียวที่จะปิดใช้งาน xdebug สำหรับ CLI ไม่ใช่สภาพแวดล้อมอื่น ๆ แม้ว่าฉันจะใช้unlinkมากกว่าrmถ้ามี
Andy

4
ฉันจะไม่ rm / ยกเลิกการเชื่อมโยง ini แต่ทำตามที่ ulkas แนะนำsudo nano /etc/php/7.0/cli/conf.d/20-xdebug.iniและแสดงความคิดเห็นออกมา
Justin

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แต่ผู้แต่งจะไม่ดำเนินการ


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

จากนั้นแสดงความคิดเห็นทุกอย่างและบันทึก


UPDATE - ปิดใช้งานสำหรับ 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 เป็นเพียง symlink และหากคุณแก้ไขคุณจะแก้ไขไฟล์ต้นฉบับซึ่งเป็นเรื่องปกติสำหรับ cli และ non-cli ฉันคิดว่าวิธีแก้ปัญหาที่ถูกต้องคือลบ symlink ง่ายๆ
igoemon

คำตอบที่อัปเดตแล้ว ^.
Justin

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 (ผิด) ทั้งหมดที่คุณทำ ขอบคุณ!
Aaron Liu

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)

เปลี่ยนชื่อไฟล์ config และรีสตาร์ท apache

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

ทำย้อนกลับเพื่อเปิดใช้งานอีกครั้ง


1

หากคุณใช้ MAMP Pro บน Mac OS X สามารถทำได้ผ่านไคลเอนต์ MAMP โดยยกเลิกการเลือกActivate Xdebugใต้แท็บPHP :

ปิดการใช้งาน Xdebug ใน MAMP Pro


1

ใช่สิ่งที่คุณต้องการเพียงแค่แสดงความคิดเห็นในไฟล์ INI เหมือนzend_extension=xdebug.soหรือคล้ายกัน

สามารถแสดงความคิดเห็นได้โดยเพิ่มเครื่องหมายอัฒภาค

แต่ได้มีการเพิ่มคำตอบดังกล่าวแล้วและฉันต้องการแบ่งปันโซลูชันที่พร้อมใช้งานเพื่อเปลี่ยนสถานะ Xdebug

ฉันได้สร้างตัวสลับด่วนสำหรับ Xdebug บางทีมันอาจจะมีประโยชน์สำหรับใครบางคน

Xdebug Switcher


1

สำหรับ WAMP ให้คลิกคลิกซ้ายที่ไอคอน Wamp ในถาดแถบงาน วางเมาส์เหนือ PHP แล้วคลิกที่ php.ini แล้วเปิดใน texteditor ของคุณ

ตอนนี้ค้นหาวลี 'zend_extension' และเพิ่ม; (อัฒภาค) อยู่ข้างหน้า

รีสตาร์ท WAMP เท่านี้ก็เรียบร้อย


1

Apache / 2.4.33 (Win64) PHP / 7.2.4 myHomeBrew stack

ในตอนท้ายของ 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 คลิกขวาที่ไฟล์ -> debug -> ...

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

ฉันสร้างสคริปต์ทุบตีนี้เพื่อสลับ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.