Вопрос или проблема
Я установил php-xdebug
на своей виртуальной машине Debian 12. Когда я запускаю xdebug_info()
, конфигурация сборки PHP показывает разные версии PHP для Run Time
и Compile Time
.
- Версия (Run Time) =
8.3.12
- Версия (Compile Time) =
8.3.6
Вывод XDebug:
Сервер Debian новый и на нем установлена только одна версия PHP (8.3
), используя пакет deb.sury.org
.
Я использую встроенный веб-сервер PHP. php -S 0.0.0.0:8888
php -v
PHP 8.3.12 (cli) (собран: 27 сен 2024 04:03:53) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.12, Copyright (c) Zend Technologies
с Zend OPcache v8.3.12, Copyright (c), by Zend Technologies
с Xdebug v3.3.2, Copyright (c) 2002-2024, by Derick Rethans
Версия PHP, указанная в php_info()
, составляет 8.3.12
. Ссылок на 8.3.6
нет.
Вывод PHP Info:
Версия XDebug составляет 3.3.2
, что является последней стабильной версией.
php -i | grep Xdebug
с Xdebug v3.3.2, Copyright (c) 2002-2024, by Derick Rethans
Я использовал этот скрипт, который я написал для установки PHP и других пакетов и инструментов. На сервере установлено не так много других пакетов.
Скрипт установки PHP:
## Настройка репозитория PHP
echo "\e[47m\e[31mУстановка исходного репозитория PHP...\e[0m"
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
dpkg -i /tmp/debsuryorg-archive-keyring.deb
sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt-get update
## Установка PHP и расширений
# FPM и CLI устанавливаются сначала, чтобы убрать зависимость от Apache
# Спасибо https://askubuntu.com/users/583418/dan-delaney
# https://askubuntu.com/a/1357414
echo "\e[47m\e[31mУстановка PHP 8.3 FPM и CLI...\e[0m"
apt-get -y install php8.3-fpm php8.3-cli
echo "\e[47m\e[31mУстановка PHP 8.3...\e[0m"
apt-get -y install php8.3
echo "\e[47m\e[31mУстановка расширений PHP 8.3...\e[0m"
apt-get -y install php8.3-common php8.3-curl php8.3-mbstring php8.3-sqlite3 php8.3-xml php8.3-zip
XDebug был установлен вручную позже из репозитория пакетов: apt install php-xdebug
.
sudo apt install php-xdebug
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение состояния информации... Готово
Будут установлены следующие дополнительные пакеты:
php8.3-xdebug
Будут установлены следующие НОВЫЕ пакеты:
php-xdebug php8.3-xdebug
0 обновлено, 2 ново установлено, 0 для удаления и 0 не обновлено.
Нужно скачать 628 кБ архивов.
После этой операции будет использовано 2,022 кБ дополнительного дискового пространства.
Вы хотите продолжить? [Y/n] y
Получение:1 https://packages.sury.org/php bookworm/main amd64 php8.3-xdebug amd64 3.3.2-1+0~20240420.60+debian12~1.gbp3869a8 [622 kB]
Получение:2 https://packages.sury.org/php bookworm/main amd64 php-xdebug amd64 3.3.2-1+0~20240420.60+debian12~1.gbp3869a8 [5,512 B]
Получено 628 кБ за 1 с (852 кБ/с)
debconf: не удалось инициализировать интерфейс: Диалог
debconf: (интерфейс диалога требует экран размером не менее 13 строк и 31 столбца.)
debconf: переключение на интерфейс: Readline
Выбор ранее не установленного пакета php8.3-xdebug.
(Чтение базы данных ... 32960 файлов и директорий в данный момент установлены.)
Подготовка к распаковке .../php8.3-xdebug_3.3.2-1+0~20240420.60+debian12~1.gbp3869a8_amd64.deb ...
Распаковка php8.3-xdebug (3.3.2-1+0~20240420.60+debian12~1.gbp3869a8) ...
Выбор ранее не установленного пакета php-xdebug.
Подготовка к распаковке .../php-xdebug_3.3.2-1+0~20240420.60+debian12~1.gbp3869a8_amd64.deb ...
Распаковка php-xdebug (3.3.2-1+0~20240420.60+debian12~1.gbp3869a8) ...
Настройка php8.3-xdebug (3.3.2-1+0~20240420.60+debian12~1.gbp3869a8) ...
Настройка php-xdebug (3.3.2-1+0~20240420.60+debian12~1.gbp3869a8) ...
Обработка триггеров для php8.3-cli (8.3.12-1+0~20240927.43+debian12~1.gbpad3b8c) ...
Обработка триггеров для php8.3-fpm (8.3.12-1+0~20240927.43+debian12~1.gbpad3b8c) ...
Версия (Compile Time) – это версия PHP, используемая для компиляции расширения xdebug, и она не очень полезна, независимо от текущей установленной версии PHP.
Ответ или решение
Вопрос о различиях в версиях PHP, отображаемых XDebug для Run Time
и Compile Time
, достаточно распространен, особенно среди пользователей, недавно установивших или обновивших PHP и его расширения. Ваша ситуация, где Run Time
показывает версию 8.3.12
, а Compile Time
— 8.3.6
, может быть объяснена несколькими моментами.
-
Различие в версиях времени компиляции и запуска: Версия
Compile Time
(время компиляции) указывает на то, какую версию PHP использовали для сборки расширения XDebug. В вашем случае, XDebug был собран с использованием версии8.3.6
. ВерсияRun Time
(время выполнения) отображает текущую версию PHP, которая запущена и работает на сервере, то есть8.3.12
. Это происходит потому, что, если вы обновили PHP после того, как уже был установлен XDebug, сам XDebug не обновится автоматически до новой версии. -
Обновление XDebug: Чтобы устранить это расхождение, вам необходимо убедиться, что XDebug был установлен из репозитория, который соответствует вашей текущей версии PHP (
8.3.12
). Текущая версия XDebug3.3.2
, по всей видимости, совместима с обеими версиями PHP 8.3, но лучше всего переустановить XDebug, чтобы убедиться, что он собран с использованием последней версии PHP. -
Шаги для решения проблемы:
- Сначала удалите текущую версию XDebug:
sudo apt remove php-xdebug
- Затем установите XDebug снова, чтобы он был скомпилирован с актуальной версией PHP:
sudo apt install php-xdebug
- После переустановки проверьте вывод
xdebug_info()
снова, чтобы убедиться, что версии теперь совпадают.
- Сначала удалите текущую версию XDebug:
-
Дополнительная информация про версии: Иногда представление старой версии в
Compile Time
может быть последствием кеширования. Убедитесь, что ваш веб-сервер (если используется) или встроенный сервер PHP перезапущен после установки нового расширения, чтобы изменения вступили в силу. -
Кеширование: Если вы используете кеширование, попробуйте очистить кеш. Для PHP это может включать в себя использование
opcache_reset()
если опкеширование включено, или просто перезагрузка веб-сервера.
Таким образом, наличие различных версий PHP в Run Time
и Compile Time
можно считать нормальным явлением, которое можно легко исправить путем переустановки XDebug с учетом текущей версии PHP.