После обновления PHP 8.1 7 января 2023 года мы начали видеть «Вызов неопределенной функции ssh2_connect()» в ранее работающих скриптах. В выпуске PHP от 5 января список изменений вообще не упоминается SSH. Apache2 был перезапущен вручную, и в конечном итоге была выполнена полная перезагрузка.
Мы используем PHP 8.1.14 (cli) (построено: 7 января 2023 г., 08:34:41) (NTS) под Debian GNU/Linux 10 (buster).
В выводе phpinfo() я вижу версию libSSH libssh2/1.8.0 с /etc/php/8.1/apache2/php.ini в качестве основного загруженного ini. Однако в этом файле явно не включено какое-либо расширение SSH, а phpinfo() только перечисляет libSSH, и большая таблица конфигурации SSH не отображается.
Дополнительные проанализированные INI-файлы не ссылаются на SSH в своих именах.
/etc/php/8.1/apache2/conf.d/10-mysqlnd.ini, /etc/php/8.1/apache2/conf.d/10-opcache.ini, /etc/php/8.1/apache2/conf.d/10-pdo.ini, /etc/php/8.1/apache2/conf.d/15-xml.ini, /etc/php/8.1/apache2/conf.d/20-bcmath.ini, /etc/php/8.1/apache2/conf.d/20-bz2.ini, /etc/php/8.1/apache2/conf.d/20-calendar.ini, /etc/php/8.1/apache2/conf.d/20-ctype.ini, /etc/php/8.1/apache2/conf.d/20-curl.ini, /etc/php/8.1/apache2/conf.d/20-dom.ini, /etc/php/8.1/apache2/conf.d/20-exif.ini, /etc/php/8.1/apache2/conf.d/20-ffi.ini, /etc/php/8.1/apache2/conf.d/20-fileinfo.ini, /etc/php/8.1/apache2/conf.d/20-ftp.ini, /etc/php/8.1/apache2/conf.d/20-gd.ini, /etc/php/8.1/apache2/conf.d/20-gettext.ini, /etc/php/8.1/apache2/conf.d/20-iconv.ini, /etc/php/8.1/apache2/conf.d/20-intl.ini, /etc/php/8.1/apache2/conf.d/20-mbstring.ini, /etc/php/8.1/apache2/conf.d/20-mysqli.ini, /etc/php/8.1/apache2/conf.d/20-pdo_mysql.ini, /etc/php/8.1/apache2/conf.d/20-phar.ini, /etc/php/8.1/apache2/conf.d/20-posix.ini, /etc/php/8.1/apache2/conf.d/20-readline.ini, /etc/php/8.1/apache2/conf.d/20-shmop.ini, /etc/php/8.1/apache2/conf.d/20-simplexml.ini, /etc/php/8.1/apache2/conf.d/20-soap.ini, /etc/php/8.1/apache2/conf.d/20-sockets.ini, /etc/php/8.1/apache2/conf.d/20-sysvmsg.ini, /etc/php/8.1/apache2/conf.d/20-sysvsem.ini, /etc/php/8.1/apache2/conf.d/20-sysvshm.ini, /etc/php/8.1/apache2/conf.d/20-tokenizer.ini, /etc/php/8.1/apache2/conf.d/20-xmlreader.ini, /etc/php/8.1/apache2/conf.d/20-xmlwriter.ini, /etc/php/8.1/apache2/conf.d/20-xsl.ini, /etc/php/8.1/apache2/conf.d/20-zip.ini
Выдача sudo apt install php-ssh2 получает php-ssh2 уже является самой новой версией (1.3.1+0.13-7+0~20221209.25+debian10~1.gbp33475c).
Кроме того, вместе с sudo apt remove php-ssh2 были выданы sudo apt install php-ssh2 и sudo service apache2 restart, но это не изменило ошибку «Вызов неопределенной функции ssh2_connect()».
Нужно ли добавлять строку, явно включающую ssh2 в основной ini? Как лучше дальше гнать ошибку?
И service php8.1-fpm reload, если вы используете fpm.
Разве это не расширение PECL?
@Marwelln, пожалуйста, добавьте ответ, чтобы я мог принять и поблагодарить вас!
Я не знаю, как работает установка конкретных модулей php без указания номера версии, но чтобы убедиться, что вы получаете нужный модуль для вашей конкретной версии PHP, добавьте версию после php. В вашем случае это будет php8.1
Таким образом, чтобы установить ssh2 для PHP 8.1 с помощью apt, вы должны использовать apt install php8.1-ssh2.
Если вы используете FPM под управлением PHP, вам необходимо убедиться, что вы перезагрузили его после установки нового модуля (service php8.1-fpm reload).
Попробуйте apt install php8.1-ssh2