При запуске composer diagnose
появляется следующая ошибка:
Расширяется расширение xdebug, это может немного замедлить работу с Composer. Рекомендуется отключить его при использовании Composer.
Как отключить xdebug только при запуске Composer?
При запуске composer diagnose
появляется следующая ошибка:
Расширяется расширение xdebug, это может немного замедлить работу с Composer. Рекомендуется отключить его при использовании Composer.
Как отключить xdebug только при запуске Composer?
Обновление: проблема была исправлена в Composer 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" "[email protected]"
rm -f "$temporaryPath"
}
php_no_xdebug /usr/local/bin/composer.phar [email protected]
# 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 [email protected]
Эта команда отключит модуль PHP5 Xdebug для CLI (и, следовательно, композитор):
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, чтобы он мог загружать разные конфигурации в соответствии с целевым script. По крайней мере, не без дублирования файлов .ini...
Однако при запуске композитора с php вы можете добавить опции thoses:
php -n -d extension=needed_ext.so composer.phar
-n
скажет PHP игнорировать любой php.ini. Это предотвратит загрузку xdebug для этой самой команды.
-d
позволяют вам добавить любой желаемый вариант (например, активируйте need_ext.so). Вы можете использовать несколько опций -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=\1/'| \
# 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
Создав псевдоним, вы подавите сообщение об ошибке composer
xdebug
.
Просто добавьте эту строку в свой ~/.bash_aliases
в своей системе, и она будет работать безупречно.
alias composer="php -n /usr/local/bin/composer"
Перезагрузите оболочку, чтобы сделать новый псевдоним composer
доступным.
source ~/.bash_profile
ИСПОЛЬЗОВАНИЕ:
$ composer --version
Примечание:
Вам необязательно использовать какой-либо другой параметр.
В зависимости от вашей системы у вас может быть .bashrc
вместо .bash_profile
.
UPDATE:
Как @AlexanderKachkaev упоминает в комментариях, что не стоит добавлять memory_limit следующим образом, чтобы избежать сбоев в некоторых ситуациях:
alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
Я придумал ответ, который очень хорошо подходит для OSX и, вероятно, может быть адаптирован для любой версии PHP, которая загружает свои расширения, используя отдельные .ini файлы в "дополнительном ini dir":
#!/bin/sh
function php-no-xdebug {
local temporaryPath="$(mktemp -t php-no-debug)"
find /opt/local/etc/$1/php.ini /opt/local/var/db/$1/*.ini ! -name xdebug.ini | xargs cat > "$temporaryPath"
php -n -c "$temporaryPath" "${@:2}"
rm -f "$temporaryPath"
}
alias composer="php-no-xdebug php56 ~/bin/composer"
Обычно я создаю оболочку script для каждого проекта, так как каждый проект имеет другую версию PHP. Он находится в каталоге /bin/
рядом с composer.phar
и composer.json
, и я запускаю его как ./bin/composer
в моей директории проектов.
Он выглядит так (для php56)
#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
COMPOSER_DISABLE_XDEBUG_WARN=1 /opt/local/bin/php56 \
-d xdebug.remote_enable=0 -d xdebug.profiler_enable=0 \
-d xdebug.default_enable=0 $DIR/../composer.phar "[email protected]"
Параметры -d
эффективно отключают xdebug. Часть COMPOSER_DISABLE_XDEBUG_WARN=1
отключает проблемы композитора предупреждения.
Отключение расширения xdebug предпочтительнее (см. устранение неполадок композитора), но мне лично нравится более простой script.
Некоторые тайминги на моей машине: 2 Запустите с помощью xdebug и ini-enabled: 1m33
Запустите с xdebug, но ini-disabled: 0m19
Запуск без xdebug: 0m10
Если вы используете PHPStorm, последняя версия (2016.2) поставляется с функцией включения сценариев XDebug для CLI по требованию, что означает, что вы можете просто отключить XDebug глобально на вашей машине разработки. IDE позволит включить его на лету, когда это необходимо кодом внутри ваших проектов.
PhpStorm 2016.2 представляет режим Xdebug On Demand, где вы можете отключить Xdebug для вашей глобальной установки PHP, а PhpStorm будет включать ее только тогда, когда это необходимо - когда вы отлаживаете свои сценарии или когда вам нужны отчеты о покрытии кода.
Вам нужно изменить настройки PHP-интерпретаторов, чтобы включить путь к XDebug, как описано в связанной статье.
Мне кажется, что это идеальное решение, поскольку я обычно хочу XDebug, пока я нахожусь в среде IDE.
Однако у XDebug есть другие потенциальные возможности, когда вы находитесь в автономном режиме, например. расширенные дампы хранилищ в журналах ошибок, которые вы потеряете, отключив их глобально. Конечно, вы не должны включать XDebug в производство, поэтому это будет ограничено использованием таких случаев, как бета-тестирование или сценарии CLI автоматизированного тестирования в разработке.
Я придумал решение для установщика Composer для Windows - он должен работать для любой установки Composer, он просто в основном делает копию загруженного INI файла и комментирует расширение xdebug zend, а затем загружает этот файл конфигурации, когда он запускает композитор.
Я открыл проблему, чтобы увидеть, хотят ли они интегрировать это изменение:
https://github.com/composer/windows-setup/issues/58
Здесь вы можете найти мои инструкции и код.
Как отмечено в Joyce answer, этот вопрос больше не существует в последней версии Composer.
Документация Composer обновлена до отметить это. В нем подробно описано, как вы можете включить xdebug с Composer (если требуется).
Вы можете обновить свою версию Composer, используя self-update.
На моем Mac я должен был сделать: sudo php /opt/local/bin/composer self-update
Дополнительные сведения об этом в контексте установки PHP Homebrew можно найти в этой проблеме.
Здесь мой вклад, основанный на Homebrew, установил установку PHP на Mac OS X.
Это оболочка оболочки script, предназначенная для сохранения в качестве исполняемого файла в /usr/local/bin/composer
, с двоичным кодом 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 "[email protected]"
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
Обертка script:
script подключается к установке OS X/Homebrew для PHP 5.5. Пути должны быть скорректированы для работы с другими версиями PHP и других макетов директорий других операционных систем и менеджеров пакетов. Также обратите внимание, что некоторым версиям sed не нужен аргумент пустой строки, следующий за опцией -i
.
script прост, поскольку он работает непосредственно в основных файлах конфигурации PHP, однако это также является недостатком: Xdebug также будет отключен для любых скриптов, которые будут выполняться одновременно с этим script.
В моей среде разработки это приемлемый компромисс, учитывая, что Composer выполняется вручную и только изредка; однако вы не захотите использовать этот метод, если выполняете Composer как часть процесса автоматического развертывания.
В большинстве случаев вам не нужен xdebug в режиме CLI. Если это приемлемо для вас, вы можете настроить cli и cgi по-разному.
Итак, если вы делаете php-cli.ini и conf-cli.d рядом с файлом php.ini, чем вы можете настроить cli и cgi по-разному (для cgi it будет php.ini и conf.d). Просто не ставьте xdebug.ini в conf-cli.d.
Вместо того, чтобы путаться с временным включением или отключением PHP-модуля, если у вас могут быть параллельные процессы с использованием PHP (например, как часть конвейера CI), вы можете указать PHP указать другой каталог загрузки модуля.
В то время как это похоже на некоторые из упомянутых выше решений, это решает несколько краевых случаев, что очень полезно при использовании Jenkins или другим CI runner, который одновременно запускает тесты на одной машине.
Самый простой способ сделать это - использовать переменную окружения PHP_INI_SCAN_DIR
Использование этого в задаче script или сборки легко:
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.
Если вы устанавливаете композитор с помощью brew в OS X Вы можете использовать этот псевдоним:
alias composer="php -n $(cat $(which composer) | grep composer.phar | awk '{print $7}')"
Мое быстрое решение для установки 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 $1 $2 $3 $4 $5 $6 $7
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
Недостатки:
Не элегантный, но простой.
Создание псевдонима для composer для отключения xdebug и предотвращения ошибок памяти:
Добавьте эту строку в ваш ~/.bash_profile
alias composer='php -d xdebug.profiler_enable=0 -d memory_limit=-1 /usr/local/bin/composer'
Перезапустите терминал, чтобы сделать новый псевдоним доступным.
Вы проделали невероятную работу. Я обязательно раскопаю это и лично рекомендую своим друзьям. Я уверен, что они получат пользу от этого веб-сайта.
Счастливой Пасхи Картинки 2019 Счастливой Пасхи Котировки 2019
Вот мое быстрое решение избавиться от предупреждения Xdebug в версии PHP5-cli. Я удалил поддержку Xdebug для PHP5-cli на Ubuntu 14.04.
cd/etc/php5/cli/conf.d/
sudo rm 20-xdebug.ini
Теперь больше нет предупреждения Xdebug на PHP5-cli.