Beim Ausführen composer diagnose
wird folgende Fehlermeldung angezeigt:
Die xdebug-Erweiterung ist geladen, dies kann Composer etwas verlangsamen. Es wird empfohlen, es bei Verwendung von Composer zu deaktivieren.
Wie kann ich xdebug nur deaktivieren, wenn ich Composer ausführe?
php
composer-php
xdebug
greg0ire
quelle
quelle
bin/bash
eher anpassen als/bin/sh
, da letzterer dasfunction
Schlüsselwort (Ubuntu 14.04 LTS) nicht mochte .composer self-update
Dieser Befehl deaktiviert das PHP5 Xdebug-Modul für CLI (und damit Composer):
Es entfernt den xdebug.ini- Symlink von
/etc/php5/cli/conf.d/
Dies wurde auf http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/ vorgeschlagen.
Beachten Sie, dass Sie Ubuntu 16.04 wahrscheinlich folgendermaßen ausführen müssen:
quelle
alias xdebug-on='sudo php5enmod -s cli xdebug'
undalias xdebug-off='sudo php5dismod -s cli xdebug'
, so ist es jetzt einfachxdebug-on
,xdebug-off
xdebug zu aktivieren und zu deaktivieren .Ich glaube nicht, dass es eine Option gibt, PHP so zu konfigurieren, dass es je nach Zielskript unterschiedliche Konfigurationen laden kann. Zumindest nicht ohne Duplizieren von INI-Dateien ...
Sie können diese Optionen jedoch hinzufügen, wenn Sie Composer mit PHP ausführen:
-n
wird PHP anweisen, jede php.ini zu ignorieren. Dadurch wird verhindert, dass xdebug für genau diesen Befehl geladen wird.-d
Mit options können Sie jede gewünschte Option hinzufügen (aktivieren Sie beispielsweise required_ext.so). Sie können mehrere-d
Optionen verwenden. Dies ist natürlich optional, Sie benötigen es möglicherweise nicht.Dann können Sie einen Alias erstellen, um ihn wieder zuckerhaltig zu machen.
Eine typische Lösung (weil der Komponist json braucht):
greg0ire> meine lösung, basierend darauf:
Es sieht hässlich aus (ich habe versucht und es mit xargs nicht geschafft), funktioniert aber ... Ich musste einige Erweiterungen deaktivieren, sonst erhalte ich die folgenden Warnungen:
quelle
-n
gestern versucht und hatte ein Problem, weil mir diephar
Erweiterung fehlte . Ich werde versuchen, immer mehr Erweiterungen hinzuzufügen, bis es funktioniert. Ich denke, das ist eine gute Lösung. Gemäß dem Alias habe ich bereits einige zsh-Aliase, die ich nicht pflege. Vielleicht werde ich versuchen, die Binärdatei durch ein Bash-Skript zu ersetzen oder zu sehen, ob ich die Aliase konfigurieren kann.composer.json
Benutzer in ihrer Whitelist benötigen , z. B. "ext-ldap": "*", oder einfach abhängig davon, was erforderlich ist, damit die Aufgaben nach der Installation ordnungsgemäß ausgeführt werden … Wenn es nur eine Möglichkeit gäbe, eine Erweiterung auf die schwarze Liste zu setzen…php -m
diagnose
, und da ich Entwicklungs-Docker-Container für mein TeamDurch das Erstellen eines Alias unterdrücken Sie diese
composer
xdebug
Fehlermeldung.Fügen Sie diese Zeile einfach zu Ihrem
~/.bash_aliases
System hinzu und sie sollte einwandfrei funktionieren.Laden Sie die Shell neu, um den neuen Alias
composer
verfügbar zu machen .VERWENDUNG:
HINWEIS:
Sie müssen nicht unbedingt einen anderen Parameter verwenden.
Abhängig von Ihrem System haben Sie möglicherweise eine
.bashrc
anstelle von.bash_profile
.AKTUALISIEREN:
Wie @AlexanderKachkaev in den Kommentaren erwähnt, ist es nichts wert, das memory_limit wie folgt hinzuzufügen, um Abstürze in einigen Situationen zu vermeiden:
quelle
-n
Option deaktiviert diePhar
Erweiterung, so dass sie möglicherweise nicht voncomposer.phar
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
Ich habe eine Antwort gefunden, die für OSX ziemlich gut funktioniert und wahrscheinlich für jede PHP-Version angepasst werden kann, die ihre Erweiterungen mithilfe einzelner INI-Dateien im "zusätzlichen Verzeichnis" lädt:
quelle
Normalerweise erstelle ich ein Shell-Skript pro Projekt, da jedes Projekt eine andere PHP-Version hat. Es befindet sich in einem
/bin/
Verzeichnis nebencomposer.phar
undcomposer.json
und ich führe es wie./bin/composer
in meinem Projektverzeichnis aus.Es sieht so aus (für php56)
Die
-d
Optionen deaktivieren xdebug effektiv. DerCOMPOSER_DISABLE_XDEBUG_WARN=1
Teil deaktiviert die Probleme mit dem Warnkomponisten.Das Deaktivieren der xdebug-Erweiterung wird bevorzugt (siehe Composer-Fehlerbehebung ), aber ich persönlich mag das einfachere Skript.
Einige Timings auf meinem Computer: 2 Mit xdebug ausführen und ini-fähig: 1m33
Mit xdebug ausführen, aber ini-deaktiviert: 0m19
Laufen Sie ohne xdebug: 0m10
quelle
COMPOSER_DISABLE_XDEBUG_WARN=1
: Wenn Sie eine Warnung erhalten, bedeutet dies nur, dass Ihr Skript nicht funktioniert. Das Definierenxdebug.remote_autostart
scheint nutzlos, wenn das Remote-Debugging deaktiviert ist.xdebug.remote_autostart
. Informationen zur Wirksamkeit von Skripten: Composer prüft, ob die xdebug-Erweiterung geladen ist, und nicht, ob tatsächlich etwas unternommen wird. Sehen Sie sich den Code hier an . Die INI-Optionen funktionieren gut in "normalen" PHP-Skripten, aber noch einmal: Ich habe keine Leistungstests durchgeführt ...Wenn Sie PHPStorm verwenden, enthält die neueste Version (2016.2) eine Funktion zum Aktivieren von XDebug für CLI-Skripten bei Bedarf. Dies bedeutet, dass Sie XDebug einfach global auf Ihrem Entwicklungscomputer deaktivieren können. Die IDE aktiviert es im laufenden Betrieb, wenn es von Code in Ihren Projekten benötigt wird.
https://blog.jetbrains.com/phpstorm/2016/06/xdebug-on-demand-for-cli-php-scripts-in-phpstorm-2016-2-eap/
Sie müssen die Einstellungen Ihrer PHP-Interpreter bearbeiten, um den Pfad zu XDebug einzuschließen, wie im verlinkten Artikel beschrieben.
Für mich scheint dies die perfekte Lösung zu sein, da ich normalerweise nur XDebug möchte, während ich in der IDE bin.
XDebug hat jedoch andere Verwendungsmöglichkeiten, wenn Sie "offline" sind, z. B. erweiterte Stack-Dumps in Fehlerprotokollen, die Sie verlieren würden, wenn Sie es global deaktivieren. Natürlich sollte XDebug in der Produktion nicht aktiviert sein, daher ist dies auf Anwendungsfälle wie Betatests oder automatisierte Tests von CLI-Skripten in der Entwicklung beschränkt.
quelle
Anstatt das PHP-Modul vorübergehend zu aktivieren oder zu deaktivieren, können Sie PHP anweisen, auf ein anderes Modulladeverzeichnis zu verweisen, wenn Sie möglicherweise gleichzeitig Prozesse mit PHP verwenden (z. B. als Teil einer CI-Pipeline).
Dies ähnelt zwar einigen der oben genannten Lösungen, löst jedoch einige Randfälle, was sehr nützlich ist, wenn es von Jenkins oder einem anderen CI-Läufer verwendet wird, der gleichzeitig Tests auf demselben Computer ausführt.
Der einfachste Weg, dies zu tun, ist die Verwendung der Umgebungsvariablen
PHP_INI_SCAN_DIR
Die Verwendung in einem Skript oder einer Build-Aufgabe ist einfach:
export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug php composer install
Natürlich möchten Sie zuerst /etc/php.d.noxdebug vorbereiten und dabei Folgendes tun:
mkdir /etc/php.d.noxdebug cp /etc/php.d/* /etc/php.d.noxdebug rm /etc/php.d.noxdebug/xdebug.ini
Dies bedeutet, dass Sie eine ähnliche Umgebung wie die alte PHP-Umgebung haben und nur ein Modul fehlt. Das heißt, Sie müssen sich keine Sorgen machen, dass Sie die phar / json-Module wie bei der php-n-Lösung laden müssen.
quelle
Ich habe eine Lösung für das Windows-basierte Composer-Installationsprogramm entwickelt. Sie sollte für jede Composer-Installation funktionieren. Sie erstellt lediglich eine Kopie der geladenen INI-Datei, kommentiert die Erweiterung xdebug zend aus und lädt diese Konfigurationsdatei, wenn Composer ausgeführt wird .
Ich habe eine Ausgabe geöffnet, um zu sehen, ob sie diese Änderung integrieren möchten:
https://github.com/composer/windows-setup/issues/58
Dort finden Sie meine Anweisungen und meinen Code.
quelle
Wie in der Antwort von Joyce erwähnt , ist dieses Problem in der neuesten Version von Composer nicht mehr vorhanden.
Die Composer-Dokumentation wurde aktualisiert, um dies zu beachten . Hier erfahren Sie, wie Sie xdebug mit Composer aktivieren können (falls erforderlich).
Sie können Ihre Composer-Version mithilfe der Selbstaktualisierung aktualisieren .
Auf meinem Mac musste ich Folgendes tun:
sudo php /opt/local/bin/composer self-update
Weitere Details dazu im Rahmen einer Homebrew PHP-Installation finden Sie in dieser Ausgabe .
quelle
Direkte Manipulation der PHP-Konfiguration
Hier ist mein Beitrag basierend auf einer von Homebrew installierten PHP-Installation unter Mac OS X.
Es handelt sich um einen Shell-Script-Wrapper, der als ausführbare Datei unter gespeichert werden kann
/usr/local/bin/composer
, wobei die Composer-Binärdatei unter/usr/local/bin/composer.phar
:Theorie der Arbeitsweise
Das Wrapper-Skript:
Das Skript ist an eine OS X / Homebrew-Installation von PHP 5.5 gekoppelt. Die Pfade sollten so angepasst werden, dass sie mit anderen PHP-Versionen und Verzeichnislayouts anderer Betriebssysteme und Paketmanager funktionieren. Beachten Sie auch, dass einige Versionen von sed das Argument der leeren Zeichenfolge nach der
-i
Option nicht benötigen .Vorbehalt Utilitor
Das Skript ist sehr einfach, indem sich direkt auf den wichtigsten PHP - Konfigurationsdateien arbeiten, jedoch ist dies auch ein Nachteil: Xdebug auch für alle Skripts deaktiviert werden , die gleichzeitig mit diesem Skript ausgeführt werden passieren.
In meiner Entwicklungsumgebung ist dies ein akzeptabler Kompromiss, da Composer manuell und nur gelegentlich ausgeführt wird. Möglicherweise möchten Sie diese Technik jedoch nicht verwenden, wenn Sie Composer als Teil eines automatisierten Bereitstellungsprozesses ausführen.
quelle
In den meisten Fällen benötigen Sie xdebug im CLI-Modus nicht. Wenn dies für Sie akzeptabel ist, können Sie cli und cgi unterschiedlich konfigurieren.
Wenn Sie also php-cli.ini und conf-cli.d in die Nähe des Beendens der Datei php.ini bringen, können Sie cli und cgi unterschiedlich konfigurieren (für cgi wären es php.ini und conf.d ). Fügen Sie xdebug.ini einfach nicht in conf-cli.d ein.
quelle
Wenn Sie Composer mit Brew unter OS X installieren, können Sie diesen Alias verwenden:
quelle
Meine schnelle Lösung für eine Macports-Installation mit mehreren PHP-Versionen bestand darin, diesen einfachen Shell-Wrapper für Composer zu schreiben:
Führen Sie dann alle Composer-Befehle wie folgt aus:
Nachteile:
Nicht elegant, aber einfach.
quelle
$1…$7
... vielleicht ist es$@
oder so, Sie müssen schauen.Erstellen eines Alias für Composer zum Deaktivieren von xdebug und zum Verhindern von Speicherfehlern:
Fügen Sie diese Zeile Ihrem ~ / .bash_profile hinzu
Starten Sie das Terminal neu, um den neuen Alias verfügbar zu machen.
quelle
Hier ist meine schnelle Lösung, um die Xdebug-Warnung in der PHP5-cli-Version zu entfernen. Ich habe die Unterstützung von Xdebug für PHP5-cli unter Ubuntu 14.04 entfernt.
Jetzt keine Xdebug-Warnung mehr auf PHP5-cli.
quelle
sudo phpdismod xdebug
wäre die bevorzugte Methode zu brutalrm