Ubuntu 下 PHP 日志出现乱码,通常不是 PHP 本身的问题,而是字符编码不一致导致的。下面按常见原因给你一套排查和解决思路。
tail -f /var/log/php_errors.log
→ 可能是终端编码问题
file -i php_errors.log
→ 看文件编码
✅ 解决:
:set fileencoding=utf-8
:wq
在 php.ini 中设置:
default_charset = "UTF-8"
Ubuntu 常见位置:
/etc/php/8.1/cli/php.ini
/etc/php/8.1/fpm/php.ini
修改后重启:
sudo systemctl restart php8.1-fpm
如果你这样写:
error_log("中文日志");
✅ 推荐改成:
error_log(mb_convert_encoding("中文日志", "UTF-8", "auto"));
或:
error_log(iconv("UTF-8", "UTF-8//IGNORE", "中文日志"));
检查:
locale
如果不是 UTF-8:
sudo apt install locales
sudo dpkg-reconfigure locales
选中:
en_US.UTF-8
或
zh_CN.UTF-8
然后:
export LANG=en_US.UTF-8
Nginx:
charset utf-8;
Apache:
AddDefaultCharset UTF-8
❌ 错误:
cat php.log
✅ 推荐:
less -r php.log
# 或
tail -f php.log
✅ PHP 文件:UTF-8 无 BOM
✅ php.ini:default_charset = UTF-8
✅ 系统:LANG=en_US.UTF-8
✅ 日志:统一 UTF-8
✅ Web 服务:声明 charset
如果你愿意,可以把:
发出来,我可以精准定位是哪一层乱码。