PHP CLI与Web模式配置分离导致扩展不生效,需分别用php -m和phpinfo()确认扩展加载状态,并核对各自php.ini路径及extension_dir配置。

不是 PHP 文件打不开,而是你运行它时调用的函数(比如 curl_init()、mb_strlen()、PDO::__construct())对应的功能模块根本没加载——PHP 解释器不认识这些函数,直接报错退出。
php -m 和 php --ini 必须先跑一遍
很多人卡在“不知道缺哪个”,其实 PHP 自己最清楚。别靠猜,两行命令就能定位:
-
php -m列出所有已启用的扩展,如果报错里提到curl_init()却没看到curl,那就是它 -
php --ini显示当前 CLI 模式生效的php.ini路径——Dreamweaver、命令行php script.php、甚至某些 Docker 容器都走这个路径,不是 Web 页面里的phpinfo()那个 - Web 服务(Apache/Nginx+PHP-FPM)用的是另一套配置,得用
<?php phpinfo(); ?>看页面顶部的 “Loaded Configuration File”
Linux 上装扩展别手编,用 apt/dnf 装对应版本包
Ubuntu/Debian 下,php8.2-curl 和 php-curl 不是一回事;CentOS/RHEL 下,php-curl 包默认适配系统 PHP 主版本,但如果你用 Remi 源装了 PHP 8.3,就得装 php83-php-curl。
- 查清版本:
php -v输出是PHP 8.2.12,就认准php8.2-开头的包名 - 装多个常用扩展一行搞定:
sudo apt install php8.2-mbstring php8.2-pdo php8.2-mysql php8.2-curl php8.2-xml - 装完不用改
php.ini——包管理器会自动在/etc/php/8.2/cli/conf.d/或/etc/php/8.2/apache2/conf.d/下写好启用文件 - 重启服务只影响 Web:CLI 模式不用重启;Apache 执行
sudo systemctl restart apache2;PHP-FPM 则是sudo systemctl restart php8.2-fpm
Windows 下 extension=xxx.dll 前面的分号删了还不一定行
常见陷阱是 DLL 文件根本不存在,或者依赖的 VC 运行库缺失。XAMPP/WAMP 的 php.ini 里写着 extension=php_curl.dll,但 C:\xampp\php\ext\php_curl.dll 实际是空的或损坏的。
立即学习“PHP免费学习笔记(深入)”;
- 先确认
extension_dir = "ext"指向的目录下真有那个文件(比如php_mbstring.dll) - PHP 8.0+ 默认不带
php_gd2.dll,得去官网下载对应 NTS/TS 版本手动放进去 - 启用
php_curl.dll后报 “VCRUNTIME140.dll 无法找到”,说明缺 Visual C++ 2015–2022 运行库,不是 PHP 的问题 - Windows 下
extension=行末尾**不能加 .dll**,写成extension=php_curl就行;加了反而加载失败
最容易被忽略的点:CLI 和 Web 用两套 php.ini,改错一个地方,另一个环境照样报错。验证前务必确认你在测的是哪个上下文——php -m 测 CLI,phpinfo() 测 Web,二者结果可能完全不同。



















