php cli与web模式使用不同php.ini配置文件,导致php -v正常但phpinfo()显示旧版或扩展缺失;需分别执行php --ini和phpinfo()确认“loaded configuration file”路径是否一致,否则修改无效。

php -v 输出正确但 Web 服务不生效?先查 CLI 和 Web 用的不是同一套配置
很多问题根本不在安装,而在配置错位:CLI 下 php -v 显示 8.3.x,phpinfo() 却显示旧版或模块缺失,说明 Apache/Nginx 加载的是另一份 php.ini。别急着重装,先定位真实加载路径:
- CLI 模式执行
php --ini,看 “Loaded Configuration File” 路径 - Web 模式建一个
info.php,内容为<?php phpinfo(); ?>,访问后找 “Loaded Configuration File” 行 - 两个路径必须一致,否则改了 CLI 的
php.ini对 Web 完全无效
常见错配场景:Ubuntu 上 CLI 用 /etc/php/8.3/cli/php.ini,Apache 用 /etc/php/8.3/apache2/php.ini;macOS Homebrew 安装后 CLI 和 FPM 共用 /opt/homebrew/etc/php/8.3/php.ini(Apple Silicon)或 /usr/local/etc/php/8.3/php.ini(Intel),但 Apache 若手动编译则可能读系统默认路径。
扩展列表对得上,但 phpinfo() 不显示?检查 extension_dir 和扩展文件是否存在
extension=mysqli 写在 php.ini 里不等于它就加载成功——PHP 得先找到 .so 或 .dll 文件。关键三步缺一不可:
- 确认
extension_dir值正确且路径真实存在,例如 Linux 是/usr/lib/php/8.3,Windows 是"C:/php/ext"(注意双引号和反斜杠) - 进该目录,用
ls或dir看mysqli.so或php_mysqli.dll是否真在那儿 - Windows 下若用 NTS 版 PHP,扩展名是
php_mysqli.dll,不是mysqli.dll;Linux 下不能写成extension=php_mysqli.so,应为extension=mysqli
典型报错:PHP Warning: Unable to load dynamic library 'mysqli',基本就是路径或文件名不匹配。
date.timezone、openssl、opcache 这三项漏配,90% 的框架启动失败
Composer install 报错、Laravel 启动提示 “The openssl extension is required”,或 Symfony 报 “date.timezone setting is not set”,往往不是扩展没装,而是 ini 里关键项被注释或写错:
-
date.timezone = Asia/Shanghai—— 必须取消注释,值不能是空或非法时区(如GMT+8不合法,要用Asia/Shanghai) -
extension=openssl—— Windows 下还要确保libeay32.dll和ssleay32.dll在C:\php目录或系统 PATH 中 -
opcache.enable=1+opcache.jit=tracing—— PHP 8.3 JIT 默认关闭,不设opcache.jit就等于没开,性能无提升
验证方式:运行 php -r "echo ini_get('date.timezone');"、php -m | grep openssl、php -r "echo ini_get('opcache.jit');",三个都应有输出且非空。
Linux 上装完 php8.3-fpm,Nginx 却连不上 socket?先看权限和路径是否匹配
502 Bad Gateway 多数不是 PHP 没跑,而是 Nginx 找不到或没权限访问 FPM socket。两件事必须同步确认:
- socket 路径是否一致:Ubuntu 默认是
unix:/run/php/php8.3-fpm.sock,CentOS/RHEL 是unix:/var/run/php-fpm/www.sock或unix:/run/php/php8.3-fpm.sock,不能硬抄旧教程 - socket 文件属主和权限:运行
ls -l /run/php/php8.3-fpm.sock,确保 Nginx worker 进程用户(通常是www-data或nginx)对该文件有读写权限;若属主是root:www-data但权限是srw-rw----,Nginx 用户才能连
临时测试:用 sudo -u www-data curl --unix-socket /run/php/php8.3-fpm.sock http://localhost/(Linux)或 telnet 127.0.0.1 9000(Windows),通了再调 Nginx 配置。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











