修改 php.ini 后 phpinfo() 未更新,最常见原因是改错文件或 PHP 未加载该文件;需确认 Loaded Configuration File 路径、权限,并按 SAPI 类型重启对应服务(如 php-fpm 或 apache2)。

修改 php.ini 后为什么 phpinfo() 没变?
改完 php.ini 文件却没生效,最常见原因是:你改错了文件,或 PHP 没加载到它。PHP 实际读取的配置文件路径必须和 phpinfo() 页面中显示的 Loaded Configuration File 一行完全一致。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 运行
php -i | grep "Loaded Configuration File"(命令行)或新建info.php写访问网页,确认真实路径 - 用
ls -l检查该文件权限,确保 Web 进程用户(如www-data或nginx)有读取权限 - 别改错位置:常见混淆点是
/etc/php/8.1/cli/php.ini(命令行用)和/etc/php/8.1/fpm/php.ini(FPM 用),Web 服务通常走 FPM 或 Apache 模块,不是 CLI
FPM 场景下改完 php.ini 必须重启什么?
PHP-FPM 不会自动重载 php.ini —— 它只响应信号重载自己的进程配置(www.conf),但不重新解析 php.ini。改 php.ini 后必须彻底重启 FPM 主进程,否则旧配置一直缓存在内存里。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 执行
sudo systemctl restart php8.1-fpm(Ubuntu/Debian,版本号按实际调整) - 验证是否成功:重启后立刻访问
phpinfo()页面,刷新并搜索关键词(如upload_max_filesize),确认值已更新 - 别用
reload:它只重载 pool 配置,对php.ini无效;restart才会触发完整初始化
Apache + mod_php 方式下改配置要重启哪个服务?
mod_php 是 Apache 的模块,PHP 配置随 Apache 进程启动时一次性加载。改完 php.ini 后,必须重启整个 Apache,不能只 reload 配置。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 执行
sudo systemctl restart apache2(Debian/Ubuntu)或sudo systemctl restart httpd(CentOS/RHEL) - 注意:如果启用了
mpm_event或其他非 prefork MPM,且未正确编译 mod_php,可能根本无法加载 PHP —— 此时phpinfo()会直接不显示,需先确认LoadModule php_module行在mods-enabled下启用 - Apache 的
.htaccess中用php_value设置的项,优先级低于php.ini,但仅对PHP_INI_PERDIR级别的指令有效;memory_limit这类PHP_INI_SYSTEM级别无法被覆盖
如何快速验证某项配置是否真正生效?
别只信 phpinfo() 页面的静态输出,有些设置(如 opcache.enable)需要配合实际行为验证,否则容易误判。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 用
php -r "echo ini_get('upload_max_filesize');"命令行直查,排除 Web 服务器层干扰 - 对 OPcache 类配置,改完后访问一个含
opcache_get_status()的脚本,看opcache_enabled和opcache.hit_rate是否变化 - 改
date.timezone后,用date_default_timezone_get()函数返回值确认,而不是只看phpinfo()里的默认值字段——后者可能被运行时函数覆盖
最容易被忽略的是:CLI 和 Web 使用的 PHP SAPI 完全独立,各自加载各自的 php.ini 和扩展。调试时务必分清你是通过浏览器访问,还是用 php script.php 运行,两者可能根本不是同一套配置。











