php.ini 掌握靠“查、改、验、重启”四步闭环:用 phpinfo() 或 php --ini 定位真实配置文件,修改前确认环境与安全规则(如 display_errors 生产禁用),推荐用 conf.d/ 独立文件覆盖,改后须用 ini_get() 或 php -m 验证生效,并重启对应 sapi(如 php-fpm)。

php.ini 不是靠“学”会的,是靠“查、改、验、重启”四步闭环练出来的。 它没有抽象概念要理解,只有具体指令要定位、语法要写对、生效要验证。记不住所有参数?正常——你只需要知道怎么快速找到它、改对它、确认它真起了作用。
怎么快速定位当前生效的 php.ini 文件
别猜路径,用命令直接问 PHP 自己:
- Web 环境:新建一个
info.php,内容为<?php phpinfo(); ?>,浏览器访问后搜索Loaded Configuration File—— 这一行显示的路径才是你该改的文件 - CLI 环境(命令行):运行
php --ini,看Loaded configuration file对应的路径;注意 CLI 和 Web(如 FPM)很可能加载不同文件 - 常见陷阱:phpStudy、XAMPP、Docker 镜像常自带多套配置,
phpinfo()显示的路径和php --ini输出不一致时,说明你正在改错环境的配置
改配置前必须搞清的三件事
盲目修改 php.ini 是线上事故高发原因:
-
display_errors = On只应在开发机启用;生产环境必须关,否则敏感信息(如路径、数据库结构)可能直接暴露在 HTML 响应里 -
upload_max_filesize和post_max_size必须同时调大,且后者 ≥ 前者;只改前者,上传表单提交时会静默失败(HTTP 200 但无数据) -
extension=redis.so这类行,路径必须是绝对路径(如/usr/lib/php/20220829/redis.so),相对路径或仅写扩展名会导致 PHP 启动时报PHP Warning: Unable to load dynamic library 'redis.so'
自定义配置文件比直接改主 php.ini 更安全
主 php.ini 升级时大概率被覆盖,推荐用 conf.d/ 目录加独立文件:
- Linux/FPM:把
99-custom.ini放到/etc/php/{version}/fpm/conf.d/;CLI 则放对应/cli/conf.d/ - macOS(Homebrew):路径通常是
/usr/local/etc/php/{version}/conf.d/99-custom.ini - Windows:放在 PHP 安装目录下的
php.d\子目录,文件名以.ini结尾 - 关键点:文件名前缀决定加载顺序(字母序),
99-确保它最后加载,能覆盖前面文件里的同名设置
验证修改是否真正生效,不能只看 phpinfo()
phpinfo() 显示的是“PHP 解析了什么”,不代表“运行时行为就是它说的那样”:
- 改了
memory_limit = 512M?写个脚本跑echo ini_get('memory_limit');,输出必须是512M,而不是-1或旧值 - 开了
opcache.enable=1?运行php --ri opcache,看输出里Opcode Caching => Enabled是否为 true - 加了扩展但
get_loaded_extensions()没列出来?先检查php -m | grep redis(CLI),再检查phpinfo()(Web),两者结果不一致,说明 SAPI 配置没同步
最常被忽略的点:PHP-FPM 进程不重启,改了配置等于没改;service php-fpm reload 有时不够,得 restart。CLI 脚本不受 FPM 配置影响,这点永远要分清。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











