Страницы моего сайта без xdebug грузятя за несколько миллисекунд, а с xdebug за 5 секунд - минимум. А бывает и дольше. Мне не всегда нужен xdebug. Я хочу иногда отключать его. И иногда включать. Но делать это без изменения php.ini и без перезагрузки сервера, а побыстрее. Как я могу это делать? Нажатием какой-нибудь кнопки, например. Или комментированием кода. Я попробовал вот такой код:
if (function_exists('xdebug_disable')) {
xdebug_disable();
}
Но сайт все равно тормозит.
Включенный xDebug, не должен замедлять работу. Попробуйте следующее:
1) попробуйте в php.ini
, оставить настройки по минимуму, только те, что вам нужны, например, если у вас включен профайлер, отключите его.
2) Пока вам не нужен дебаггер, отключайте прослушку в свой среде разработки.
3) Если вы отключили прослушку (п.2), а у вас все по-прежнему медленно, попробуйте убедится, что она действительно отключена. В php.ini
узнайте порт, на который xdebug шлет запросы, далее проверьте, работает ли он telnet localhost {ВАШ_ПОРТ}
. Если порт работает, то среда разработки не корректно завершает работу прослушки
Вроде как все просто, но возможно, что-то поможет.
Я использую скрипт, который редактирует php.ini и рестартует php-fpm. Включение / отключение занимает доли секунды.
Вот пример bash-файла, который позволяет включать и отключать xdebug, а также включать профайлер.
ini_file="/etc/php.d/xdebug.ini"
if [ -z $1 ]
then
if grep -q '\;zend_extension' "$ini_file"
then
echo 'xdebug is OFF'
exit 0
fi
if grep -q 'xdebug.profiler_enable=0' "$ini_file"
then
echo 'xdebug is ON'
exit 0
else
echo 'xdebug is PROF'
exit 0
fi
fi
if [ 'on' = $1 ]
then
sed -i s/^\;zend_extension/zend_extension/g $ini_file
sed -i s/^\xdebug.profiler_enable=1/xdebug.profiler_enable=0/g $ini_file
systemctl restart php-fpm
exit 0
fi
if [ 'prof' = $1 ]
then
sed -i s/^\;zend_extension/zend_extension/g $ini_file
sed -i s/^\xdebug.profiler_enable=0/xdebug.profiler_enable=1/g $ini_file
systemctl restart php-fpm
exit 0
fi
if [ 'off' = $1 ]
then
sed -i s/^zend_extension/\;zend_extension/g $ini_file
sed -i s/^\xdebug.profiler_enable=1/xdebug.profiler_enable=0/g $ini_file
systemctl restart php-fpm
exit 0
fi
echo 'argument can be "on", "off" or "prof" only'
exit 1
Использование (если этот файл назван xdebug):
Как по мне все волшебные скрипты которые то включают, то отключают xDebug весьма себе шаманство, однако имеют место быть.
Если бы мне у меня была крайняя необходимость дебажить на продакшене (ну вдруг) я бы использовал бы чуть другой подход.
Я могу ошибаться, однако даже "выключеный" xDebug замедляет работу. Под выключеным я понимаю xdebug.remote_enable=0 . Все дело в том что он загружен модулем и соответственно работает.
Что касается другого подхода. Ежели вы используете php-fpm, я бы создал две конфигурации в одной из которых модуль не подгружается, а в другой модуль подгружается. Запустил бы эти конфигуации на разных портах. Далее то что мы называем продакшн - ваш веб сервер отсылает на тот демон, который без загруженого модуля, а вот для дебага - создаете дополнительный хост в веб сервере с другим DNS именем или попросту слушаете на другом порту и в этой конфигурации отправляете ваш запрос на второй демон php-fpm который как раз с загруженым модулем xdebug.
Получаете весьма прозрачную штуку без каких либо мегаскриптов.
Возникла надобность - подняли php-fpm с xDebug, пропала надобность - прибили. Ну и конечно же дополнительными интсрументами можете ограничить доступ к дебажному варианту только на ваш ip, например.
Ну и само собой у вас нет ровным счетом ни какой надобность перегружать сервисы либо сервер (кто перегружает сервер ?).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как сделать к примеру ID 600000 при добавлении новой строчки? Чтоб был рандом например 6000023 следущий 6000073 и так далее