जवाबों:
अद्यतन : मुद्दा 1.3 में तय किया गया है । composer self-update
निम्नलिखित वर्कअराउंड की कोशिश करने के बजाय, निष्पादित करके नवीनतम संस्करण में संगीतकार को अपडेट करें ।
यहाँ @ ezzatron के कोड का मेरा संशोधन है। मैंने 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 $@
bin/bash
इसके बजाय समायोजित करना था /bin/sh
, क्योंकि बाद वाले को function
कीवर्ड (Ubuntu 14.04 LTS) पसंद नहीं था ।
composer self-update
यह कमांड CLI (और इस प्रकार संगीतकार) के लिए PHP5 Xdebug मॉड्यूल को निष्क्रिय कर देगा:
sudo php5dismod -s cli xdebug
यह 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
alias xdebug-on='sudo php5enmod -s cli xdebug'
और alias xdebug-off='sudo php5dismod -s cli xdebug'
अब xdebug को सक्षम xdebug-on
और अक्षम करना आसान है xdebug-off
।
मुझे नहीं लगता कि PHP को कॉन्फ़िगर करने का कोई विकल्प है ताकि यह लक्षित स्क्रिप्ट के अनुसार विभिन्न कॉन्फ़िगरेशन को लोड कर सके। कम से कम, .in फ़ाइलों की नकल के बिना ...
हालाँकि, आप php के साथ कम्पोज़र चलाते समय थोज़ विकल्प जोड़ सकते हैं:
php -n -d extension=needed_ext.so composer.phar
-n
किसी भी php.ini को अनदेखा करने के लिए PHP को बताएगा। यह xdebug को इस आदेश के लिए लोड होने से रोकेगा।
-d
विकल्प आपको अपने इच्छित किसी भी विकल्प को जोड़ने की अनुमति देता है (उदाहरण के लिए, need_ext.so को सक्रिय करें)। आप कई -d
विकल्पों का उपयोग कर सकते हैं । बेशक, यह वैकल्पिक है, आपको इसकी आवश्यकता नहीं हो सकती है।
फिर आप एक उपनाम बना सकते हैं, इसे फिर से मीठा बनाने के लिए।
एक विशिष्ट समाधान (क्योंकि संगीतकार को आवश्यकता होती है):
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 उपनाम हैं जिन्हें मैं बनाए नहीं रखता। हो सकता है कि मैं बाइनरी को बैश स्क्रिप्ट के साथ बदलने की कोशिश करूं, या देखूं कि क्या मैं उपनामों को कॉन्फ़िगर कर सकता हूं।
composer.json
लिए आवश्यक है , उदाहरण के लिए "ext-ldap": "*", या बस इस बात पर निर्भर करता है कि पोस्ट इंस्टॉल कार्यों को ठीक से चलाने के लिए क्या आवश्यक है ... अगर केवल एक एक्सटेंशन को ब्लैकलिस्ट करने का एक तरीका था ...
php -m
diagnose
, और जब से मैं अपनी टीम के लिए विकास डॉकटर कंटेनरों का निर्माण कर रहा हूं , सबसे छोटी गति सुधार उन सभी को लाभ दे सकता है
एक उपनाम बनाकर आप उस composer
xdebug
त्रुटि संदेश को दबा देंगे ।
बस ~/.bash_aliases
अपने सिस्टम में इस लाइन को अपने साथ जोड़ें और इसे त्रुटिपूर्ण रूप से काम करना चाहिए।
alias composer="php -n /usr/local/bin/composer"
नए उपनाम को composer
उपलब्ध कराने के लिए शेल को पुनः लोड करें ।
source ~/.bash_profile
उपयोग:
$ composer --version
नोट:
आपको किसी अन्य पैरामीटर का उपयोग करने की आवश्यकता नहीं है।
आपके सिस्टम के आधार पर आपके .bashrc
बजाय हो सकता है .bash_profile
।
अपडेट करें:
जैसा कि @AlexanderKachkaev ने टिप्पणियों में उल्लेख किया है कि इसके कुछ मेमोरी वर्जन जोड़ने के लिए कुछ भी नहीं है।
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
-n
विकल्प को अक्षम Phar
विस्तार तो यह से चलाने के लिए विफल हो सकता हैcomposer.phar
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
मैं एक जवाब के साथ आया था जो OSX के लिए बहुत अच्छा काम करता है, और संभवतः किसी भी PHP संस्करण के लिए अनुकूलित किया जा सकता है जो "अतिरिक्त आईएनआरआईआईआर" में व्यक्तिगत .ini फ़ाइलों का उपयोग करके अपने एक्सटेंशन को लोड करता है:
#!/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"
मैं आमतौर पर प्रति प्रोजेक्ट एक शेल स्क्रिप्ट बनाता हूं, क्योंकि हर प्रोजेक्ट का एक और 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-enable के साथ चलाएँ: 1m33
Xdebug लेकिन ini- अक्षम: 0m19 के साथ चलाएँ
Xdebug के बिना चलाएं: 0m10
COMPOSER_DISABLE_XDEBUG_WARN=1
: यदि आपको चेतावनी मिलती है, तो इसका मतलब है कि आपका स्क्रब काम नहीं करता है। xdebug.remote_autostart
यदि दूरस्थ डिबगिंग अक्षम है, तो परिभाषित करना बेकार लगता है।
xdebug.remote_autostart
। स्क्रिप्ट की प्रभावशीलता के बारे में: संगीतकार जाँच करता है कि क्या xdebug एक्सटेंशन लोड किया गया है, न कि अगर यह वास्तव में कुछ भी कर रहा है तो यहां कोड देखें । Ini विकल्प "नियमित" php स्क्रिप्ट में ठीक काम करते हैं लेकिन फिर से: मैंने कोई प्रदर्शन परीक्षण नहीं किया है ...
यदि आप PHPStorm का उपयोग करते हैं, तो नवीनतम रिलीज़ (2016.2) सीएलआई स्क्रिप्ट ऑन-डिमांड के लिए XDebug को सक्षम करने की सुविधा के साथ आता है, जिसका अर्थ है कि आप अपनी विकास मशीन पर विश्व स्तर पर XDebug को बंद कर सकते हैं। जब आपकी परियोजनाओं के अंदर कोड की आवश्यकता होती है, तो IDE इसे उड़ने में सक्षम करेगा।
PhpStorm 2016.2 Xdebug ऑन डिमांड मोड का परिचय देता है जहां आप अपने वैश्विक PHP इंस्टॉल के लिए Xdebug को अक्षम कर सकते हैं, और PhpStorm केवल तभी इसे सक्षम कर सकेगा जब आपको इसकी आवश्यकता हो - जब आप अपनी स्क्रिप्ट को डीबग कर रहे हों, या जब आपको कोड रिपोर्ट की आवश्यकता हो।
लिंक किए गए लेख में वर्णित के अनुसार, आपको XDebug के पथ को शामिल करने के लिए अपनी PHP दुभाषियों की प्राथमिकताओं को संपादित करने की आवश्यकता है।
मेरे लिए यह एकदम सही समाधान की तरह लगता है, जैसा कि मैं आमतौर पर केवल आईडीडबग चाहता हूं जबकि मैं आईडीई में हूं।
हालाँकि, XDebug के अन्य संभावित उपयोग हैं जब आप "ऑफ़लाइन" होते हैं जैसे त्रुटि लॉग में विस्तारित स्टैक डंप, जिसे आप इसे विश्व स्तर पर बंद करके खो देंगे। बेशक आपको उत्पादन पर सक्षम XDebug नहीं होना चाहिए, इसलिए यह विकास में बीटा-परीक्षण या स्वचालित-परीक्षण CLI लिपियों जैसे मामलों का उपयोग करने के लिए सीमित होगा।
PHP मॉड्यूल को अस्थायी रूप से सक्षम या अक्षम करने के साथ अव्यवस्था के बजाय, जब आपके पास PHP का उपयोग करके समवर्ती प्रक्रियाएं हो सकती हैं (उदाहरण के लिए एक CI पाइपलाइन के भाग के रूप में), आप PHP को एक अलग मॉड्यूल लोडिंग निर्देशिका में इंगित करने के लिए कह सकते हैं।
जबकि यह ऊपर वर्णित कुछ समाधानों के समान है, यह कुछ किनारे के मामलों को हल करता है, जो जेनकींस या अन्य 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 समाधान के साथ करेंगे।
मैं विंडोज-आधारित कम्पोज़र इंस्टॉलर के लिए एक समाधान के साथ आया था - यह किसी भी कम्पोज़र इंस्टॉलेशन के लिए काम करना चाहिए, यह मूल रूप से लोड किए गए INI फ़ाइल की एक प्रतिलिपि बनाता है और xdebug zend एक्सटेंशन को कमेंट करता है, फिर उस कॉन्फ़िगरेशन फ़ाइल को लोड करता है जब यह रेंजर रन करता है ।
मैंने यह देखने के लिए एक समस्या खोली है कि क्या वे इस बदलाव को एकीकृत करना चाहेंगे:
https://github.com/composer/windows-setup/issues/58
आप वहां मेरे निर्देश और कोड पा सकते हैं।
जैसा कि जॉइस के उत्तर में उल्लेख किया गया है , यह मुद्दा अब संगीतकार के नवीनतम संस्करण में मौजूद नहीं है।
इसे नोट करने के लिए कंपोज़र डॉक्यूमेंटेशन अपडेट किया गया है । यह विवरण देता है कि आप संगीतकार के साथ xdebug को कैसे सक्षम कर सकते हैं (यदि आवश्यक हो)।
आप सेल्फ-अपडेट का उपयोग करके अपने संगीतकार के संस्करण को अपडेट कर सकते हैं ।
मेरे मैक पर मुझे करना था: sudo php /opt/local/bin/composer self-update
इस बारे में आगे का विवरण होमब्रेव पीएचपी के संदर्भ में इस मुद्दे पर पाया जा सकता है ।
यहाँ मेरी योगदान एक पर आधारित है Homebrew Mac OS X पर पीएचपी स्थापना -installed
यह एक शेल-स्क्रिप्ट आवरण है, जिसे एक निष्पादन योग्य फ़ाइल के रूप में सहेजने के लिए डिज़ाइन किया गया है /usr/local/bin/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
आवरण स्क्रिप्ट:
स्क्रिप्ट PHP 5.5 के OS X / Homebrew इंस्टॉलेशन के लिए युग्मित है। पथों को अन्य PHP संस्करणों और अन्य ऑपरेटिंग सिस्टमों और पैकेज प्रबंधकों की निर्देशिका लेआउट के साथ काम करने के लिए समायोजित किया जाना चाहिए। ध्यान दें कि सेड के कुछ संस्करणों को -i
विकल्प के बाद खाली-स्ट्रिंग तर्क की आवश्यकता नहीं है ।
स्क्रिप्ट सीधी है, इसमें यह सीधे मुख्य PHP कॉन्फ़िगरेशन फ़ाइलों पर काम करता है, हालांकि यह भी एक खामी है: Xdebug को इस स्क्रिप्ट के साथ समवर्ती रूप से निष्पादित होने वाली किसी भी स्क्रिप्ट के लिए अक्षम किया जाएगा।
मेरे विकास के माहौल में, यह एक स्वीकार्य व्यापार-बंद है, यह देखते हुए कि संगीतकार को मैन्युअल रूप से और केवल कभी-कभी निष्पादित किया जाता है; हालाँकि आप इस तकनीक का उपयोग नहीं करना चाहते हैं यदि कम्पोज़र को स्वचालित तैनाती प्रक्रिया के हिस्से के रूप में निष्पादित किया जाए।
ज्यादातर मामलों में आपको सीएलआई मोड पर xdebug की आवश्यकता नहीं होती है। यदि यह आपके लिए स्वीकार्य है तो आप अलग से cli और cgi को कॉन्फ़िगर कर सकते हैं।
इसलिए यदि आप php-cli.ini और conf-cli.d को php.ini फ़ाइल के पास से बाहर करते हैं, तो आप cli और cgi को अलग-अलग तरीके से कॉन्फ़िगर कर सकते हैं (cgi के लिए यह php.ini और conf.d होगा )। बस xdebug.ini को conf-cli.d में न डालें।
यदि आप OS X पर का उपयोग करके संगीतकार स्थापित करते हैं तो आप इस उपनाम का उपयोग कर सकते हैं:
alias composer="php -n $(cat $(which composer) | grep composer.phar | awk '{print $7}')"
PHP के कई संस्करणों के साथ मैकपोर्ट स्थापना के लिए मेरा त्वरित समाधान संगीतकार के लिए इस सरल शेल आवरण को लिखना था:
/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
कमियां:
सुरुचिपूर्ण नहीं, लेकिन सरल।
$1…$7
... शायद यह $@
या ऐसा कुछ है, आपको देखना होगा।
Xdebug को अक्षम करने और मेमोरी त्रुटियों को रोकने के लिए संगीतकार के लिए एक उपनाम बनाना:
इस लाइन को अपने ~ / .bash_profile में जोड़ें
alias composer='php -d xdebug.profiler_enable=0 -d memory_limit=-1 /usr/local/bin/composer'
नए उपनाम को उपलब्ध कराने के लिए टर्मिनल को फिर से शुरू करें।
PHP5-cli संस्करण पर Xdebug चेतावनी से छुटकारा पाने के लिए यहां मेरा त्वरित समाधान है। मैंने Ubuntu 14.04 पर PHP5-cli के लिए Xdebug का समर्थन हटा दिया है।
cd /etc/php5/cli/conf.d/
सुडो rm 20-xdebug.ini
अब PHP5-cli पर कोई Xdebug चेतावनी नहीं है।
sudo phpdismod xdebug
ब्रूट के लिए पसंदीदा तरीका होगाrm