Saat berjalan composer diagnose
, saya mendapatkan kesalahan berikut:
Ekstensi xdebug dimuat, ini dapat sedikit memperlambat Komposer. Disarankan untuk menonaktifkannya saat menggunakan Komposer.
Bagaimana cara menonaktifkan xdebug hanya saat saya menjalankan Composer?
php
composer-php
xdebug
greg0ire
sumber
sumber
bin/bash
daripada/bin/sh
, karena yang terakhir tidak menyukaifunction
kata kunci (Ubuntu 14.04 LTS).composer self-update
Perintah ini akan menonaktifkan modul PHP5 Xdebug untuk CLI (dan dengan demikian komposer):
Ini menghapus symlink xdebug.ini dari
/etc/php5/cli/conf.d/
Ini disarankan di http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/
Perhatikan bahwa untuk Ubuntu 16.04 Anda mungkin perlu menjalankannya seperti ini:
sumber
alias xdebug-on='sudo php5enmod -s cli xdebug'
danalias xdebug-off='sudo php5dismod -s cli xdebug'
, jadi sekarang mudah untuk mengaktifkanxdebug-on
dan menonaktifkanxdebug-off
xdebug.Saya rasa tidak ada opsi untuk mengkonfigurasi PHP sehingga dapat memuat konfigurasi yang berbeda sesuai dengan skrip yang ditargetkan. Setidaknya, bukan tanpa menduplikasi file .ini ...
Namun, Anda dapat menambahkan opsi tersebut saat menjalankan komposer dengan php:
-n
akan memberitahu PHP untuk mengabaikan php.ini apapun. Ini akan mencegah xdebug memuat perintah ini.-d
options memungkinkan Anda untuk menambahkan opsi apa pun yang Anda inginkan (misalnya, aktifkan required_ext.so). Anda dapat menggunakan banyak-d
opsi. Tentu saja, ini opsional, Anda mungkin tidak membutuhkannya.Kemudian Anda bisa membuat alias, untuk membuatnya lebih manis lagi.
Solusi tipikal (karena komposer membutuhkan json):
greg0ire> solusi saya, berdasarkan itu:
Kelihatannya jelek (saya mencoba dan gagal melakukannya dengan xargs), tetapi berfungsi ... Saya harus menonaktifkan beberapa ekstensi, jika tidak saya mendapatkan peringatan berikut:
sumber
-n
kemarin dan mengalami masalah karena saya kehilanganphar
ekstensi. Saya akan mencoba menambahkan lebih banyak ekstensi hingga berhasil, saya pikir ini adalah solusi yang baik. Sesuai alias, saya sudah memiliki beberapa alias zsh yang tidak saya pertahankan. Mungkin saya akan mencoba mengganti biner dengan skrip bash, atau melihat apakah saya dapat mengkonfigurasi alias.composer.json
, misalnya "ext-ldap": "*", atau hanya tergantung pada apa yang diperlukan untuk membuat tugas pasca pemasangan berjalan dengan baik … Seandainya ada cara untuk memasukkan ekstensi ke daftar hitam…php -m
diagnose
, dan karena saya sedang membangun container docker pengembangan untuk tim saya, peningkatan kecepatan terkecil dapat bermanfaat bagi semuanyaDengan membuat alias Anda akan menyembunyikan
composer
xdebug
pesan kesalahan itu.Cukup tambahkan baris ini ke
~/.bash_aliases
dalam sistem Anda dan itu akan bekerja dengan sempurna.Muat ulang shell untuk membuat alias baru
composer
tersedia.PEMAKAIAN:
CATATAN:
Anda tidak perlu menggunakan parameter lain.
Tergantung pada sistem Anda, Anda mungkin memiliki
.bashrc
bukannya.bash_profile
.MEMPERBARUI:
Seperti yang disebutkan @AlexanderKachkaev di komentar, tidak ada gunanya menambahkan memory_limit sebagai berikut untuk menghindari crash dalam beberapa situasi:
sumber
-n
pilihan menonaktifkanPhar
ekstensi sehingga mungkin gagal untuk menjalankan daricomposer.phar
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
Saya datang dengan jawaban yang bekerja cukup baik untuk OSX, dan mungkin dapat diadaptasi untuk versi PHP yang memuat ekstensinya menggunakan file .ini individual di "tambahan ini dir":
sumber
Saya biasanya membuat skrip shell per proyek, karena setiap proyek memiliki versi PHP lain. Ini ada di
/bin/
direktori di sebelahcomposer.phar
dancomposer.json
dan saya menjalankannya seperti./bin/composer
di direktori proyek saya.Ini terlihat seperti ini (untuk php56)
Itu
-d
pilihan efektif menonaktifkan Xdebug. BagianCOMPOSER_DISABLE_XDEBUG_WARN=1
menonaktifkan masalah komposer peringatan.Menonaktifkan ekstensi xdebug lebih disukai (lihat pemecahan masalah komposer ), tetapi saya pribadi menyukai skrip yang lebih sederhana.
Beberapa pengaturan waktu di komputer saya: 2 Jalankan dengan xdebug dan diaktifkan ini: 1m33
Jalankan dengan xdebug tetapi ini-nonaktif: 0m19
Jalankan tanpa xdebug: 0m10
sumber
COMPOSER_DISABLE_XDEBUG_WARN=1
: jika Anda mendapat peringatan, itu berarti scrit Anda tidak berfungsi. Mendefinisikanxdebug.remote_autostart
tampaknya tidak berguna jika debugging jarak jauh dinonaktifkan.xdebug.remote_autostart
. Tentang keefektifan skrip: Komposer memeriksa apakah ekstensi xdebug dimuat, bukan apakah benar-benar melakukan sesuatu, lihat kode di sini . Opsi ini bekerja dengan baik dalam skrip php "biasa" tetapi sekali lagi: Saya tidak melakukan tes kinerja ...Jika Anda menggunakan PHPStorm, rilis terbaru (2016.2) dilengkapi dengan fitur untuk mengaktifkan XDebug untuk skrip CLI sesuai permintaan, yang berarti Anda cukup mematikan XDebug secara global pada mesin pengembangan Anda. IDE akan mengaktifkannya dengan cepat saat dibutuhkan oleh kode di dalam proyek Anda.
https://blog.jetbrains.com/phpstorm/2016/06/xdebug-on-demand-for-cli-php-scripts-in-phpstorm-2016-2-eap/
Anda perlu mengedit preferensi Penerjemah PHP untuk menyertakan jalur ke XDebug, seperti yang dijelaskan di artikel yang ditautkan.
Bagi saya ini sepertinya solusi yang tepat, karena saya biasanya hanya menginginkan XDebug saat saya menggunakan IDE.
Namun XDebug memang memiliki kegunaan potensial lain saat Anda "offline" misalnya tumpukan dump yang diperpanjang di log kesalahan, yang akan hilang dengan mematikannya secara global. Tentu saja Anda tidak boleh mengaktifkan XDebug pada produksi, jadi ini akan dibatasi untuk kasus penggunaan seperti pengujian beta atau pengujian otomatis skrip CLI dalam pengembangan.
sumber
Daripada mengacaukan dengan mengaktifkan atau menonaktifkan modul PHP untuk sementara, ketika Anda mungkin memiliki proses bersamaan menggunakan PHP (misalnya sebagai bagian dari pipeline CI), Anda dapat memberi tahu PHP untuk menunjuk ke direktori pemuatan modul yang berbeda.
Meskipun ini serupa dengan beberapa solusi yang disebutkan di atas, ini memecahkan beberapa kasus edge, yang sangat berguna saat digunakan oleh Jenkins atau runner CI lain yang menjalankan pengujian pada mesin yang sama secara bersamaan.
Cara termudah untuk melakukannya adalah dengan menggunakan variabel lingkungan
PHP_INI_SCAN_DIR
Menggunakan ini dalam skrip atau tugas build itu mudah:
export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug php composer install
Tentu saja Anda ingin mempersiapkan /etc/php.d.noxdebug terlebih dahulu, melakukan sesuatu seperti:
mkdir /etc/php.d.noxdebug cp /etc/php.d/* /etc/php.d.noxdebug rm /etc/php.d.noxdebug/xdebug.ini
Ini berarti Anda memiliki lingkungan yang mirip dengan lingkungan php lama, dengan hanya satu modul yang hilang. Artinya Anda tidak perlu khawatir perlu memuat modul phar / json seperti yang Anda lakukan dengan solusi php -n.
sumber
Saya datang dengan solusi untuk penginstal Komposer berbasis Windows - itu harus berfungsi untuk instalasi Komposer apa pun, itu pada dasarnya hanya membuat salinan file INI yang dimuat dan mengomentari ekstensi zend xdebug, kemudian memuat file konfigurasi itu ketika menjalankan komposer .
Saya telah membuka masalah untuk melihat apakah mereka ingin mengintegrasikan perubahan ini:
https://github.com/composer/windows-setup/issues/58
Anda dapat menemukan instruksi dan kode saya di sana.
sumber
Sebagaimana dicatat dalam jawaban Joyce , masalah ini tidak lagi ada di versi terbaru Komposer.
Dokumentasi Komposer telah diperbarui untuk mencatat ini . Ini merinci bagaimana Anda dapat mengaktifkan xdebug dengan Komposer (jika diperlukan).
Anda dapat memperbarui versi Komposer Anda dengan memanfaatkan pembaruan sendiri .
Di Mac saya, saya harus melakukan:
sudo php /opt/local/bin/composer self-update
Rincian lebih lanjut tentang ini dalam konteks penginstalan PHP Homebrew dapat ditemukan dalam edisi ini .
sumber
Manipulasi langsung dari konfigurasi PHP
Ini kontribusi saya berdasarkan instalasi PHP yang diinstal Homebrew di Mac OS X.
Ini adalah pembungkus skrip-shell, dirancang untuk disimpan sebagai file yang dapat dieksekusi di
/usr/local/bin/composer
, dengan biner Komposer di/usr/local/bin/composer.phar
:Teori Operasi
Skrip pembungkus:
Skrip ini digabungkan ke instalasi OS X / Homebrew dari PHP 5.5. Path harus disesuaikan untuk bekerja dengan versi PHP lain dan tata letak direktori sistem operasi dan manajer paket lain. Perhatikan juga bahwa beberapa versi sed tidak memerlukan argumen string kosong mengikuti
-i
opsi.Caveat Utilitor
Skrip ini sangat mudah, karena bekerja langsung pada file konfigurasi PHP utama, namun ini juga merupakan kelemahan: Xdebug juga akan dinonaktifkan untuk skrip yang dieksekusi secara bersamaan dengan skrip ini.
Dalam lingkungan pengembangan saya, ini adalah trade-off yang dapat diterima, mengingat Komposer dijalankan secara manual dan hanya sesekali; namun Anda mungkin tidak ingin menggunakan teknik ini jika menjalankan Composer sebagai bagian dari proses penerapan otomatis.
sumber
Dalam kebanyakan kasus, Anda tidak memerlukan xdebug pada mode CLI. Jika ini dapat diterima untuk Anda daripada Anda dapat mengkonfigurasi cli dan cgi secara berbeda.
Jadi jika Anda membuat php-cli.ini dan conf-cli.d mendekati keluar dari file php.ini daripada Anda dapat mengkonfigurasi cli dan cgi secara berbeda (untuk cgi adalah php.ini dan conf.d ). Hanya saja, jangan memasukkan xdebug.ini ke conf-cli.d.
sumber
Jika Anda menginstal komposer menggunakan brew di OS X, Anda dapat menggunakan alias ini:
sumber
Solusi cepat saya untuk instalasi macports, dengan beberapa versi PHP adalah menulis bungkus shell sederhana ini untuk Komposer:
Kemudian jalankan perintah komposer seperti ini:
Kekurangan:
Tidak elegan, tapi sederhana.
sumber
$1…$7
… mungkin itu$@
atau sesuatu seperti itu, Anda harus melihat.Membuat alias untuk komposer untuk menonaktifkan xdebug dan mencegah kesalahan memori:
Tambahkan baris ini ke ~ / .bash_profile Anda
Mulai ulang terminal untuk membuat alias baru tersedia.
sumber
Berikut adalah solusi cepat saya untuk menghilangkan peringatan Xdebug pada versi PHP5-cli. Saya telah menghapus dukungan Xdebug untuk PHP5-cli di Ubuntu 14.04.
Sekarang tidak ada lagi peringatan Xdebug pada PHP5-cli.
sumber
sudo phpdismod xdebug
akan menjadi metode yang disukai untuk kasarrm