Отключение xdebug при запуске composer



при работе composer diagnose, Я получаю следующую ошибку :




расширение xdebug загружается, это может немного замедлить композитора.
Рекомендуется отключить его при использовании Composer.




Как я могу отключить xdebug только тогда, когда я запускаю Composer?

780   15  

15 ответов:

обновление : проблема была исправлена в композитор 1.3. Обновите composer до последней версии, выполнив composer self-update, вместо того, чтобы попробовать следующий обходной путь.


вот моя модификация кода @ezzatron. Я обновил скрипт для обнаружения ini-файлов из вывода phpinfo.

#!/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 $@

эта команда отключит модуль PHP5 Xdebug для CLI (и, следовательно, composer):

sudo php5dismod -s cli xdebug

снимает xdebug.ini символическая ссылка от /etc/php5/cli/conf.d/

Это было предложено на http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/

обратите внимание, что для Ubuntu 16.04 вам, вероятно, нужно запустить его следующим образом:

sudo phpdismod -s cli xdebug

Я не думаю, что есть возможность настроить PHP, чтобы он мог загружать разные конфигурации в соответствии с целевым сценарием. По крайней мере, не без дублирования .ini-файл...

тем не менее, вы можете добавить опции thoses при запуске composer с php:

php -n -d extension=needed_ext.so composer.phar

-n будет сказать PHP, чтобы игнорировать любой PHP.Ини. Это предотвратит загрузку xdebug для этой самой команды.

-d options позволяет добавить любую опцию, которую вы хотите (например, активировать needed_ext.так). Вы можете использовать несколько -d параметры. Конечно, это необязательно, вам это может не понадобиться.

затем вы можете создать псевдоним, чтобы сделать его сладким снова.

типичное решение (потому что композитору нужен json):

php -n -d extension=json.so composer.phar

greg0ire > мое решение, основанное на этом:

#!/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=/'| \

    # 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

это выглядит некрасиво (я пытался и не смог сделать это с xargs), но работает... мне пришлось отключить некоторые расширения, хотя, в противном случае я получаю следующее предупреждения:

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

создав псевдоним, вы подавите это composerxdebug сообщение об ошибке.

просто добавьте эту строку в ваш ~/.bash_aliases в вашей системе, и он должен работать безупречно.

alias composer="php -n /usr/local/bin/composer"

перезагрузите оболочку, чтобы создать новый псевдоним composer доступен.

source ~/.bash_profile

использование:

$ composer --version

Примечание:
Вам не обязательно использовать какой-либо другой параметр.
В зависимости от вашей системы у вас может быть .bashrc вместо .bash_profile.

обновление:

как упоминает @AlexanderKachkaev в комментариях, ничего не стоит добавить memory_limit следующим образом, чтобы избежать сбоев в некоторых ситуациях:

alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"

Я придумал ответ, который работает довольно хорошо для OSX, и, вероятно, может быть адаптирован для любой версии PHP, которая загружает свои расширения с помощью individual .ini-файлов в разделе "Дополнительные Ини реж":

#!/bin/sh

function php-no-xdebug {
    local temporaryPath="$(mktemp -t php-no-debug)"

    find /opt/local/etc//php.ini /opt/local/var/db//*.ini ! -name xdebug.ini | xargs cat > "$temporaryPath"
    php -n -c "$temporaryPath" "${@:2}"
    rm -f "$temporaryPath"
}

alias composer="php-no-xdebug php56 ~/bin/composer"

Я обычно создаю сценарий оболочки для каждого проекта, так как каждый проект имеет другую версию PHP. Это в

Если вы используете PHPStorm, последний выпуск (2016.2) поставляется с функцией включения xdebug для сценариев CLI по требованию, что означает, что вы можете просто отключить XDebug глобально на своей машине разработки. IDE включит его на лету, когда это необходимо для кода внутри ваших проектов.

https://blog.jetbrains.com/phpstorm/2016/06/xdebug-on-demand-for-cli-php-scripts-in-phpstorm-2016-2-eap/

PhpStorm 2016.2 представляет Xdebug по требованию режим, в котором вы можете отключить Xdebug для своей глобальной установки PHP, а PhpStorm включит его только тогда, когда это необходимо - когда вы отлаживаете свои сценарии или когда вам нужны отчеты о покрытии кода.

вам нужно изменить настройки интерпретаторов PHP, чтобы включить путь к XDebug, как описано в связанной статье.

для меня это кажется идеальным решением, так как я обычно хочу только XDebug, пока я нахожусь в IDE.

однако XDebug имеет другие потенциальное использование, когда вы находитесь "в автономном режиме", например, расширенные дампы стека в журналах ошибок, которые вы потеряете, отключив его глобально. Конечно, вы не должны иметь XDebug включен на производстве, так что это будет ограничено случаями использования, как бета-тестирование или автоматизированное тестирование CLI скриптов в разработке.

Я придумал решение для установщика Composer на базе Windows - он должен работать для любой установки Composer, он просто в основном делает копию загруженного файла INI и комментирует расширение xdebug zend, а затем загружает этот файл конфигурации при запуске composer.

Я открыл вопрос, чтобы увидеть, если они хотели бы интегрировать эти изменения:

https://github.com/composer/windows-setup/issues/58

вы можете найти мои инструкции и код там.

Как отметил в Джойс, эта проблема больше не существует в последней версии Composer.

документация композитора была обновлена до обратите внимание на это. В нем подробно описано, как вы можете включить xdebug с Composer (если требуется).

вы можете обновить свою версию Composer, используя С автообновлением.

на моем Mac, я должен был сделать: sudo php /opt/local/bin/composer self-update

более подробная информация об этом в контексте доморощенного PHP install можно найти в этот вопрос.

прямая манипуляция PHP config

вот мой вклад, основанный на A доморощенного - установлена установка PHP на Mac OS X.

это оболочка сценария оболочки, предназначенная для сохранения в виде исполняемого файла в /usr/local/bin/composer, с двоичным кодом композитора в /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

принцип работы

скрипт:

  • использует sed чтобы временно изменить файл конфигурации, отключение Xdebug (строка 2)
  • выполняет Composer, проходя через args к команде (строка 3)
  • использует sed для восстановления файла конфигурации, повторно включив Xdebug (строка 4)

сценарий в сочетании с ОС Х/доморощенного установка версии PHP 5.5. Пути должны быть скорректированы для работы с другими версиями PHP и макетами каталогов других операционных систем и менеджеров пакетов. Обратите внимание также, что некоторые версии sed не нуждаются в следующем аргументе пустой строки элемент .

Нюанс Utilitor

скрипт прост в том, что он работает непосредственно на основных конфигурационных файлах PHP, это также недостаток: Xdebug также будет отключен для любых сценариев, которые выполняются одновременно с этим сценарием.

в моей среде разработки это приемлемый компромисс, учитывая, что Composer выполняется вручную и только иногда; однако вы можете не использовать этот метод используется при выполнении Composer в рамках процесса автоматического развертывания.

в большинстве случаев вам не нужен xdebug в режиме CLI. Если это приемлемо для Вас, чем вы можете настроить cli и cgi по-разному.

Так что если вы делаете php-cli.ini и conf-cli.d рядом с выходом php.ini-файл, чем вы можете настроить cli и cgi по-разному (для cgi это будет php.ini и conf.d). Только не ставьте xdebug.ini в conf-cli.d.

вместо того, чтобы путаться с временным включением или отключением модуля PHP, когда у вас могут быть параллельные процессы, использующие PHP (например, как часть конвейера CI), вы можете сказать PHP указать на другой каталог загрузки модуля.

хотя это похоже на некоторые из решений, упомянутых выше, это решает несколько крайних случаев, что очень полезно при использовании Дженкинса или другого CI runner, который одновременно выполняет тесты на одной и той же машине.

В простой способ сделать это-использовать переменную среды PHP_INI_SCAN_DIR

использование этого в скрипте или задаче сборки легко:

export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug php composer install

конечно, вы хотели бы подготовить /etc / php.d. noxdebug сначала, делая что-то вроде:

mkdir /etc/php.d.noxdebug cp /etc/php.d/* /etc/php.d.noxdebug rm /etc/php.d.noxdebug/xdebug.ini

Это означает, что у вас есть среда, похожая на старую среду php, только один модуль отсутствует. Это означает, что вам не нужно беспокоиться о необходимости загружать модули phar/json, как это было бы с решение php-n.

Если вы устанавливаете composer с помощью brew на OS X Вы можете использовать этот псевдоним:

alias composer="php -n $(cat $(which composer) | grep composer.phar | awk '{print }')"

мое быстрое решение для установки macports с несколькими версиями PHP состояло в том, чтобы написать эту простую оболочку оболочки для Composer:

/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       
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

затем выполните любые команды композитора следующим образом:

sudo composer-nodebug.sh update

недостатки:

  • требуется sudo (если вы не chmod файлы INI)
  • если вы убьете его на полпути, файлы INI будут изменены
  • потребуется добавить будущие версии PHP.
  • в то время как он работает с другими процессами PHP затронуты

Не элегантный, но простой.

вот мое быстрое решение, чтобы избавиться от предупреждения Xdebug на версии PHP5-cli. Я удалил поддержку Xdebug для PHP5-cli на Ubuntu 14.04.

cd/etc/php5/cli / conf.d/

sudo rm 20-xdebug.ini

теперь больше нет предупреждения Xdebug на PHP5-cli.

Comments

    Ничего не найдено.