Почему XDebug показывает разные версии PHP для Время выполнения и Время компиляции?

Вопрос или проблема

Я установил php-xdebug на своей виртуальной машине Debian 12. Когда я запускаю xdebug_info(), конфигурация сборки PHP показывает разные версии PHP для Run Time и Compile Time.

  • Версия (Run Time) = 8.3.12
  • Версия (Compile Time) = 8.3.6

Вывод XDebug:

Конфигурация сборки PHP 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:

Конфигурация PHP Info

Переменные 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 Time8.3.6, может быть объяснена несколькими моментами.

  1. Различие в версиях времени компиляции и запуска: Версия Compile Time (время компиляции) указывает на то, какую версию PHP использовали для сборки расширения XDebug. В вашем случае, XDebug был собран с использованием версии 8.3.6. Версия Run Time (время выполнения) отображает текущую версию PHP, которая запущена и работает на сервере, то есть 8.3.12. Это происходит потому, что, если вы обновили PHP после того, как уже был установлен XDebug, сам XDebug не обновится автоматически до новой версии.

  2. Обновление XDebug: Чтобы устранить это расхождение, вам необходимо убедиться, что XDebug был установлен из репозитория, который соответствует вашей текущей версии PHP (8.3.12). Текущая версия XDebug 3.3.2, по всей видимости, совместима с обеими версиями PHP 8.3, но лучше всего переустановить XDebug, чтобы убедиться, что он собран с использованием последней версии PHP.

  3. Шаги для решения проблемы:

    • Сначала удалите текущую версию XDebug:
      sudo apt remove php-xdebug
    • Затем установите XDebug снова, чтобы он был скомпилирован с актуальной версией PHP:
      sudo apt install php-xdebug
    • После переустановки проверьте вывод xdebug_info() снова, чтобы убедиться, что версии теперь совпадают.
  4. Дополнительная информация про версии: Иногда представление старой версии в Compile Time может быть последствием кеширования. Убедитесь, что ваш веб-сервер (если используется) или встроенный сервер PHP перезапущен после установки нового расширения, чтобы изменения вступили в силу.

  5. Кеширование: Если вы используете кеширование, попробуйте очистить кеш. Для PHP это может включать в себя использование opcache_reset() если опкеширование включено, или просто перезагрузка веб-сервера.

Таким образом, наличие различных версий PHP в Run Time и Compile Time можно считать нормальным явлением, которое можно легко исправить путем переустановки XDebug с учетом текущей версии PHP.

Оцените материал
Добавить комментарий

Капча загружается...