cli与web使用独立php实例:php -v查的是path中的可执行文件,phpinfo()显示的是web服务器配置的php(如apache的mod_php或nginx的php-fpm),二者路径和配置文件通常不同,需分别确认并重启对应服务。

php -v 显示 8.0,但 Web 页面里 phpinfo() 显示 7.4
这不是 PHP 版本“不一致”,而是 CLI 和 Web 用了两个完全独立的 PHP 实例。Web 服务器(Apache/Nginx)调用的是它自己配置的 php-cgi 或 mod_php,和你在终端敲 php 命令走的不是同一个可执行文件。
验证方式:在命令行运行 which php(Linux/macOS)或 where php(Windows),再对比 Web 中 phpinfo() 输出的 “Loaded Configuration File” 路径 —— 两者十有八九指向不同目录。
- Apache + mod_php:PHP 版本由
LoadModule php_module指向的.dll或.so决定,和PATH无关 - Nginx + php-fpm:看
fastcgi_pass指向的 socket 或端口,背后是哪个php-fpm进程(比如php-fpm-8.0) - CLI 模式:只认
PATH里第一个php可执行文件,以及它加载的php.ini
怎么让 CLI 和 Web 用同一个 PHP 8.0 配置
目标不是“强制统一”,而是“明确控制”——你得知道每个环节用的是谁,并能主动切换。最稳妥的做法是:把 Web 服务绑定到 CLI 当前使用的 PHP 实例上。
例如你已确认 php -v 输出的是 PHP 8.0.33,且 php --ini 显示配置文件在 /usr/local/php80/etc/php.ini:
- Apache:修改
httpd.conf,确保LoadModule php_module指向该 PHP 安装目录下的libphp.so(TS 版),并用PHPIniDir "/usr/local/php80/etc" - Nginx:停止旧
php-fpm,启动对应版本:brew services start php@8.0(macOS Homebrew)或sudo systemctl start php8.0-fpm(Ubuntu),再改fastcgi_pass为unix:/usr/local/php80/var/run/php-fpm.sock - 别碰
php.ini的自动复制逻辑——Web 和 CLI 的php.ini可以、也应该共用同一份,只要路径一致,extension_dir和扩展启用状态就天然同步
为什么 php think run 正常,但浏览器访问却报错 Extension not loaded
因为 php think run 走的是 CLI 模式,而浏览器请求走的是 Web SAPI(如 fpm 或 apache2handler)。即使版本号一样,扩展启用状态可能完全不同。
关键检查点:
- CLI 下执行
php -m | grep pdo_mysql,确认扩展已列出来 - Web 下新建
info.php,输出phpinfo(),搜索 “pdo_mysql” 看是否显示 “enabled” - 两者都 enabled 却行为不同?大概率是
php.ini加载路径不同 → 运行php --ini和phpinfo()对比 “Configuration File (php.ini) Path” - 常见坑:Nginx 下漏配
cgi.fix_pathinfo=0,导致 PHP 错误地解析非 .php 文件,进而跳过扩展加载流程
多版本共存时,如何临时切 Web 到 PHP 8.0
不需要重装、不改全局 PATH,靠 Web 服务器配置定向即可。重点不是“切换 PHP”,而是“指定 PHP-FPM 实例”。
以 macOS Homebrew + Nginx 为例:
- 先确认 PHP 8.0 已安装:
brew install php@8.0 - 启动它:
brew services start php@8.0(会监听/opt/homebrew/var/run/php-fpm-8.0.sock) - 编辑站点配置,在
location ~ \.php$块内写死:fastcgi_pass unix:/opt/homebrew/var/run/php-fpm-8.0.sock; - 重启 Nginx:
brew services restart nginx
Windows 用户用 phpEnv 或 Laragon,直接在软件界面里选中 “PHP 8.0”,它会自动更新 Apache/Nginx 的模块路径或 FPM socket 配置 —— 但注意:这不会影响 CMD 里的 php 命令,除非你同步改了系统 PATH。
真正容易被忽略的是:Web 服务器进程往往不会自动 reload ini 配置,哪怕你改了 php.ini,也必须重启 php-fpm 或 Apache 才生效。别只改配置、不重启服务。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











