Оглавление

Если вы когда-нибудь пытались настроить Xdebug для вашего PHP-проекта, то, скорее всего, вы сталкивались с этим ужасным сообщением:

PHP Warning: Failed loading Zend extension 'xdebug.so': cannot open shared object file: No such file or directory

И, конечно, вы задаетесь вопросом: «Кто эти люди, что прячут Xdebug настолько глубоко, что его даже PHP найти не может?». В этой статье разберёмся, как решить проблему с Xdebug, разложим всё по полочкам и сделаем это весело и интересно.

Почему вообще возникает эта ошибка?

Итак, представьте себе: вы установили PHP, настроили сервер, скачали Xdebug, чтобы с комфортом отлаживать код. Но вот незадача: PHP отказывается загружать расширение Xdebug. Обычно проблема заключается в одном из следующих моментов:

  1. Неправильная версия Xdebug для установленной версии PHP.
  2. Неправильный путь к файлу xdebug.so.
  3. Отсутствие установленного пакета Xdebug.
  4. Конфликт версий PHP и неправильные настройки в php.ini.

Давайте теперь разберёмся, как решать эту проблему, как настоящий DevOps-ниндзя.

Шаг 1: Проверим, установлен ли Xdebug

Для начала стоит убедиться, что Xdebug вообще установлен в системе. Используйте команду:

php -m | grep xdebug

Если в ответе ничего не отображается, скорее всего, Xdebug отсутствует. В таком случае приступим к установке.

Шаг 2: Установим или переустановим Xdebug

Установка через apt

Для Ubuntu и Debian достаточно выполнить:

sudo apt update
sudo apt install php7.4-xdebug

Если вы используете другую версию PHP, замените 7.4 на вашу текущую версию (например, 8.1).

Установка через pecl

Иногда стандартные репозитории не содержат нужную версию Xdebug, и тогда на помощь приходит pecl:

sudo apt install php-pear php7.4-dev
sudo pecl install xdebug

После установки добавьте строку в ваш файл php.ini:

zend_extension=xdebug

Шаг 3: Найдём правильный путь к xdebug.so

Если после установки ошибка всё равно не исчезла, возможно, проблема в неправильном пути к xdebug.so. Найдите его с помощью команды:

find /usr/lib/php/ -name xdebug.so

Допустим, найденный путь — /usr/lib/php/20210902/xdebug.so. Теперь откроем нужные файлы php.ini и укажем верный путь:

sudo nano /etc/php/7.4/cli/php.ini
sudo nano /etc/php/7.4/apache2/php.ini

Добавьте строку:

zend_extension=/usr/lib/php/20210902/xdebug.so

Сохраните файл и перезапустите веб-сервер:

sudo systemctl restart apache2

Шаг 4: Проверим конфигурацию

После всех изменений не забудьте убедиться, что PHP правильно подгружает Xdebug:

php --ini
php -v

Вы должны увидеть строку, подтверждающую загрузку Xdebug:

with Xdebug v2.9.6, Copyright (c) 2002-2020, by Derick Rethans

Шаг 5: Очистка системы и решение проблем с зависимостями

Если ошибка сохраняется, возможно, у вас накопились неиспользуемые пакеты и зависимости. Попробуйте выполнить:

sudo apt --fix-broken install
sudo apt autoremove
sudo apt clean

Иногда это помогает решить проблемы с конфликтующими библиотеками.

Пример настройки Xdebug для PHP

Давайте настроим Xdebug для локальной отладки. Откроем php.ini и добавим следующие строки:

[xdebug]
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.log=/var/log/xdebug.log
xdebug.remote_enable=1
xdebug.remote_autostart=1

Перезагрузим сервер и проверим

После внесения изменений, не забудьте перезапустить Apache:

sudo systemctl restart apache2

А теперь давайте удостоверимся, что Xdebug работает:

php -m | grep xdebug

Если всё настроено правильно, вы должны увидеть xdebug в списке загруженных модулей.

Заключение: Как заставить Xdebug и PHP жить дружно

Мы рассмотрели все возможные пути решения проблемы с Xdebug и PHP. Надеюсь, теперь ваш PHP больше не будет капризничать и отказываться от Xdebug, словно это его последняя чашка кофе.

Помните, что мир веб-разработки — это не только код и конфигурация, но и умение находить решения в самых запутанных ситуациях. Удачной вам отладки и пусть Xdebug будет с вами!

Дополнительные ресурсы

Теперь вы готовы побеждать баги как настоящий разработчик и одновременно поднимать позиции вашего блога в поисковой выдаче!