“缺少扩展”指PHP脚本调用的扩展(如pdo_mysql、curl)未在php.ini中启用或未安装,导致函数未定义;需通过php -m和php -i定位配置文件并启用对应extension=行。
这通常不是文件打不开,而是你在用 PHP 命令行(php script.php)或 Web 服务器运行 PHP 脚本时,脚本里调用了某个扩展(比如 pdo_mysql、curl、mbstring),但当前 PHP 环境没启用它。错误信息可能类似:
PHP Fatal error: Uncaught Error: Call to undefined function curl_init()
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql'
本质是 php.ini 里没开对应 extension=xxx 行,或扩展文件根本不存在。
别猜,直接让 PHP 自己说:
php -m 查看已启用的扩展列表 php -i | grep "Loaded Configuration File" 找到正在用的 php.ini 路径 php.ini,搜索 extension=,看目标扩展是否被注释(前面有分号 ;) json_encode(),其实不用装——json 是 PHP 5.2+ 内置模块,大概率是 extension=json 被你手动关了常见必开扩展(尤其 Laravel、WordPress 类项目):
mbstring(多字节字符串处理)openssl(HTTPS、加密)pdo 和具体驱动如 pdo_mysql 或 pdo_pgsql
curl(HTTP 请求)zip(解压 ZIP 包)PHP 扩展在 Linux 上常以系统包形式提供,不是用 pecl install 硬编译(除非特殊需求):
php -v(注意是 php8.1 还是 php7.4) sudo apt install php8.1-mbstring php8.1-curl php8.1-pdo php8.1-mysql extension=xxx.so 写进对应配置片段(如 /etc/php/8.1/cli/conf.d/20-mbstring.ini) sudo systemctl restart apache2;Nginx + PHP-FPM 则执行 sudo systemctl restart php8.1-fpm ⚠️ 容易踩的坑:
php-mysql 却用 mysqli 函数?不对——要装 php-mysqlnd 或确认 mysqli 模块是否已启用php.ini:php -i 和 phpinfo() 输出的“Loaded Configuration File”路径可能不同,得两边都检查php-sqlite3,要用 SQLite 就得额外 apt install php8.1-sqlite3
Windows PHP 通常是 zip 包解压版,扩展文件(.dll)都在 ext/ 目录下,只需开启:
php.ini(留意是 php.ini-development 还是 php.ini-production,改对那个) ; extension=mbstring 的行,删掉前面的分号:extension=mbstring extension_dir 指向正确路径,例如:extension_dir = "ext"(相对路径)或 extension_dir = "C:/php/ext"(绝对路径) ⚠️ 注意:
.dll,PHP 会自动补全;写成 extension=php_mbstring
.dll 反而可能失败php_curl.dll 依赖 libssh2.dll),需把它们复制到 System32 或 PHP 根目录扩展没生效,最值得先盯住的永远是:你改的是哪个 php.ini?它是不是当前环境真正在读的那个?