Jak opravit Ubuntu PHP Call to undefined function mb_internal_encoding()

Problém:

Když vidíte následující chybové hlášení ve vašem PHP logu:

php_mb_internal_encoding_error.txt
2022/12/22 12:57:20 [error] 1908680#1908680: *9092980 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function mb_internal_encoding() in /var/www/snappymail/v/0.0.0/include.php:90
Stack trace:
#0 /var/www/index.php(11): include()
#1 {main}
  thrown in /var/www/snappymail/v/0.0.0/include.php on line 90" while reading response header from upstream, client: ::ffff:77.7.108.195, server: mydomain.com, request: "GET /?admin HTTP/2.0", upstream: "fastcgi://unix:/var/run/php/php8.2-fpm.sock:", host: "mydomain.com"

Řešení

Chybějící funkce mb_internal_encoding() je z PHP modulu mbstring.

Pro instalaci musíte nejprve identifikovat PHP verzi, která běží daný skript. To lze provést buď prohlédnutím konfiguračních souborů webového serveru pro danou doménu, nebo prohlédnutím chybového logu. V tomto případě můžeme identifikovat, že PHP verze je 8.2 z upstream: "fastcgi://unix:/var/run/php/php8.2-fpm.sock:"

V případě, že nemůžete identifikovat správnou verzi, doporučuji nainstalovat mbstring pro každou nainstalovanou PHP verzi, kterou můžete vidět pomocí sudo dpkg --get-selections | grep php.

S číslem verze můžeme nainstalovat rozšíření mbstring z balíčkových zdrojů Ubuntu/Debian:

install_php_mbstring.sh
sudo apt -y install php8.2-mbstring

V závislosti na vaší konfiguraci možná budete muset také restartovat webový server a/nebo službu PHP-FPM. Doporučuji to vyzkoušet bez restartu, pak restartovat webový server a (pokud používáte PHP-FPM) restartovat PHP-FPM pro vaši PHP verzi. V případě, že to nepomůže, můžete vždy restartovat.

Po tom by chybové hlášení mělo zmizet - někdy potřebujete nainstalovat další PHP moduly a je nejlepší jen sledovat chybový log pro další chybějící funkce nebo jiné chyby týkající se chybějícího rozšíření.


Podívejte se na podobné články podle kategorie: PHP