php --ini 显示的配置路径仅对 cli 有效;web 请求实际加载的是 php-fpm 启动时 -c 参数指定的 php.ini,需通过 phpinfo() 确认 loaded configuration file 路径,修改后须重载 php-fpm。

php --ini 显示的配置路径只对 CLI 有效
命令行执行 php --ini 输出的 Loaded Configuration File 路径,仅反映当前 shell 环境下 CLI 模式加载的 php.ini。它和 Web 请求(如 Nginx/Apache)走的不是同一套加载逻辑,不能直接用来判断网站实际生效的配置。
常见错误现象:改了 CLI 的 php.ini,php -v 或 php -m 看起来正常,但网页里 phpinfo() 显示的却是另一份配置、扩展没加载、upload_max_filesize 不生效——本质是 CLI 和 Web 用了不同版本的 PHP 二进制或不同 php.ini。
- 必须用
phpinfo()页面里的Loaded Configuration File行,才是该站点真实生效的配置文件路径 - 如果该行显示
none,说明 Web 模式根本没加载任何php.ini,大概率是php-fpm启动时未指定-c参数,或配置中php_admin_value[php_ini]被覆盖 - 宝塔/PHPStudy 等面板默认为每个 PHP 版本生成独立
php.ini,路径类似/www/server/php/81/etc/php.ini或C:\phpstudy_pro\Extensions\php\php8.1.0\php.ini
多版本共存时 php-fpm 的 -c 参数决定实际配置
Nginx 或 Apache 通过 FastCGI 调用的是 php-fpm 进程,而每个 php-fpm 实例启动时可指定专属配置目录。这个 -c 参数的值,才真正决定了该版本下所有 Web 请求读取哪份 php.ini。
验证方法:查对应版本的 php-fpm 进程启动命令
ps aux | grep php-fpm-81
你会看到类似:
/www/server/php/81/bin/php-fpm -c /www/server/php/81/etc -y /www/server/php/81/etc/php-fpm.conf
其中 -c /www/server/php/81/etc 就是它加载 php.ini 的目录(该目录下必须存在名为 php.ini 的文件)。
- 手动编译安装时,
./configure --with-config-file-path=/usr/local/php82/etc设定的就是这个-c默认路径 - 宝塔安装后,每个 PHP 版本的
php-fpm.conf文件里通常有php_admin_value[php_ini] = /www/server/php/82/etc/php.ini,优先级高于-c - 若修改了
php.ini但不生效,先确认php-fpm进程是否已重载:kill -USR2 $(cat /www/server/php/82/var/run/php-fpm.pid)或用面板“重载服务”
CLI 和 Web 配置不一致?先确认调用的是哪个 php
系统 PATH 中可能有多个 php 命令,比如 /usr/bin/php(系统自带)、/www/server/php/81/bin/php(宝塔)、C:\php\php.exe(手动添加)。你敲 php -v 看到的版本,未必是 Web 用的那个。
排查步骤:
- 执行
which php(Linux/macOS)或where php(Windows CMD)看 CLI 调用路径 - 在
phpinfo()页面里找Configuration File (php.ini) Path和Loaded Configuration File两行,对比路径前缀是否匹配某个已知 PHP 安装目录 - 直接运行对应版本的全路径命令验证:
/www/server/php/81/bin/php --ini,结果应与该版本phpinfo()显示一致 - 宝塔用户可在【软件商店】→【PHP】→【设置】→【配置修改】里直接编辑该版本的
php.ini,避免路径混淆
扩展目录(extension_dir)也按版本隔离
即使你把 redis.so 放到了全局 /usr/lib/php/modules/,PHP 8.2 仍可能报 undefined symbol: zend_empty_string——因为它的 extension_dir 指向的是 /www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/ 这类带 ABI 标识的子目录。
关键点:
-
phpinfo()页面中extension_dir的值,就是该版本唯一认可的扩展加载路径 - 每个 PHP 版本的
php-config工具路径不同:/www/server/php/82/bin/php-config,编译扩展时必须用对应版本的phpize和php-config - 宝塔安装扩展时,会自动将
.so文件复制到对应版本的extension_dir,并写入该版本的php.ini,这是最安全的做法
配置文件本身不复杂,难的是路径、权限、进程归属三者对不上号。别信“改完就生效”,每次改完都得用 phpinfo() 页面确认实际加载的是哪一份。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











