Установка xhprof для разных версий PHP

На сервере три версии PHP 8.1, 8.2, 8.3 После стандартной установки следующими командами

sudo apt install php-pear
sudo apt install php-dev
sudo pecl install xhprof

у меня модуль почему то установился для PHP8.2

я попробовал изменить настройку pecl, указав путь к php8.3 вот так

which php8.3
pecl config-set php_dir /usr/bin/php8.3

и затем попробовал повторить

sudo pecl install xhprof

но получил ошибку что модуль exist

В итоге установить под 8.3 удалось только через использование суффикса

sudo apt install php8.3-dev
sudo pecl -d php_suffix=8.3 install xhprof; sudo pecl uninstall -r xhprof

Но я не могу понять почему в консоли когда я вызываю

php -m 

или

php8.3 -m

я не вижу модуля xhprof !?

При этом в скрипте, в выводе phpinfo(); я вижу что этот модуль подключен (скрипт запущен под php8.3)!

При этом

sudo update-alternatives --config php

Выставлена в 8.3 Есть 4 варианта для альтернативы php (предоставляет /usr/bin/php).

  Выбор   Путь              Приор Состояние
------------------------------------------------------------
  0            /usr/bin/php.default   100       автоматический режим
  1            /usr/bin/php.default   100       ручной режим
  2            /usr/bin/php8.1        81        ручной режим
  3            /usr/bin/php8.2        82        ручной режим
* 4            /usr/bin/php8.3        83        ручной режим

А команда

php -v 

выводит

PHP 8.3.1 (cli) (built: Dec 21 2023 20:12:13) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.1, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.1, Copyright (c), by Zend Technologies
    with Xdebug v3.3.0, Copyright (c) 2002-2023, by Derick Rethans

Можете объяснить плз. в чем причина, и где я еще не настроил что бы по умолчанию использовался только PHP8.3, если я правильно предполагаю причину проблемы...


Ответы (1 шт):

Автор решения: SCIF

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

Вот пример из моего пхп контейнера:

$ php -i|grep 'Loaded Co'
Loaded Configuration File => /usr/local/etc/php/php-cli.ini

То есть консольный использует php-cli.ini. Попробуем найти его php-fpm:

$ php-fpm -i|grep 'php-cli.ini'
$

Думаю, в вашем случае, может быть ситуация похожая (обратная по сути, но такая же по механизму).

→ Ссылка