在 CentOS 上 PHP 配置不生效 是很常见的问题,通常不是配置写错了,而是配置位置或加载顺序不对。下面按最常见原因逐一说明,你可以对照排查。
CentOS 上 PHP 可能有多个 php.ini,你改的未必是被加载的那个。
php --ini
或(Web 环境)
<?php
phpinfo();
看 Loaded Configuration File
✅ 正确做法:修改 Loaded Configuration File 指向的文件
php 命令 → CLI 模式php-fpm两者可能:
php.iniconf.d 目录例如:
/etc/php.ini # CLI
/etc/php-fpm.d/www.conf # FPM
/etc/php.d/*.ini # 扩展配置
✅ 改完记得确认你改的是 Web 用的那个
改 php.ini 必须重启 PHP 服务
systemctl restart php-fpm
(或)
systemctl restart php74-php-fpm
systemctl restart httpd
systemctl restart nginx
⚠️ 只 reload nginx 不会 重新加载 PHP 配置
CentOS 常用:
/etc/php.d/*.ini
这些文件 按字母顺序加载,可能覆盖 php.ini
例如:
; /etc/php.d/10-opcache.ini
memory_limit=128M
✅ 检查是否有重复配置:
grep -R "memory_limit" /etc/php.ini /etc/php.d/
某些配置只能在特定地方生效:
| 配置 | 位置 |
|---|---|
upload_max_filesize |
php.ini / .user.ini |
post_max_size |
php.ini |
disable_functions |
php.ini |
open_basedir |
php.ini / FPM pool |
❌ .htaccess 对 PHP-FPM 无效
❌ php_value 对 FPM 无效
如果网站目录有:
.user.ini
它会覆盖 php.ini(仅对该目录)
查看:
ls -a /var/www/html
cat /var/www/html/.user.ini
有时配置生效了,但被 SELinux 拦截
排查:
getenforce
临时关闭测试:
setenforce 0
CentOS 可能同时装了:
which php
php -v
rpm -qa | grep php
✅ 确保你改的是正在运行的版本
php --ini 看的是哪个文件如果你愿意,可以把 具体改了什么配置 + 用的 Web 服务(Apache/Nginx)+ PHP 版本 发出来,我可以直接帮你定位是哪一条原因。