在 Ubuntu 上 PHP 配置“失效”(改了 php.ini 但不生效)是非常常见的问题,通常不是配置写错,而是改错了文件 / 没重启服务 / 多环境冲突。下面按最常见原因逐一排查。
先查实际加载的配置文件:
php --ini
或(Web 环境):
php -i | grep "Loaded Configuration File"
常见误区:
例如:
/etc/php/8.1/cli/php.ini # 命令行
/etc/php/8.1/fpm/php.ini # Nginx + PHP-FPM
/etc/php/8.1/apache2/php.ini # Apache
✅ 你改的必须和 Loaded Configuration File 一致
sudo systemctl restart php8.1-fpm
sudo systemctl restart apache2
⚠️ 只改 php.ini 不重启 = 不生效
Ubuntu 常装多个 PHP:
ls /etc/php/
如果你改的是 php7.4,但 Web 用的是 php8.1,配置当然“失效”。
查看 Web 实际版本:
php -v
或浏览器中:
<?php phpinfo(); ?>
某些目录可能有:
.user.ini
它会覆盖 php.ini。
检查:
ls -a /var/www/html
ini_set('display_errors', 0);
会覆盖 php.ini。
PHP-FPM pool 可单独设置:
/etc/php/8.1/fpm/pool.d/www.conf
例如:
php_admin_value[memory_limit] = 128M
优先级高于 php.ini。
| 模式 | 说明 |
|---|---|
| PHP_INI_USER | 可被脚本修改 |
| PHP_INI_PERDIR | .htaccess / user.ini |
| PHP_INI_SYSTEM | 只能 php.ini |
例如:
disable_functions
只能 php.ini 改。
常见错误:
display_error = On ❌
display_errors = On ✅
php --ini
systemctl restart php*-fpm
php -i | grep memory_limit
请告诉我:
我可以直接告诉你该改哪个文件、怎么改、怎么验证。