真实生效路径是“Loaded Configuration File”行所示路径;若为(none)则未加载任何php.ini,配置全用默认值;CLI与Web环境配置文件分离,须分别用php --ini和phpinfo()确认。

php --ini 命令输出里哪一行才是真实路径
直接看 Loaded Configuration File 这一行——它显示的路径就是 PHP 当前正在读取并生效的配置文件。如果这行写的是 (none),说明 PHP 根本没加载任何 php.ini,所有配置都走内置默认值,你改任何配置都不会起作用。
Configuration File (php.ini) Path 那行只是“搜索目录”,PHP 会去那里找 php.ini,但找不到就跳过,不报错也不提醒。很多人卡在这一步,以为复制到这个路径就完事了,结果权限不对、名字没重命名、或者压根没放对位置。
- CLI(命令行)和 Web(如 Apache/FPM)通常加载不同的
php.ini,必须分别查:php --ini查 CLI,<?php phpinfo(); ?>查 Web - Ubuntu/Debian 系统常见分离路径:
/etc/php/8.2/cli/php.ini和/etc/php/8.2/fpm/php.ini是两个独立文件 - Docker 或 Alpine 镜像常默认不带
php.ini,Loaded Configuration File: (none)是常态,需手动挂载或用-d参数覆盖
phpinfo() 页面里怎么快速定位 Loaded Configuration File
新建一个 info.php 文件,内容只有一行:<?php phpinfo(); ?>,放到 Web 根目录(如 Nginx 的 root 或 Apache 的 DocumentRoot),浏览器访问即可。页面顶部附近有个大表格,找 “Loaded Configuration File” 这一栏,它的值就是 Web SAPI 实际加载的路径。
注意:如果页面里这一项显示为空或 (none),不是页面没刷出来,是 PHP 确实没加载配置文件。别急着改别的,先确认这个路径是否存在、是否可读、文件名是不是 php.ini(不是 php.ini-development 或 php.ini-production)。
立即学习“PHP免费学习笔记(深入)”;
- Windows 下常见路径:
C:\php\php.ini、C:\xampp\php\php.ini、或注册表指定路径(优先级高于文件系统) - Mac 上用 Homebrew 安装的 PHP,路径通常是
/opt/homebrew/etc/php/8.2/php.ini(版本号随安装变动) - 页面搜索技巧:按
Ctrl+F搜Loaded Configuration File,比肉眼扫快得多
找不到 php.ini 时怎么安全生成它
别从网上下载,也别手写。官方源里自带模板,直接用最稳妥。源码包或二进制包解压后,一定有 php.ini-production(推荐用于生产)或 php.ini-development(开发环境开启错误提示)。
操作顺序很关键:先确认 Configuration File (php.ini) Path 输出的目录存在,再复制模板过去并重命名为 php.ini,最后检查权限。
- Linux 示例:
cp /usr/src/php-8.2.12/php.ini-production /etc/php/8.2/cli/php.ini - 权限必须是
644,且 PHP 进程用户(如www-data或nginx)要有读权限:ls -l /etc/php/8.2/cli/php.ini - 改完不重启服务=白改:CLI 改了要重新开终端;FPM 改了得
systemctl restart php8.2-fpm;Apache 改了得apachectl graceful
为什么改了 php.ini 但 phpinfo() 里值没变
最大可能是你改错了环境的文件。CLI 的 php.ini 和 FPM/Apache 的 php.ini 完全是两套,改完 CLI 的,Web 页面当然看不到变化。
另一个隐蔽原因是 .ini 目录机制:比如 /etc/php/8.2/fpm/conf.d/20-opcache.ini 里的配置,会覆盖主 php.ini 中同名项。所以看到某个值没变,先查 php --ini 输出的 “Additional .ini files parsed” 列表,再用 php -i | grep your_setting 看 local value 和 master value 是否一致。
-
.user.ini(放在 Web 目录下)和.htaccess(Apache)优先级更高,可能静默覆盖主配置 - OPcache 启用时,有时会缓存旧的配置解析结果,可临时加
opcache.revalidate_freq=0测试 - 容器环境要注意:环境变量(如
PHP_INI_SCAN_DIR)或启动参数(如php -c /path/to/php.ini)会强制覆盖默认路径
php --ini,少半天排查。



















