Mac/Linux下XAMPP启用Windows专用.dll扩展是常见报错根源,因系统只识别.so文件;需注释php.ini中所有含.dll的extension=行并重启服务。

Mac/Linux 下 XAMPP 启用了 Windows 专用的 .dll 扩展
这是 macOS 或 Linux 上 XAMPP 最常见的报错根源:你在 /Applications/XAMPP/xamppfiles/etc/php.ini(macOS)或 /opt/lampp/etc/php.ini(Linux)里看到一堆 extension=php_pdo_mysql.dll、extension=php_intl.dll 这样的行,但 macOS/Linux 根本不认 .dll 文件——它们只加载 .so(shared object)文件。
直接后果就是启动 PHP 时刷出一连串 Unable to load dynamic library ... php_*.dll - image not found 或 invalid ELF header 错误。
- 打开
php.ini,搜索所有含.dll的extension=行 - 把它们全部用分号注释掉,例如:
;extension=php_pdo_mysql.dll - 保存后重启 Apache(或整个 XAMPP)
- 如果需要启用对应扩展(如 PDO MySQL),XAMPP 在 Unix 系统下已预编译好
.so版本,通常无需手动开启——只要模块本身被编译进 PHP(phpinfo()中能看到pdo_mysql已启用),就不用管extension=那一行
Windows 下 php_*.dll 报“找不到指定的模块”
这个错误不是因为路径写错了,而是依赖缺失:PHP 扩展本身是 DLL,但它可能依赖 Visual C++ 运行库、Oracle 客户端、SQL Server Native Client 等外部二进制文件。系统找不到这些依赖,就会报 找不到指定的模块(error 126)。
- 先确认你的 PHP 是 TS(线程安全)还是 NTS(非线程安全)版本:访问
http://localhost/dashboard/phpinfo.php,查Thread Safety项。值为enabled→ 用_ts.dll;disabled→ 用_nts.dll - 检查扩展名是否匹配 PHP 主版本和小版本,比如 PHP 8.2 要用
php_parallel-1.4.0-8.2-ts-vc15-x64.dll这类命名的文件,不能混用 8.1 或 VC16 编译的 - 把扩展依赖的 DLL(如
oci.dll、msvcr120.dll、sqlncli11.dll)复制到C: mpppachein目录(Apache 启动时会优先从这里找依赖) - 别把扩展放在
C: mppphpext却让extension_dir指向别的路径——用phpinfo()确认当前生效的extension_dir值
扩展路径正确但依然加载失败:检查 extension_dir 和权限
即使 .dll 或 .so 文件就在 ext/ 目录下,PHP 也可能根本没去那里找——因为 php.ini 里 extension_dir 配置被改过,或者路径中包含中文、空格、符号导致解析失败。
立即学习“PHP免费学习笔记(深入)”;
- 在
phpinfo()页面搜索extension_dir,确认显示的路径和你放扩展的物理路径完全一致(注意末尾斜杠有无、大小写、符号转义) - Windows 下路径不要用反斜杠
写死在php.ini里,统一用正斜杠/或双反斜杠\,例如:extension_dir = "C:/xampp/php/ext" - macOS/Linux 下确保
.so文件有可读权限:chmod 644 /opt/lampp/lib/php/extensions/no-debug-non-zts-*/php_intl.so - 某些扩展(如
php_opcache.dll)要求必须放在php.ini中靠前位置加载,否则依赖它的其他扩展会失败——把它移到所有extension=行最上面试试
PHP 8+ 下部分扩展已废弃或需手动编译
PHP 8.0 起移除了 mysql 扩展,8.2 起默认禁用 zend.ze1_compatibility_mode;而像 parallel、amqp、rdkafka 这类较新的扩展,XAMPP 官方包根本没打包进去,也不能直接下载 Windows DLL 就用。
-
php_mysql.dll已彻底删除,必须改用mysqli或PDO MySQL,代码里别再调mysql_connect() - PECL 扩展如
parallel在 Windows 上没有官方预编译包支持 PHP 8.2+,你得自己用phpize+ VS 工具链编译,或换用 WAMP/PHP 官方二进制包 + 手动配ext - 用
php -m命令快速验证扩展是否真被加载,比看 Apache 日志更直接;如果扩展名不在列表里,说明php.ini没生效或路径错
最容易被忽略的一点:XAMPP 控制面板启动的是它自带的 Apache,但如果你同时装了其他服务(如 IIS、Docker 的 MySQL),它们可能劫持了配置文件或端口,导致你改了 php.ini 却始终不生效——务必确认你编辑的是 Apache 实际加载的那个 php.ini,而不是某个备份或旧版本残留文件。



















