ปิดใช้งาน xdebug เมื่อเรียกใช้โปรแกรมแต่งเพลง


98

เมื่อทำงานcomposer diagnoseฉันได้รับข้อผิดพลาดต่อไปนี้:

โหลดส่วนขยาย xdebug ซึ่งอาจทำให้ Composer ช้าลงเล็กน้อย ขอแนะนำให้ปิดการใช้งานเมื่อใช้ Composer

ฉันจะปิดใช้งาน xdebug เฉพาะเมื่อฉันใช้งาน Composer ได้อย่างไร

คำตอบ:


81

อัพเดท : ปัญหาได้รับการแก้ไขในนักแต่งเพลงที่ 1.3 อัปเดตนักแต่งเพลงเป็นเวอร์ชันล่าสุดโดยดำเนินการcomposer self-updateแทนการลองวิธีแก้ปัญหาต่อไปนี้


นี่คือการแก้ไขโค้ดของ @ ezzatron ของฉัน ฉันได้อัปเดตสคริปต์เพื่อตรวจหาไฟล์ ini จากเอาต์พุต phpinfo

#!/bin/sh

php_no_xdebug () {
    temporaryPath="$(mktemp -t php.XXXX).ini"

    # Using awk to ensure that files ending without newlines do not lead to configuration error
    php -i | grep "\.ini" | grep -o -e '\(/[a-z0-9._-]\+\)\+\.ini' | grep -v xdebug | xargs awk 'FNR==1{print ""}1' | grep -v xdebug > "$temporaryPath"

    php -n -c "$temporaryPath" "$@"
    rm -f "$temporaryPath"
}

php_no_xdebug /usr/local/bin/composer.phar $@
# On MacOS with composer installed using brew, comment previous line
# Install jq by executing `brew install jq` and uncomment following line.
# php_no_xdebug /usr/local/Cellar/composer/`brew info --json=v1 composer | jq -r '.[0].installed[0].version'`/libexec/composer.phar $@

3
นี่เป็นทางออกที่ดีที่สุดสำหรับปัญหา IMHO จอยซ์ขอบคุณ!
Thomas Hansen

2
ดีที่สุด. สคริปต์ Ever
Maciej Paprocki

1
ฉันต้องปรับ shebang bin/bashเป็นมากกว่า/bin/shเพราะอันหลังไม่ชอบfunctionคีย์เวิร์ด (Ubuntu 14.04 LTS)
ashnazg

ฉันได้อัปเดตโค้ดและลบคีย์เวิร์ดของฟังก์ชันเพื่อให้เข้ากันได้ดีขึ้น
Joyce Babu

1
คุณสามารถยืนยันได้ว่าคุณใช้งานเวอร์ชันล่าสุดโดยเรียกใช้composer self-update
Joyce Babu

77

คำสั่งนี้จะปิดใช้งานโมดูล PHP5 Xdebug สำหรับ CLI (และด้วยเหตุนี้ผู้แต่ง):

sudo php5dismod -s cli xdebug

มันลบsymlink xdebug.iniออกจาก/etc/php5/cli/conf.d/

แนะนำในhttp://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/

โปรดทราบว่าสำหรับ Ubuntu 16.04 คุณอาจต้องเรียกใช้สิ่งนี้:

sudo phpdismod -s cli xdebug

4
ฉันได้เพิ่มสองนามแฝงalias xdebug-on='sudo php5enmod -s cli xdebug'และalias xdebug-off='sudo php5dismod -s cli xdebug'ดังนั้นจึงเป็นเรื่องง่ายที่จะเปิดใช้งานxdebug-onและปิดการใช้งานxdebug-offxdebug
Daniel Mecke

ไม่พกพา น่าจะเป็น Linux เท่านั้น
Diti

ใช้งานได้ดีกับกล่อง Laravel Homestead (Ubuntu / Debian) คำอธิบายเพิ่มเติมเกี่ยวกับวิธีการทำงาน: laracasts.com/discuss/channels/forge/disable-xdebug
Justin

2
ขอบคุณสำหรับสิ่งนี้ :) แต่ฉันมี ubuntu 16.04 และหากมีคนจำเป็นต้องใช้สิ่งนี้ให้รัน sudo phpdismod -s cli xdebug
Angel M.

แล้ว php7 ใน Ubuntu ล่ะ? ฉันจำเป็นต้องลบ symlink เท่านั้นหรือไม่? /etc/php/7.0/cli/conf.d
gastonnina

40

ฉันไม่คิดว่าจะมีตัวเลือกในการกำหนดค่า PHP ดังนั้นจึงสามารถโหลดการกำหนดค่าต่างๆตามสคริปต์เป้าหมายได้ อย่างน้อยก็ไม่ต้องทำซ้ำไฟล์. ini ...

อย่างไรก็ตามคุณสามารถเพิ่มตัวเลือกสิ่งเหล่านี้เมื่อเรียกใช้นักแต่งเพลงด้วย php:

php -n -d extension=needed_ext.so composer.phar

-nจะบอกให้ PHP ละเว้น php.ini ใด ๆ สิ่งนี้จะป้องกันไม่ให้ xdebug โหลดสำหรับคำสั่งนี้

-dตัวเลือกอนุญาตให้คุณเพิ่มตัวเลือกที่คุณต้องการ (สำหรับตัวอย่างเปิดใช้งาน needed_ext.so) คุณสามารถใช้หลาย-dตัวเลือก แน่นอนว่านี่เป็นทางเลือกคุณอาจไม่จำเป็นต้องใช้

จากนั้นคุณสามารถสร้างนามแฝงเพื่อทำให้หวานอีกครั้ง

วิธีแก้ปัญหาทั่วไป (เนื่องจากผู้แต่งต้องการ json):

php -n -d extension=json.so composer.phar

greg0ire> โซลูชันของฉันขึ้นอยู่กับสิ่งนั้น:

#!/bin/bash
options=$(ls -1 /usr/lib64/php/modules| \

    grep --invert-match xdebug| \

    # remove problematic extensions
    egrep --invert-match 'mysql|wddx|pgsql'| \

    sed --expression 's/\(.*\)/ --define extension=\1/'| \

    # join everything together back in one big line
    tr --delete '\n'
)

# build the final command line
php --no-php-ini $options ~/bin/composer $*

alias composer=/path/to/bash/script.sh

มันดูน่าเกลียด (ฉันลองใช้ xargs แล้วล้มเหลว) แต่ใช้งานได้ ... ฉันต้องปิดการใช้งานส่วนขยายบางส่วนมิฉะนั้นฉันจะได้รับคำเตือนต่อไปนี้:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysqli.so' - /usr/lib64/php/modules/mysqli.so: undefined symbol: mysqlnd_connect in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_mysql.so' - /usr/lib64/php/modules/pdo_mysql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_pgsql.so' - /usr/lib64/php/modules/pdo_pgsql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/wddx.so' - /usr/lib64/php/modules/wddx.so: undefined symbol: php_XML_SetUserData in Unknown on line 0

ฉันลอง-nเมื่อวานนี้และมีปัญหาเพราะฉันไม่มีpharส่วนขยาย ฉันจะพยายามเพิ่มส่วนขยายให้มากขึ้นเรื่อย ๆ จนกว่าจะใช้งานได้ฉันคิดว่านี่เป็นทางออกที่ดี ตามนามแฝงฉันมีนามแฝง zsh ที่ฉันไม่ได้ดูแลอยู่แล้ว บางทีฉันอาจจะลองแทนที่ไบนารีด้วยสคริปต์ทุบตีหรือดูว่าฉันสามารถกำหนดค่านามแฝงได้หรือไม่
greg0ire

อย่างไรก็ตามปัญหาเกี่ยวกับวิธีการอนุญาตพิเศษนี้คือรายการที่อนุญาตพิเศษอาจเพิ่มขึ้นโดยขึ้นอยู่กับสิ่งที่ผู้คนต้องการcomposer.jsonเช่น "ext-ldap": "*" หรือขึ้นอยู่กับสิ่งที่จำเป็นในการทำให้งานหลังการติดตั้งทำงานได้อย่างถูกต้อง …หากมีเพียงวิธีการขึ้นบัญชีดำส่วนขยาย…
greg0ire

1
ฉันจะพยายามทำบางอย่างกับผลลัพธ์ของphp -m
greg0ire

มันอยู่ในใจของฉัน แต่ฉันคิดว่าคุณใช้ xdebug ในสภาพแวดล้อมการพัฒนา นักแต่งเพลงช้าจนต้องปรับแต่งขนาดนี้เลยเหรอ?
Gui-Don

โอ้ไม่ฉันเพิ่งเห็นสิ่งนี้จากผลลัพธ์ของdiagnoseและเนื่องจากฉันกำลังสร้างคอนเทนเนอร์นักเทียบท่าสำหรับทีมของฉันการปรับปรุงความเร็วที่เล็กที่สุดจะเป็นประโยชน์ต่อทุกคน
greg0ire

14

การสร้างนามแฝงจะเป็นการระงับcomposer xdebugข้อความแสดงข้อผิดพลาดนั้น

เพียงเพิ่มบรรทัดนี้~/.bash_aliasesในระบบของคุณและมันควรจะทำงานได้อย่างไม่มีที่ติ

alias composer="php -n /usr/local/bin/composer"

โหลดเชลล์ใหม่เพื่อสร้างนามแฝงใหม่composerพร้อมใช้งาน

source ~/.bash_profile

การใช้งาน:

$ composer --version

หมายเหตุ:
คุณไม่จำเป็นต้องใช้พารามิเตอร์อื่นใด
ขึ้นอยู่กับระบบของคุณคุณอาจมี.bashrcแทน.bash_profile.

อัพเดท:

ดังที่ @AlexanderKachkaev กล่าวถึงในความคิดเห็นไม่มีค่าอะไรที่จะเพิ่ม memory_limit ดังต่อไปนี้เพื่อหลีกเลี่ยงการหยุดทำงานในบางสถานการณ์:

alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"

3
สิ่งนี้จะไม่เล่นได้ดีนักทันทีที่จำเป็นต้องใช้ส่วนขยายใดส่วนหนึ่งในโพสต์การติดตั้งหรือโพสต์สคริปต์การอัปเดต ... อาจเป็นทางออกที่ดีสำหรับโครงการง่ายๆ
greg0ire

1
-nตัวเลือกปิดการใช้งานPharส่วนขยายจึงอาจล้มเหลวในการเรียกใช้จากcomposer.phar
brzuchal

1
สิ่งนี้ได้ผลสำหรับฉัน นอกจากนี้ฉันปิดการใช้งานขีด จำกัด หน่วยความจำเพื่อหลีกเลี่ยงการหยุดทำงาน:alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
Alexander Kachkaev

วิธีนี้ค่อนข้างง่ายและใช้ได้กับสถานการณ์ของฉัน ข้อเสนอแนะการ จำกัด หน่วยความจำจาก @AlexanderKachkaev เป็นสิ่งที่ต้องทำ โปรดแก้ไขคำตอบ
Henry

12

ฉันได้คำตอบที่ใช้งานได้ดีสำหรับ OSX และอาจปรับให้เข้ากับเวอร์ชัน PHP ที่โหลดส่วนขยายโดยใช้ไฟล์. ini แต่ละไฟล์ใน "เพิ่มเติม ini dir":

#!/bin/sh

function php-no-xdebug {
    local temporaryPath="$(mktemp -t php-no-debug)"

    find /opt/local/etc/$1/php.ini /opt/local/var/db/$1/*.ini ! -name xdebug.ini | xargs cat > "$temporaryPath"
    php -n -c "$temporaryPath" "${@:2}"
    rm -f "$temporaryPath"
}

alias composer="php-no-xdebug php56 ~/bin/composer"

เยี่ยมมาก! ฉันสร้างสคริปต์วัตถุประสงค์ทั่วไปตามสิ่งนี้สำหรับ Ubuntu 14.04-15.10 gist.github.com/perk11/816c4e64023ea26976cf
Konstantin Pereiaslov

ยอดเยี่ยมใช้งานได้ดีบน Mac OS บน Brew ที่ติดตั้ง php 7.1 TY!
Antonio Carlos Ribeiro

7

ฉันมักจะสร้างเชลล์สคริปต์ต่อโปรเจ็กต์เนื่องจากทุกโปรเจ็กต์มีเวอร์ชัน PHP อื่น มันอยู่ใน/bin/ไดเรกทอรีติดกับcomposer.pharและcomposer.jsonและฉันเรียกว่ามันเป็น./bin/composerในไดเรกทอรีโครงการของฉัน

หน้าตาเป็นแบบนี้ (สำหรับ php56)

#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

COMPOSER_DISABLE_XDEBUG_WARN=1 /opt/local/bin/php56 \
    -d xdebug.remote_enable=0 -d xdebug.profiler_enable=0 \
    -d xdebug.default_enable=0 $DIR/../composer.phar "$@"

-dตัวเลือกปิดการใช้งานได้อย่างมีประสิทธิภาพ xdebug COMPOSER_DISABLE_XDEBUG_WARN=1ส่วนหนึ่งปิดการใช้งานปัญหานักแต่งเพลงคำเตือน

แนะนำให้ปิดใช้งานส่วนขยาย xdebug (ดูการแก้ไขปัญหาของผู้เรียบเรียง ) แต่โดยส่วนตัวแล้วฉันชอบสคริปต์ที่ง่ายกว่า

การกำหนดเวลาบางอย่างบนเครื่องของฉัน: 2 รันด้วย xdebug และเปิดใช้งาน ini: 1m33

รันด้วย xdebug แต่ปิดใช้งานไม่ได้: 0m19

รันโดยไม่มี xdebug: 0m10


ฉันคิดว่าเนื่องจากคุณปิดการใช้งาน XDebug คุณไม่จำเป็นต้องมีสิ่งต่อไปนี้COMPOSER_DISABLE_XDEBUG_WARN=1: หากคุณได้รับคำเตือนก็หมายความว่าการเขียนของคุณไม่ทำงาน การกำหนดxdebug.remote_autostartดูเหมือนจะไร้ประโยชน์หากปิดใช้งานการดีบักระยะไกล
greg0ire

xdebug.remote_autostartคุณสิทธิเกี่ยวกับ เกี่ยวกับสคริปต์ประสิทธิภาพ: การตรวจสอบนักแต่งเพลงถ้าขยาย xdebug ถูกโหลดไม่ได้ถ้ามันจริงทำอะไรดูที่รหัสที่นี่ ตัวเลือก ini ทำงานได้ดีในสคริปต์ php "ปกติ" แต่อีกครั้ง: ฉันไม่ได้ทำการทดสอบประสิทธิภาพ ...
Joost

(สุดท้าย) พบส่วนที่เกี่ยวข้องในคู่มือการแต่งเพลงเกี่ยวกับเรื่องนี้การแก้ปัญหาผลกระทบ xdebug ในนักแต่งเพลง อธิบายว่าการปิดใช้งานตัวเลือก xdebug ทั้งหมดผ่านแฟล็ก ini ไม่เพียงพอที่จะบรรเทาปัญหาด้านประสิทธิภาพ ดังนั้นสคริปต์ของฉันจะไม่ทำงาน เลวร้ายเกินไป!
Joost

ฉันทำบางเวลา (บน Mac OS X) และต้องบอกว่าฉันค่อนข้างพอใจกับการปรับปรุงประสิทธิภาพโดยใช้สคริปต์ของฉัน! มีตัวเลือก xdebug เปิดใช้งานจะใช้เวลา1m33กับตัวเลือกปิดการใช้งานก็จะใช้เวลา0m19 โดยไม่ต้องขยาย xdebug ที่ใช้0m10
Joost

โอเคมีการปรับปรุงต่อไป ไม่ใช่การปรับปรุงที่ดีที่สุด แต่เป็นการปรับปรุงครั้งใหญ่ (อย่างน้อยใน OS X)
greg0ire

6

หากคุณใช้ PHPStorm รุ่นล่าสุด (2016.2) จะมาพร้อมกับคุณสมบัติในการเปิดใช้งาน XDebug สำหรับสคริปต์ CLI ตามต้องการซึ่งหมายความว่าคุณสามารถปิด XDebug ทั่วโลกบนเครื่องพัฒนาของคุณ IDE จะเปิดใช้งานได้ทันทีเมื่อจำเป็นต้องใช้รหัสภายในโครงการของคุณ

https://blog.jetbrains.com/phpstorm/2016/06/xdebug-on-demand-for-cli-php-scripts-in-phpstorm-2016-2-eap/

PhpStorm 2016.2 แนะนำโหมด Xdebug On Demand ที่คุณสามารถปิดใช้งาน Xdebug สำหรับการติดตั้ง PHP ทั่วโลกของคุณและ PhpStorm จะเปิดใช้งานเมื่อจำเป็นเท่านั้น - เมื่อคุณดีบักสคริปต์ของคุณหรือเมื่อคุณต้องการรายงานการครอบคลุมโค้ด

คุณต้องแก้ไขค่ากำหนด PHP Interpreters เพื่อรวมเส้นทางไปยัง XDebug ตามที่อธิบายไว้ในบทความที่เชื่อมโยง

สำหรับฉันแล้วสิ่งนี้ดูเหมือนจะเป็นทางออกที่สมบูรณ์แบบเพราะฉันมักจะต้องการ XDebug ในขณะที่ฉันอยู่ใน IDE

อย่างไรก็ตาม XDebug มีการใช้งานที่เป็นไปได้อื่น ๆ เมื่อคุณ "ออฟไลน์" เช่นการทิ้งสแต็กแบบขยายในบันทึกข้อผิดพลาดซึ่งคุณจะสูญเสียโดยการปิดใช้งานทั่วโลก แน่นอนว่าคุณไม่ควรเปิดใช้งาน XDebug ในการใช้งานจริงดังนั้นจึง จำกัด เฉพาะกรณีใช้งานเช่นการทดสอบเบต้าหรือสคริปต์ CLI การทดสอบอัตโนมัติในการพัฒนา


5

แทนที่จะสับสนกับการเปิดใช้งานหรือปิดใช้งานโมดูล PHP ชั่วคราวเมื่อคุณอาจมีกระบวนการทำงานพร้อมกันโดยใช้ PHP (เช่นเป็นส่วนหนึ่งของไปป์ไลน์ CI) คุณสามารถบอก PHP ให้ชี้ไปที่ไดเร็กทอรีการโหลดโมดูลอื่นได้

แม้ว่าสิ่งนี้จะคล้ายกับวิธีแก้ปัญหาบางอย่างที่กล่าวถึงข้างต้น แต่ก็สามารถแก้ปัญหาขอบบางกรณีได้ซึ่งมีประโยชน์มากเมื่อใช้โดย Jenkins หรือนักวิ่ง CI คนอื่น ๆ ซึ่งทำการทดสอบบนเครื่องเดียวกันพร้อมกัน

วิธีที่ง่ายที่สุดคือใช้ตัวแปรสภาพแวดล้อม PHP_INI_SCAN_DIR

การใช้สิ่งนี้ในสคริปต์หรืองานสร้างนั้นง่ายมาก:

export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug php composer install

แน่นอนว่าคุณต้องเตรียม /etc/php.d.noxdebug ก่อนโดยทำสิ่งที่ชอบ:

mkdir /etc/php.d.noxdebug cp /etc/php.d/* /etc/php.d.noxdebug rm /etc/php.d.noxdebug/xdebug.ini

ซึ่งหมายความว่าคุณมีสภาพแวดล้อมที่คล้ายกับสภาพแวดล้อม php เก่าโดยมีเพียงโมดูลเดียวที่ขาดหายไป หมายความว่าคุณไม่จำเป็นต้องกังวลว่าจะต้องโหลดโมดูล phar / json เหมือนที่คุณทำกับโซลูชัน php -n


ฉันจะใช้ symlinks แทนการคัดลอกไฟล์ ini
greg0ire

1
ฉันหลีกเลี่ยงการใช้ symlinks เพราะทำให้รู้สึกว่าโฟลเดอร์มีการซิงค์ในขณะที่โมดูลใหม่จะไม่รวมอยู่ในโฟลเดอร์ 'noxdebug' โดยอัตโนมัติ
KHobbits

4

ฉันคิดวิธีแก้ปัญหาสำหรับตัวติดตั้ง Composer บน Windows - มันควรจะใช้งานได้กับการติดตั้ง Composer โดยพื้นฐานแล้วจะสร้างสำเนาของไฟล์ INI ที่โหลดแล้วและแสดงความคิดเห็นเกี่ยวกับส่วนขยาย xdebug zend จากนั้นโหลดไฟล์การกำหนดค่านั้นเมื่อเรียกใช้งานตัวแต่ง .

ฉันได้เปิดปัญหาเพื่อดูว่าพวกเขาต้องการรวมการเปลี่ยนแปลงนี้หรือไม่:

https://github.com/composer/windows-setup/issues/58

คุณสามารถค้นหาคำแนะนำและรหัสของฉันได้ที่นั่น


ง่ายและมีประสิทธิภาพ :) คุณต้องใช้สิ่งนี้อีกครั้งหลังจากอัปเดตผู้แต่งผ่านการอัปเดตตัวเองหรือไม่?
marcovtwout

4

ดังที่ระบุไว้ในคำตอบของ Joyceปัญหานี้ไม่มีใน Composer เวอร์ชันล่าสุดอีกต่อไป

เอกสารนักแต่งเพลงที่ได้รับการปรับปรุงเพื่อให้ทราบนี้ รายละเอียดวิธีเปิดใช้งาน xdebug ด้วย Composer (หากจำเป็น)

คุณสามารถปรับปรุงรุ่นของนักแต่งเพลงโดยใช้การอัปเดตตัวเอง

บน Mac ของฉันฉันต้องทำ: sudo php /opt/local/bin/composer self-update

รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ในบริบทของการติดตั้ง Homebrew PHP สามารถพบได้ในปัญหานี้


เยี่ยมมาก! คุณรู้หรือไม่ว่า PR ของการเปลี่ยนแปลงนี้อยู่ที่ไหน? ฉันต้องการมันในแอป CLI อื่น
Tomáš Votruba

3

การปรับแต่ง PHP config โดยตรง

นี่คือผลงานของฉันตามการติดตั้งHomebrew ที่ติดตั้ง PHP บน MacOS X

มันคือเสื้อคลุมเชลล์สคริปต์ที่ออกแบบมาเพื่อบันทึกเป็นไฟล์ปฏิบัติการที่/usr/local/bin/composerโดยมีไบนารี Composer ที่/usr/local/bin/composer.phar:

#!/bin/sh
sed -i '' -e 's:zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini
/usr/local/bin/php /usr/local/bin/composer.phar "$@"
sed -i '' -e 's:;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini

ทฤษฎีปฏิบัติการ

สคริปต์ Wrapper:

  • ใช้sedเพื่อแก้ไขไฟล์การกำหนดค่าชั่วคราวปิดใช้งาน Xdebug (บรรทัดที่ 2)
  • เรียกใช้งาน Composer โดยส่งผ่าน args ไปยังคำสั่ง (บรรทัดที่ 3)
  • ใช้ sed เพื่อกู้คืนไฟล์คอนฟิกูเรชันเปิดใช้งาน Xdebug อีกครั้ง (บรรทัด 4)

สคริปต์เชื่อมต่อกับการติดตั้ง OS X / Homebrew ของ PHP 5.5 ควรปรับเส้นทางให้ทำงานกับ PHP เวอร์ชันอื่นและระบบปฏิบัติการอื่น ๆ 'และรูปแบบไดเร็กทอรี' ผู้จัดการแพ็คเกจ ' โปรดทราบว่า sed บางเวอร์ชันไม่จำเป็นต้องมีอาร์กิวเมนต์สตริงว่างตาม-iอ็อพชัน

เครื่องมือ Caveat

สคริปต์ตรงไปตรงมาตรงที่มันทำงานโดยตรงกับไฟล์คอนฟิกูเรชัน PHP หลักอย่างไรก็ตามนี่ก็เป็นข้อเสียเช่นกัน: Xdebug จะถูกปิดใช้งานสำหรับสคริปต์ใด ๆ ที่เกิดขึ้นพร้อมกับสคริปต์นี้

ในสภาพแวดล้อมการพัฒนาของฉันนี่เป็นการแลกเปลี่ยนที่ยอมรับได้เนื่องจาก Composer ดำเนินการด้วยตนเองและเป็นครั้งคราวเท่านั้น อย่างไรก็ตามคุณอาจไม่ต้องการใช้เทคนิคนี้หากเรียกใช้ Composer โดยเป็นส่วนหนึ่งของกระบวนการปรับใช้อัตโนมัติ


ฉันไม่แน่ใจว่ามันจะสร้างความแตกต่างให้กับวิธีจัดการข้อผิดพลาดโดย Composer คุณมีตัวอย่างหรือข้อกังวลที่เฉพาะเจาะจงหรือไม่? สคริปต์นี้มีไว้เพื่อแก้ปัญหาอย่างรวดเร็วและยังไม่ได้รับการทดสอบการต่อสู้อย่างละเอียด ต้องบอกว่าในช่วงเวลาที่ฉันใช้มันทำงานได้โดยไม่มีปัญหาใด ๆ
j13k

1
ข้อกังวลของฉันคือบรรทัดสุดท้ายของสคริปต์อาจไม่ทำงาน
greg0ire

2

ในกรณีส่วนใหญ่คุณไม่ต้องการ xdebug ในโหมด CLI หากสิ่งนี้เป็นที่ยอมรับสำหรับคุณคุณสามารถกำหนดค่า cli และ cgi ให้แตกต่างกันได้

ดังนั้นหากคุณสร้างphp-cli.iniและconf-cli.dใกล้ออกจากไฟล์ php.ini เกินกว่าที่คุณจะกำหนดค่า cli และ cgi ให้แตกต่างกันได้ (สำหรับ cgi จะเป็นphp.iniและconf.d ) อย่าใส่ xdebug.ini ลงใน conf-cli.d


2

หากคุณติดตั้งนักแต่งเพลงโดยใช้ brew บน OS X คุณสามารถใช้นามแฝงนี้:

alias composer="php -n $(cat $(which composer) | grep composer.phar | awk '{print $7}')"

1

วิธีแก้ปัญหาอย่างรวดเร็วของฉันสำหรับการติดตั้ง macports ด้วย PHP หลายเวอร์ชันคือการเขียน shell wrapper แบบธรรมดาสำหรับ Composer:

/user/local/bin/composer-nodebug.sh

#!/bin/bash

sudo mv /opt/local/var/db/php53/xdebug.ini /opt/local/var/db/php53/xdebug.NOT
sudo mv /opt/local/var/db/php54/xdebug.ini /opt/local/var/db/php54/xdebug.NOT
sudo mv /opt/local/var/db/php55/xdebug.ini /opt/local/var/db/php55/xdebug.NOT
composer $1 $2 $3 $4 $5 $6 $7
sudo mv /opt/local/var/db/php53/xdebug.NOT /opt/local/var/db/php53/xdebug.ini
sudo mv /opt/local/var/db/php54/xdebug.NOT /opt/local/var/db/php54/xdebug.ini
sudo mv /opt/local/var/db/php55/xdebug.NOT /opt/local/var/db/php55/xdebug.ini

จากนั้นเรียกใช้คำสั่งของนักแต่งเพลงดังนี้:

sudo composer-nodebug.sh update

ข้อเสีย:

  • ต้องใช้ sudo (เว้นแต่คุณจะ chmod ไฟล์ INI)
  • ถ้าคุณฆ่ามันกลางทางไฟล์ INI จะถูกแก้ไข
  • จะต้องมีการเพิ่มเวอร์ชัน PHP ในอนาคต
  • ในขณะที่รันกระบวนการ PHP อื่น ๆ จะได้รับผลกระทบ

ไม่หรูหรา แต่เรียบง่าย


ฉันคิดว่ามีทางลัดที่คุณสามารถใช้แทน$1…$7... อาจจะเป็น$@หรืออะไรทำนองนั้นคุณจะต้องดู
greg0ire

> หากคุณฆ่ามันกลางคันไฟล์ INI จะถูกแก้ไขคุณจะต้องแก้ไขโดยการดักสัญญาณฆ่า> จะต้องเพิ่มเวอร์ชัน PHP ในอนาคต คุณยังสามารถแก้ไขได้ด้วยการวนซ้ำ
greg0ire

1

การสร้างนามแฝงสำหรับผู้แต่งเพื่อปิดใช้งาน xdebug และป้องกันข้อผิดพลาดของหน่วยความจำ:

เพิ่มบรรทัดนี้ใน ~ / .bash_profile ของคุณ

alias composer='php -d xdebug.profiler_enable=0 -d memory_limit=-1 /usr/local/bin/composer'

รีสตาร์ทเทอร์มินัลเพื่อให้นามแฝงใหม่พร้อมใช้งาน


-3

นี่คือวิธีแก้ปัญหาอย่างรวดเร็วของฉันในการกำจัดคำเตือน Xdebug ในเวอร์ชัน PHP5-cli ฉันได้ลบการรองรับ Xdebug สำหรับ PHP5-cli บน Ubuntu 14.04 แล้ว

ซีดี /etc/php5/cli/conf.d/

sudo rm 20-xdebug.ini

ตอนนี้ไม่มีคำเตือน Xdebug บน PHP5-cli อีกต่อไป


2
sudo phpdismod xdebugจะเป็นวิธีที่ต้องการในการเดรัจฉานrm
Jeff Puckett
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.