Koşarken composer diagnose
şu hatayı alıyorum:
Xdebug uzantısı yüklendi, bu Composer'ı biraz yavaşlatabilir. Composer kullanırken devre dışı bırakılması önerilir.
Xdebug'u yalnızca Composer'ı çalıştırırken nasıl devre dışı bırakabilirim?
Yanıtlar:
Güncelleme : Sorun Composer 1.3'te düzeltildi . composer self-update
Aşağıdaki geçici çözümü denemek yerine, uygulayarak besteciyi en son sürüme güncelleyin .
İşte @ ezzatron'un kodundaki değişikliğim. Phpinfo çıktısından ini dosyalarını tespit etmek için betiği güncelledim.
#!/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
yerine ayarlamak zorunda kaldım (Ubuntu 14.04 LTS). /bin/sh
function
composer self-update
Bu komut, CLI (ve dolayısıyla composer) için PHP5 Xdebug modülünü devre dışı bırakacaktır:
sudo php5dismod -s cli xdebug
Bu kaldırır xdebug.ini gelen sembolik/etc/php5/cli/conf.d/
Bu, http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/ adresinde önerilmiştir.
Ubuntu 16.04 için muhtemelen şu şekilde çalıştırmanız gerektiğini unutmayın:
sudo phpdismod -s cli xdebug
alias xdebug-on='sudo php5enmod -s cli xdebug'
ve alias xdebug-off='sudo php5dismod -s cli xdebug'
şimdi etkinleştirmek kolay olması için, xdebug-on
ve devre dışı bırakma xdebug-off
xdebug.
Hedeflenen betiğe göre farklı yapılandırmaları yükleyebilmesi için PHP'yi yapılandırma seçeneği olduğunu sanmıyorum. En azından .ini dosyalarını kopyalamadan ...
Ancak, composer'ı php ile çalıştırırken bu seçenekleri ekleyebilirsiniz:
php -n -d extension=needed_ext.so composer.phar
-n
PHP'ye php.ini'yi göz ardı etmesini söyleyecektir. Bu, xdebug'un bu komut için yüklenmesini önleyecektir.
-d
options, istediğiniz herhangi bir seçeneği eklemenize izin verir (örneğin, required_ext.so öğesini etkinleştirin). Birden çok -d
seçeneği kullanabilirsiniz . Elbette bu isteğe bağlıdır, ihtiyacınız olmayabilir.
Sonra tekrar şekerli hale getirmek için bir takma ad oluşturabilirsiniz.
Tipik bir çözüm (çünkü bestecinin json'a ihtiyacı vardır):
php -n -d extension=json.so composer.phar
greg0ire> buna dayalı çözümüm:
#!/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
Çirkin görünüyor (xargs ile bunu yapmayı denedim ve başarısız oldum), ama işe yarıyor… Yine de bazı uzantıları devre dışı bırakmak zorunda kaldım, aksi takdirde aşağıdaki uyarıları alıyorum:
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
Dün denedim ve bir sorun yaşadım çünkü phar
uzantıyı kaçırdım. Çalışana kadar daha fazla uzantı eklemeye çalışacağım, bunun iyi bir çözüm olduğunu düşünüyorum. Takma ada göre, korumadığım bazı zsh takma adlarım var. Belki ikiliyi bir bash betiğiyle değiştirmeyi deneyeceğim veya takma adları yapılandırıp yapılandıramayacağıma bakacağım.
composer.json
, örneğin "ext-ldap": "*" veya yalnızca yükleme sonrası görevlerin düzgün çalışması için neye ihtiyaç duyulduğuna bağlı olarak büyüyebilmesidir. … Bir uzantıyı kara listeye almanın bir yolu
php -m
diagnose
ve ben inşa ediyorum beri gelişme liman işçisi kapları ekibim için, en küçük hız gelişimi hepsine faydalı olacağını
Bir takma ad oluşturarak bu composer
xdebug
hata mesajını bastırırsınız .
Sadece bu satırı ~/.bash_aliases
sisteminize ekleyin ve kusursuz çalışması gerekir.
alias composer="php -n /usr/local/bin/composer"
Yeni takma adı composer
kullanılabilir hale getirmek için kabuğu yeniden yükleyin .
source ~/.bash_profile
KULLANIM:
$ composer --version
NOT:
Başka bir parametre kullanmanız gerekmez.
Sisteminize bağlı olarak bir .bashrc
yerine sahip olabilirsiniz .bash_profile
.
GÜNCELLEME:
@AlexanderKachkaev'in yorumlarda belirttiği gibi, bazı durumlarda çökmeyi önlemek için memory_limit'i aşağıdaki gibi eklemenin hiçbir değeri yoktur:
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
-n
seçenek Phar
uzantıyı devre dışı bırakır, bu nedenle çalıştırılamayabilircomposer.phar
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
OSX için oldukça iyi çalışan bir yanıt buldum ve muhtemelen uzantılarını "ek ini dizininde" tek tek .ini dosyalarını kullanarak yükleyen herhangi bir PHP sürümüne uyarlanabilir:
#!/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"
Her projenin başka bir PHP sürümü olduğundan, genellikle proje başına bir kabuk betiği oluştururum. /bin/
Yanında bir dizinde composer.phar
ve proje dizinimdeki composer.json
gibi çalıştırıyorum ./bin/composer
.
Şöyle görünüyor (php56 için)
#!/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
Seçenekler etkin bir devreden xdebug. COMPOSER_DISABLE_XDEBUG_WARN=1
Bölüm uyarı besteci sorunları devre dışı bırakır.
Xdebug uzantısının devre dışı bırakılması tercih edilir ( composer sorun giderme bölümüne bakın ), ancak kişisel olarak daha basit komut dosyasını seviyorum.
Makinemde bazı zamanlamalar: 2 xdebug ve ini özellikli çalıştır: 1m33
Xdebug ile çalıştırın ancak devre dışı bırakıldı: 0m19
Xdebug olmadan çalıştırın: 0m10
COMPOSER_DISABLE_XDEBUG_WARN=1
bıraktığınız için şuna ihtiyacınız olmadığını düşünüyorum: bir uyarı alırsanız, bu sadece scrit'inizin çalışmadığı anlamına gelir. xdebug.remote_autostart
Uzaktan hata ayıklama devre dışı bırakılırsa tanımlama işe yaramaz.
xdebug.remote_autostart
. Komut dosyalarının etkinliği hakkında: Composer, xdebug uzantısının yüklenip yüklenmediğini kontrol eder, aslında buradaki koda bakıp bakmadığını kontrol eder . İni seçenekleri "normal" php betiklerinde iyi çalışıyor ama yine de: Performans testi yapmadım ...
PHPStorm kullanıyorsanız, en son sürüm (2016.2), isteğe bağlı CLI komut dosyaları için XDebug'u etkinleştirme özelliğiyle birlikte gelir; bu, geliştirme makinenizde XDebug'u küresel olarak kapatabileceğiniz anlamına gelir. IDE, projelerinizdeki kod tarafından ihtiyaç duyulduğunda onu anında etkinleştirecektir.
PhpStorm 2016.2, global PHP kurulumunuz için Xdebug'u devre dışı bırakabileceğiniz Xdebug On Demand modunu sunar ve PhpStorm, bunu yalnızca gerektiğinde etkinleştirir - komut dosyalarınızda hata ayıklarken veya kod kapsamı raporlarına ihtiyacınız olduğunda.
Bağlantılı makalede açıklandığı gibi, XDebug yolunu dahil etmek için PHP Yorumlayıcı tercihlerinizi düzenlemeniz gerekir.
Bana göre bu mükemmel bir çözüm gibi görünüyor, çünkü IDE'deyken yalnızca XDebug'u istiyorum.
Ancak, "çevrimdışı" olduğunuzda XDebug'ın başka potansiyel kullanımları da vardır; örneğin, hata günlüklerindeki genişletilmiş yığın dökümleri, bunu global olarak kapattığınızda kaybedersiniz. Elbette, üretimde XDebug'ı etkinleştirmemelisiniz, bu nedenle bu, beta testi veya geliştirmede otomatik test CLI komut dosyaları gibi durumlarla sınırlı olacaktır.
PHP modülünü geçici olarak etkinleştirmek veya devre dışı bırakmakla karıştırmak yerine, PHP kullanan eşzamanlı işlemleriniz olduğunda (örneğin bir CI işlem hattının parçası olarak), PHP'ye farklı bir modül yükleme dizinini göstermesini söyleyebilirsiniz.
Bu, yukarıda bahsedilen çözümlerin bazılarına benzer olsa da, birkaç uç durumu çözer ve bu, aynı makinede aynı anda testleri çalıştıran Jenkins veya diğer CI çalıştırıcıları tarafından kullanıldığında çok yararlıdır.
Bunu yapmanın en kolay yolu, ortam değişkenini kullanmaktır. PHP_INI_SCAN_DIR
Bunu bir komut dosyasında veya derleme görevinde kullanmak kolaydır:
export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug
php composer install
Elbette önce /etc/php.d.noxdebug'ı hazırlamanız ve aşağıdaki gibi bir şey yapmanız gerekir:
mkdir /etc/php.d.noxdebug
cp /etc/php.d/* /etc/php.d.noxdebug
rm /etc/php.d.noxdebug/xdebug.ini
Bu, eski php ortamına benzer bir ortama sahip olduğunuz ve yalnızca bir modülün eksik olduğu anlamına gelir. Yani php -n çözümünde olduğu gibi phar / json modüllerini yüklemeniz gerekeceği konusunda endişelenmenize gerek yok.
Windows tabanlı Composer yükleyici için bir çözüm buldum - herhangi bir Composer yüklemesi için çalışmalı, yalnızca yüklenen INI dosyasının bir kopyasını oluşturuyor ve xdebug zend uzantısını yorumluyor, ardından composer'ı çalıştırdığında bu yapılandırma dosyasını yüklüyor .
Bu değişikliği entegre etmek isteyip istemediklerini görmek için bir sorun açtım:
https://github.com/composer/windows-setup/issues/58
Talimatlarımı ve kodumu orada bulabilirsiniz.
Joyce'un yanıtında belirtildiği gibi , bu sorun artık Composer'ın son sürümünde mevcut değildir.
Composer belgeleri bunu not edecek şekilde güncellendi . Composer ile xdebug'u nasıl etkinleştirebileceğinizi (gerekirse) detaylandırır.
Composer sürümünüzü kendi kendine güncelleme kullanarak güncelleyebilirsiniz .
Mac'imde yapmam gereken: sudo php /opt/local/bin/composer self-update
Homebrew PHP kurulumu bağlamında bununla ilgili daha fazla ayrıntı bu sayıda bulunabilir .
İşte Mac OS X'te Homebrew tarafından yüklenmiş bir PHP kurulumuna dayanan katkım.
Bu /usr/local/bin/composer
, Composer ikilisi aşağıdaki adresten yürütülebilir bir dosya olarak kaydedilmek üzere tasarlanmış bir kabuk-komut dosyası sarmalayıcısıdır /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
Sarmalayıcı komut dosyası:
Komut dosyası, PHP 5.5'in OS X / Homebrew kurulumuna bağlıdır. Yollar, diğer PHP sürümleri ve diğer işletim sistemleri ve paket yöneticilerinin dizin düzenleriyle çalışacak şekilde ayarlanmalıdır. Ayrıca sed'in bazı sürümlerinin, -i
seçeneğin ardından boş dizge argümanına ihtiyaç duymadığını unutmayın .
Komut dosyası, doğrudan ana PHP yapılandırma dosyalarında çalıştığı için basittir, ancak bu aynı zamanda bir dezavantajdır: Xdebug, bu komut dosyasıyla aynı anda çalıştırılan tüm komut dosyaları için de devre dışı bırakılacaktır.
Composer'ın elle ve sadece ara sıra çalıştırıldığı göz önüne alındığında, geliştirme ortamımda bu kabul edilebilir bir değiş tokuştur; ancak Composer'ı otomatik bir dağıtım işleminin parçası olarak çalıştırıyorsanız bu tekniği kullanmak istemeyebilirsiniz.
Çoğu durumda, CLI modunda xdebug'a ihtiyacınız yoktur. Bu sizin için kabul edilebilirse, cli ve cgi'yi farklı şekilde yapılandırabilirsiniz.
Yani php-cli.ini ve conf-cli.d'yi php.ini dosyasından çıkarken yakın yaparsanız, cli ve cgi'yi farklı şekilde yapılandırabilirsiniz (cgi için php.ini ve conf.d olacaktır ). Xdebug.ini dosyasını conf-cli.d'ye koymayın.
Composer'ı OS X üzerinde brew kullanarak yüklerseniz Bu takma adı kullanabilirsiniz:
alias composer="php -n $(cat $(which composer) | grep composer.phar | awk '{print $7}')"
PHP'nin birden çok sürümüyle bir macports kurulumu için hızlı çözümüm, Composer için bu basit kabuk sarmalayıcıyı yazmaktı:
/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
Ardından herhangi bir composer komutunu şu şekilde çalıştırın:
sudo composer-nodebug.sh update
Dezavantajlar:
Zarif değil, ama basit.
$1…$7
... belki $@
ya da onun gibi bir şey, bakmanız gerekecek.
Composer için xdebug'u devre dışı bırakmak ve bellek hatalarını önlemek için bir takma ad oluşturma:
Bu satırı ~ / .bash_profile dosyanıza ekleyin
alias composer='php -d xdebug.profiler_enable=0 -d memory_limit=-1 /usr/local/bin/composer'
Yeni takma adı kullanılabilir hale getirmek için terminali yeniden başlatın.
İşte PHP5-cli sürümündeki Xdebug uyarısından kurtulmak için hızlı çözümüm. Ubuntu 14.04'te PHP5-cli için Xdebug desteğini kaldırdım.
cd /etc/php5/cli/conf.d/
sudo rm 20-xdebug.ini
Artık PHP5-cli'de Xdebug uyarısı yok.
sudo phpdismod xdebug
kaba davranmak için tercih edilen yöntem olurdurm