Подтвердить что ты не робот

Предупреждение PHP-разработчика xdebug

Новое для PHP. Работа над проектом PHP и поддержка xdebug для отладки моих php-приложений. У производственного сервера нет xdebug, потому что он обрабатывается другой командой. На моей локальной машине, когда я запускаю композитор, я предупреждаю, говоря

You are running composer with xdebug enabled. This has a major impact on 
runtime performance.

Я не хочу отключать xdebug при разработке. Просто хотел подтвердить, что запуск xdebug в среде dev должен иметь бездействия для компоновщика, устанавливающего библиотеки/производительность приложения на производственном сервере.

4b9b3361

Ответ 1

Я не хочу отключать xdebug при разработке. Просто хотел подтвердить, что запуск xdebug в среде dev должен иметь бездействия для компоновщика, устанавливающего библиотеки/производительность приложения на рабочем сервере.

Существует огромное влияние просто загрузки Xdebug. Он замедляет работу Composer на 3x или 4x, даже если функция профилирования не включена.

Другими словами: xdebug неоценим для отладки, но увеличивает используемую память и время обработки Composer.


Как отключить Xdebug для запуска Composer?

Мое предложение - написать небольшой помощник вызова для запуска Composer.

Помощник представляет собой bash или пакетный script вызов 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 script.


И вы можете найти полный ответ на свой вопрос в FAQ для Composer.

https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer

Он был добавлен/обновлен всего несколько часов назад.


Некоторые альтернативы (вместо использования отдельного ini файла) также упоминаются здесь.

Ответ 2

Как и в случае с веб-сценариями, ожидайте, что скрипты CLI также будут работать медленнее.

Если вам нужна добавленная производительность во время выполнения, вы можете отключить XDebug только для CLI. Установите свою установку PHP так, чтобы она использовала различные INI файлы для CLI и вашего сервера как предлагает этот ответ.

Ответ 3

Современные версии Composer могут работать, если XDebug включен по умолчанию для CLI SAPI. Он запускает новый процесс PHP с отключенным расширением XDebug, если он обнаружен.

Вы можете отключить это поведение, установив следующую переменную среды:

COMPOSER_ALLOW_XDEBUG=1

Обнаружено это в документации: https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer

Ответ 4

Создайте файл с именем 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

Ответ 5

При новой загрузке 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 - он не загружает файлы конфигурации ini PHP, поэтому XDebug никогда не загружается. Затем каждый из флагов -d позволяет динамически устанавливать значения конфигурации, поэтому вы можете включать расширения.

Ответ 6

Чтобы это исправить, до PHP 7 люди предлагали закомментировать расширение из вашего файла php.ini. Однако в PHP 7 их больше нет.

Вместо этого мы используем команду phpdismod.

sudo phpdismod -s cli xdebug

Флаг -s говорит ему отключить Xdebug для CLI SAPI (/etc/php/7.0/cli), а не для FPM.

И просто так, предупреждающее сообщение должно исчезнуть. Нет необходимости перезапускать PHP.

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