Cuando lo ejecuto composer diagnose
, aparece el siguiente error:
La extensión xdebug está cargada, esto puede ralentizar un poco a Composer. Se recomienda deshabilitarlo al usar Composer.
¿Cómo puedo desactivar xdebug solo cuando estoy ejecutando Composer?
php
composer-php
xdebug
Greg0ire
fuente
fuente
bin/bash
lugar de/bin/sh
, ya que a este último no le gustó lafunction
palabra clave (Ubuntu 14.04 LTS).composer self-update
Este comando deshabilitará el módulo PHP5 Xdebug para CLI (y por lo tanto el compositor):
Elimina el enlace simbólico xdebug.ini de
/etc/php5/cli/conf.d/
Esto se sugirió en http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/
Tenga en cuenta que para Ubuntu 16.04 probablemente necesite ejecutarlo así:
fuente
alias xdebug-on='sudo php5enmod -s cli xdebug'
yalias xdebug-off='sudo php5dismod -s cli xdebug'
, por lo tanto, ahora es fácil habilitarxdebug-on
y deshabilitarxdebug-off
xdebug.No creo que haya una opción para configurar PHP para que pueda cargar diferentes configuraciones de acuerdo con el script de destino. Al menos, no sin duplicar archivos .ini ...
Sin embargo, puede agregar estas opciones al ejecutar composer con php:
-n
le dirá a PHP que ignore cualquier php.ini. Esto evitará que xdebug se cargue para este mismo comando.-d
options le permite agregar cualquier opción que desee (por ejemplo, active required_ext.so). Puede utilizar varias-d
opciones. Por supuesto, esto es opcional, es posible que no lo necesite.Luego puede crear un alias, para volverlo azucarado nuevamente.
Una solución típica (porque el compositor necesita json):
greg0ire> mi solución, basada en eso:
Se ve feo (intenté y no pude hacer eso con xargs), pero funciona ... Sin embargo, tuve que deshabilitar algunas extensiones, de lo contrario, recibo las siguientes advertencias:
fuente
-n
ayer y tuve un problema porque me faltaba laphar
extensión. Intentaré agregar más y más extensión hasta que funcione, creo que esta es una buena solución. Según el alias, ya tengo algunos alias de zsh que no mantengo. Tal vez intente reemplazar el binario con un script bash, o ver si puedo configurar los alias.composer.json
, por ejemplo, "ext-ldap": "*", o simplemente dependiendo de lo que se necesita para que las tareas posteriores a la instalación se ejecuten correctamente. … Si tan solo hubiera una manera dephp -m
diagnose
, y como estoy construyendo contenedores de Docker de desarrollo para mi equipo, la mejora de velocidad más pequeña podría beneficiar a todos ellosAl crear un alias, suprimirá ese
composer
xdebug
mensaje de error.Simplemente agregue esta línea a
~/.bash_aliases
su sistema y debería funcionar sin problemas.Vuelva a cargar el shell para que el nuevo alias
composer
esté disponible.USO:
NOTA:
No es necesario que utilice ningún otro parámetro.
Dependiendo de su sistema, es posible que tenga un
.bashrc
archivo.bash_profile
.ACTUALIZAR:
Como @AlexanderKachkaev menciona en los comentarios, no vale la pena agregar memory_limit de la siguiente manera para evitar fallar en algunas situaciones:
fuente
-n
opción deshabilita laPhar
extensión, por lo que es posible que no se ejecute desdecomposer.phar
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
Se me ocurrió una respuesta que funciona bastante bien para OSX, y probablemente podría adaptarse para cualquier versión de PHP que cargue sus extensiones usando archivos .ini individuales en el "directorio ini adicional":
fuente
Normalmente creo un script de shell por proyecto, ya que cada proyecto tiene otra versión de PHP. Está en un
/bin/
directorio al ladocomposer.phar
ycomposer.json
Y corro como./bin/composer
en mi directorio del proyecto.Se ve así (para php56)
Las
-d
opciones desactivan efectivamente xdebug. LaCOMPOSER_DISABLE_XDEBUG_WARN=1
parte deshabilita los problemas del compositor de advertencia.Se prefiere deshabilitar la extensión xdebug (ver solución de problemas del compositor ), pero personalmente me gusta el script más simple.
Algunos tiempos en mi máquina: 2 Ejecutar con xdebug e ini habilitado: 1m33
Ejecutar con xdebug pero ini-disabled: 0m19
Ejecutar sin xdebug: 0m10
fuente
COMPOSER_DISABLE_XDEBUG_WARN=1
: si recibe una advertencia, solo significa que su scrit no funciona. Definirxdebug.remote_autostart
parece inútil si la depuración remota está desactivada.xdebug.remote_autostart
. Acerca de la eficacia de los scripts: Composer comprueba si la extensión xdebug está cargada, no si realmente está haciendo algo, mira el código aquí . Las opciones ini funcionan bien en scripts php "normales", pero de nuevo: no he hecho pruebas de rendimiento ...Si usa PHPStorm, la última versión (2016.2) viene con una función para habilitar XDebug para scripts CLI bajo demanda, lo que significa que simplemente puede desactivar XDebug globalmente en su máquina de desarrollo. El IDE lo habilitará sobre la marcha cuando el código dentro de sus proyectos lo necesite.
https://blog.jetbrains.com/phpstorm/2016/06/xdebug-on-demand-for-cli-php-scripts-in-phpstorm-2016-2-eap/
Necesita editar sus preferencias de Intérpretes PHP para incluir la ruta a XDebug, como se describe en el artículo vinculado.
Para mí, esta parece la solución perfecta, ya que normalmente solo quiero XDebug mientras estoy en el IDE.
Sin embargo, XDebug tiene otros usos potenciales cuando está "fuera de línea", por ejemplo, volcados de pila extendidos en registros de error, que perdería si lo apagara globalmente. Por supuesto, no debería tener XDebug habilitado en producción, por lo que esto se limitaría a casos de uso como pruebas beta o scripts CLI de prueba automatizada en desarrollo.
fuente
En lugar de confundirse con la habilitación o deshabilitación temporal del módulo PHP, cuando es posible que tenga procesos concurrentes usando PHP (por ejemplo, como parte de una canalización de CI), puede decirle a PHP que apunte a un directorio de carga de módulo diferente.
Si bien esto es similar a algunas de las soluciones mencionadas anteriormente, esto resuelve algunos casos extremos, lo cual es muy útil cuando lo usa Jenkins u otro corredor de CI que ejecuta pruebas en la misma máquina al mismo tiempo.
La forma más sencilla de hacer esto es usar la variable de entorno
PHP_INI_SCAN_DIR
Usar esto en un script o en una tarea de compilación es fácil:
export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug php composer install
Por supuesto, primero querrá preparar /etc/php.d.noxdebug, haciendo algo como:
mkdir /etc/php.d.noxdebug cp /etc/php.d/* /etc/php.d.noxdebug rm /etc/php.d.noxdebug/xdebug.ini
Esto significa que tiene un entorno similar al antiguo entorno php, con solo un módulo faltante. Lo que significa que no necesita preocuparse por la necesidad de cargar los módulos phar / json como lo haría con la solución php -n.
fuente
Se me ocurrió una solución para el instalador de Composer basado en Windows: debería funcionar para cualquier instalación de Composer, básicamente hace una copia del archivo INI cargado y comenta la extensión xdebug zend, luego carga ese archivo de configuración cuando ejecuta Composer .
Abrí un problema para ver si les gustaría integrar este cambio:
https://github.com/composer/windows-setup/issues/58
Puede encontrar mis instrucciones y código allí.
fuente
Como se señaló en la respuesta de Joyce , este problema ya no existe en la última versión de Composer.
La documentación de Composer se ha actualizado para tener en cuenta esto . Detalla cómo puede habilitar xdebug con Composer (si es necesario).
Puede actualizar su versión de Composer utilizando la actualización automática .
En mi Mac tuve que hacer:
sudo php /opt/local/bin/composer self-update
En este número se pueden encontrar más detalles sobre esto en el contexto de una instalación PHP de Homebrew .
fuente
Manipulación directa de la configuración de PHP
Aquí está mi contribución basada en una instalación de PHP instalada por Homebrew en Mac OS X.
Es un contenedor de script de shell, diseñado para guardarse como un archivo ejecutable en
/usr/local/bin/composer
, con el binario de Composer en/usr/local/bin/composer.phar
:teoría de operación
El script de envoltura:
El script está acoplado a una instalación OS X / Homebrew de PHP 5.5. Las rutas deben ajustarse para que funcionen con otras versiones de PHP y los diseños de directorio de otros sistemas operativos y administradores de paquetes. Tenga en cuenta también que algunas versiones de sed no necesitan el argumento de cadena vacía que sigue a la
-i
opción.Utilizador de advertencias
El script es sencillo, ya que funciona directamente en los archivos principales de configuración de PHP, sin embargo , esto también es un inconveniente: Xdebug también se desactivará para cualquier script que se ejecute simultáneamente con este script.
En mi entorno de desarrollo, esta es una compensación aceptable, dado que Composer se ejecuta manualmente y solo ocasionalmente; sin embargo, es posible que no desee utilizar esta técnica si ejecuta Composer como parte de un proceso de implementación automatizado.
fuente
En la mayoría de los casos, no necesita xdebug en el modo CLI. Si esto es aceptable para usted, puede configurar cli y cgi de manera diferente.
Entonces, si hace php-cli.ini y conf-cli.d cerca de salir del archivo php.ini, puede configurar cli y cgi de manera diferente (para cgi serían php.ini y conf.d ). Simplemente no ponga xdebug.ini en conf-cli.d.
fuente
Si instala Composer usando brew en OS X, puede usar este alias:
fuente
Mi solución rápida para una instalación de macports, con múltiples versiones de PHP, fue escribir este sencillo contenedor de shell para Composer:
Luego ejecute cualquier comando del compositor como este:
Inconvenientes:
No elegante, pero simple.
fuente
$1…$7
… tal vez sea$@
o algo así, tendrás que buscar.Creación de un alias para que el compositor deshabilite xdebug y evite errores de memoria:
Agregue esta línea a su ~ / .bash_profile
Reinicie la terminal para que el nuevo alias esté disponible.
fuente
Aquí está mi solución rápida para deshacerme de la advertencia Xdebug en la versión PHP5-cli. He eliminado el soporte de Xdebug para PHP5-cli en Ubuntu 14.04.
Ahora no más advertencias de Xdebug en PHP5-cli.
fuente
sudo phpdismod xdebug
sería el método preferido para brutalizarrm