Ao executar composer diagnose
, recebo o seguinte erro:
A extensão xdebug está carregada, o que pode tornar o Composer um pouco mais lento. Desativá-lo ao usar o Composer é recomendado.
Como posso desabilitar o xdebug apenas quando estou executando o Composer?
php
composer-php
xdebug
greg0ire
fonte
fonte
bin/bash
vez de/bin/sh
, pois este último não gostou dafunction
palavra - chave (Ubuntu 14.04 LTS).composer self-update
Este comando desabilitará o módulo PHP5 Xdebug para CLI (e, portanto, composer):
Ele remove o link simbólico xdebug.ini de
/etc/php5/cli/conf.d/
Isso foi sugerido em http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/
Observe que para o Ubuntu 16.04 você provavelmente precisará executá-lo desta forma:
fonte
alias xdebug-on='sudo php5enmod -s cli xdebug'
ealias xdebug-off='sudo php5dismod -s cli xdebug'
, então agora é fácil habilitarxdebug-on
e desabilitar oxdebug-off
xdebug.Não acho que haja uma opção para configurar o PHP para que ele possa carregar configurações diferentes de acordo com o script de destino. Pelo menos, não sem duplicar arquivos .ini ...
No entanto, você pode adicionar essas opções ao executar o composer com php:
-n
irá dizer ao PHP para ignorar qualquer php.ini. Isso evitará que o xdebug carregue para este comando.-d
options permite que você adicione qualquer opção que desejar (por exemplo, ative needed_ext.so). Você pode usar várias-d
opções. Claro, isso é opcional, você pode não precisar dele.Depois, você pode criar um alias para torná-lo adocicado novamente.
Uma solução típica (porque o compositor precisa do json):
greg0ire> minha solução, com base nisso:
Parece feio (tentei e não consegui fazer isso com xargs), mas funciona ... Tive que desabilitar algumas extensões, caso contrário, recebo os seguintes avisos:
fonte
-n
ontem e tive um problema porque estava faltando aphar
extensão. Vou tentar adicionar mais e mais extensões até funcionar, acho que é uma boa solução. De acordo com o alias, já tenho alguns aliases zsh que não mantenho. Talvez eu tente substituir o binário por um script bash ou ver se consigo configurar os aliases.composer.json
, por exemplo "ext-ldap": "*", ou simplesmente dependendo do que é necessário para fazer as tarefas pós-instalação funcionarem corretamente … Se ao menos houvesse uma maneira de colocar uma extensão na lista negra…php -m
diagnose
e, como estou construindo contêineres docker de desenvolvimento para minha equipe, a menor melhoria na velocidade poderia beneficiar todos elesAo criar um alias, você suprimirá essa
composer
xdebug
mensagem de erro.Basta adicionar essa linha ao
~/.bash_aliases
seu sistema e ela deve funcionar perfeitamente.Recarregue o shell para disponibilizar o novo alias
composer
.USO:
NOTA:
Você não precisa necessariamente usar nenhum outro parâmetro.
Dependendo do seu sistema, você pode ter um em
.bashrc
vez de.bash_profile
.ATUALIZAR:
Como @AlexanderKachkaev mencionou nos comentários, não vale a pena adicionar o memory_limit da seguinte forma para evitar travar em algumas situações:
fonte
-n
opção desativa aPhar
extensão para que ele possa falhar ao executar a partir decomposer.phar
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
Eu encontrei uma resposta que funciona muito bem para OSX e provavelmente poderia ser adaptada para qualquer versão do PHP que carregue suas extensões usando arquivos .ini individuais no "diretório ini adicional":
fonte
Normalmente crio um script de shell por projeto, já que cada projeto tem outra versão do PHP. Ele está em um
/bin/
diretório próximo acomposer.phar
ecomposer.json
e eu o executo como./bin/composer
no diretório do meu projeto.É assim (para php56)
As
-d
opções desabilitam efetivamente o xdebug. ACOMPOSER_DISABLE_XDEBUG_WARN=1
parte desativa os problemas do compositor de aviso.É preferível desativar a extensão xdebug (consulte a solução de problemas do compositor ), mas eu pessoalmente gosto do script mais simples.
Alguns intervalos na minha máquina: 2 Executar com xdebug e ini habilitado: 1m33
Executar com xdebug mas ini-disabled: 0m19
Executar sem xdebug: 0m10
fonte
COMPOSER_DISABLE_XDEBUG_WARN=1
: se você receber um aviso, isso significa apenas que seu scrit não funciona. Definirxdebug.remote_autostart
parece inútil se a depuração remota estiver desativada.xdebug.remote_autostart
. Sobre a eficácia dos scripts: o Composer verifica se a extensão xdebug está carregada, e não se está realmente fazendo algo, olhe o código aqui . As opções ini funcionam bem em scripts php "normais", mas novamente: eu não fiz testes de desempenho ...Se você usar o PHPStorm, a versão mais recente (2016.2) vem com um recurso para habilitar o XDebug para scripts CLI sob demanda, o que significa que você pode simplesmente desligar o XDebug globalmente em sua máquina de desenvolvimento. O IDE o habilitará rapidamente quando for necessário para o código dentro de seus projetos.
https://blog.jetbrains.com/phpstorm/2016/06/xdebug-on-demand-for-cli-php-scripts-in-phpstorm-2016-2-eap/
Você precisa editar suas preferências de intérpretes PHP para incluir o caminho para o XDebug, conforme descrito no artigo vinculado.
Para mim, esta parece ser a solução perfeita, já que normalmente só quero o XDebug enquanto estou no IDE.
No entanto, o XDebug tem outros usos potenciais quando você está "offline", por exemplo, despejos de pilha estendidos em logs de erro, que você perderia desligando-o globalmente. É claro que você não deve ter o XDebug habilitado na produção, portanto, isso seria limitado a casos de uso como testes beta ou scripts CLI de teste automatizado em desenvolvimento.
fonte
Em vez de se confundir com a ativação ou desativação temporária do módulo PHP, quando você pode ter processos simultâneos usando PHP (por exemplo, como parte de um pipeline de CI), você pode dizer ao PHP para apontar para um diretório de carregamento de módulo diferente.
Embora seja semelhante a algumas das soluções mencionadas acima, isso resolve alguns casos extremos, o que é muito útil quando usado pelo Jenkins ou outro executor de CI que executa testes na mesma máquina simultaneamente.
A maneira mais fácil de fazer isso é usar a variável de ambiente
PHP_INI_SCAN_DIR
Usar isso em um script ou tarefa de construção é fácil:
export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug php composer install
Claro que você gostaria de preparar /etc/php.d.noxdebug primeiro, fazendo algo como:
mkdir /etc/php.d.noxdebug cp /etc/php.d/* /etc/php.d.noxdebug rm /etc/php.d.noxdebug/xdebug.ini
Isso significa que você tem um ambiente semelhante ao antigo ambiente php, com apenas um módulo faltando. Significa que você não precisa se preocupar em carregar os módulos phar / json como faria com a solução php -n.
fonte
Eu vim com uma solução para o instalador do Composer baseado no Windows - ele deve funcionar para qualquer instalação do Composer, ele basicamente faz uma cópia do arquivo INI carregado e comenta a extensão zend do xdebug, então carrega o arquivo de configuração quando executa o composer .
Abri um problema para ver se eles gostariam de integrar essa mudança:
https://github.com/composer/windows-setup/issues/58
Você pode encontrar minhas instruções e código lá.
fonte
Conforme observado na resposta de Joyce , esse problema não existe mais na versão mais recente do Composer.
A documentação do Composer foi atualizada para observar isso . Ele detalha como você pode habilitar o xdebug com o Composer (se necessário).
Você pode atualizar sua versão do Composer utilizando a atualização automática .
No meu Mac, tive que fazer:
sudo php /opt/local/bin/composer self-update
Mais detalhes sobre isso no contexto de uma instalação do Homebrew PHP podem ser encontrados nesta edição .
fonte
Manipulação direta da configuração do PHP
Aqui está minha contribuição com base em uma instalação do PHP instalado no Homebrew no Mac OS X.
É um wrapper de script de shell, projetado para ser salvo como um arquivo executável em
/usr/local/bin/composer
, com o binário do Composer em/usr/local/bin/composer.phar
:Teoria de Operação
O script de wrapper:
O script é acoplado a uma instalação OS X / Homebrew do PHP 5.5. Os caminhos devem ser ajustados para funcionar com outras versões do PHP e layouts de diretório de outros sistemas operacionais e gerenciadores de pacotes. Observe também que algumas versões do sed não precisam do argumento de string vazia após o
-i
opção.Caveat Utilitor
O script é simples, pois funciona diretamente nos principais arquivos de configuração do PHP, no entanto isso também é uma desvantagem: o Xdebug também será desabilitado para quaisquer scripts que sejam executados simultaneamente com este script.
Em meu ambiente de desenvolvimento, essa é uma compensação aceitável, visto que o Composer é executado manualmente e apenas ocasionalmente; entretanto, você pode não querer usar esta técnica se estiver executando o Composer como parte de um processo de implantação automatizado.
fonte
Na maioria dos casos, você não precisa do xdebug no modo CLI. Se isso for aceitável para você, você pode configurar cli e cgi de forma diferente.
Portanto, se você criar php-cli.ini e conf-cli.d perto de sair do arquivo php.ini, poderá configurar cli e cgi de forma diferente (para cgi seriam php.ini e conf.d ). Apenas não coloque xdebug.ini em conf-cli.d.
fonte
Se você instalar o composer usando o brew no OS X, você pode usar este alias:
fonte
Minha solução rápida para uma instalação macports, com várias versões do PHP, foi escrever este invólucro de shell simples para o Composer:
Em seguida, execute quaisquer comandos do compositor como:
Desvantagens:
Não é elegante, mas simples.
fonte
$1…$7
... talvez seja$@
ou algo parecido, você terá que procurar.Criação de um alias para o composer para desativar o xdebug e evitar erros de memória:
Adicione esta linha ao seu ~ / .bash_profile
Reinicie o terminal para disponibilizar o novo alias.
fonte
Aqui está minha solução rápida para me livrar do aviso do Xdebug na versão PHP5-cli. Removi o suporte do Xdebug para PHP5-cli no Ubuntu 14.04.
Agora não há mais aviso Xdebug no PHP5-cli.
fonte
sudo phpdismod xdebug
seria o método preferido para bruterm