Новое в PHP. Работа над проектом PHP и поддержка xdebug для отладки моих php-приложений. У производственного сервера нет xdebug, потому что он обрабатывается другой командой. На моей локальной машине, когда я запускаю композитора, это дает мне предупреждение
You are running composer with xdebug enabled. This has a major impact on runtime performance.
Я не хочу отключать xdebug при разработке. Просто хотел подтвердить, что запуск xdebug в среде dev не должен влиять на компоновщик, устанавливающий библиотеки / производительность приложения на производственном сервере.
Я не хочу отключать xdebug при разработке. Просто хотел подтвердить, что запуск xdebug в среде dev не должен влиять на компоновщик, устанавливающий библиотеки / производительность приложения на производственном сервере.
Существует огромное влияние просто загрузки Xdebug. Он замедляет работу Composer на 3x или 4x, даже если функция профилирования не включена.
Другими словами: xdebug неоценим для отладки, но увеличивает используемую память и время обработки Composer.
Как отключить Xdebug для запуска Composer?
Мое предложение – написать вспомогательный помощник для запуска Composer.
Помощник – это скрипт bash или batch, вызывающий PHP с помощью настраиваемого php.ini
, специально настроенного для Composer. Позволяет называть его: php.ini-composer
.
Вы можете скопировать текущий php.ini
и настроить его для запуска Composer, удалив xdebug или закомментировав его, например ;zend_extension = "/path/to/my/xdebug.so"
.
Пока вы на нем: установка memory_limit=-1
тоже полезно.
Полная команда выглядит так в Windows: php.exe -c php.ini-composer composer.phar %*
Просто клонируйте идею для сценария bash.
И вы можете найти полный ответ на свой вопрос в FAQ для Composer.
https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer
Он был добавлен / обновлен всего несколько часов назад.
Здесь также упоминаются некоторые альтернативы (вместо использования отдельного ini-файла).
Как и в случае с веб-скриптами, ожидайте, что скрипты CLI будут работать медленнее.
Если вам нужна добавленная производительность во время выполнения, вы можете отключить XDebug только для CLI. Задайте свою установку PHP так, чтобы она использовала разные INI-файлы для CLI и вашего сервера, как это предлагает этот ответ.
Создайте файл с именем php-composer.ini
где php-composer.ini
нибудь со следующим содержимым (минимальная конфигурация php для композитора):
extension_dir = "D:/php/ext/" ;according to your system extension=php_openssl.dll memory_limit=-1 ;optional
Теперь создайте файл с именем cmz.bat
со следующим содержимым. (соответственно, пути редактирования)
@ECHO OFF php -c "D:\php-composer.ini" "C:\ProgramData\ComposerSetup\bin\composer.phar" %*
добавьте этот файл в свой системный путь или в корневой каталог проекта. Теперь используйте cmz
вместо composer
и вы не увидите этого сообщения, и, надеюсь, скорость композитора будет увеличена.
note Примечание. Некоторые пакеты нуждаются в конкретных расширениях php. вам нужно добавить их в файл php-compsoer.ini
или добавить параметр --ignore-platform-reqs
в файл cmz.bat
При новой загрузке Symfony 3.1 и PHP 7.0 вы можете запустить следующее (отредактировав его, чтобы включить путь к вашему файлу composer.phar):
php -n -d extension=json.so -d extension=phar.so -d extension=pdo.so -d extension=ctype.so /path/to/composer update
Если у вас есть дополнительные поставщики для вашего файла composer.json
, вы можете обнаружить, что они зависят от расширения, поэтому вам нужно включить его, добавив в список -d extension=name_of_extension.so
.
Что здесь происходит, так это флаг -n
с настройками по умолчанию PHP – он не загружает любые файлы конфигурации PHP в PHP, поэтому XDebug никогда не загружается. Затем каждый из флагов -d
позволяет динамически устанавливать значения конфигурации, поэтому вы можете включать расширения.
Современные версии Composer могут работать, если XDebug включен по умолчанию для CLI SAPI. Он запускает новый процесс PHP с отключенным расширением XDebug в случае его обнаружения.
Вы можете отключить это поведение, установив следующую переменную среды:
COMPOSER_ALLOW_XDEBUG=1
Обнаружено это в документации: https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer