64位Windows Server 2016下Apache无法加载php_curl.dll求助
我来帮你梳理几个针对性的排查方向,应该能解决这个curl扩展加载失败的问题:
核对php.ini的扩展配置细节
先确认php.ini里的扩展配置是否准确:要写extension=curl(PHP 7+支持省略php_前缀和.dll后缀),同时检查extension_dir是不是绝对路径,比如extension_dir = "C:/Users/tester/Desktop/Web Server/php-7.2.5-Win32-VC15-x64/ext",记得用正斜杠或者双反斜杠,避免路径解析出错。安装匹配的VC15运行库
你用的是VC15编译的64位PHP和Apache,必须确保系统安装了Visual C++ Redistributable for Visual Studio 2017(64位)。很多时候扩展加载失败就是因为缺了底层的运行库,安装后重启服务器再试。检查curl扩展的核心依赖文件
别忽略libcurl.dll!这个文件是php_curl.dll的核心依赖,必须放在PHP的根目录(不是ext文件夹)。你之前复制的libeay32.dll、ssleay32.dll是SSL相关,但libcurl是基础,要是它缺失或者版本不对,肯定加载失败。另外可以用Dependency Walker工具打开php_curl.dll,看看所有依赖的DLL是不是都存在且是64位版本,不能混32位文件。用PHP CLI模式排查环境问题
打开命令提示符,切换到PHP根目录,运行php -m看看curl扩展能不能正常显示。如果CLI模式下没问题,那问题大概率在Apache这边:- 检查Apache服务的权限:右键Apache服务→属性→登录,改成本地系统账户(或有足够权限的账户),重启服务试试,可能是权限不够读不到PHP目录的文件。
- 在Apache的
httpd.conf里手动添加PHP路径到环境变量:SetEnv PATH "C:/Users/tester/Desktop/Web Server/php-7.2.5-Win32-VC15-x64;${PATH}",这样Apache启动时就能正确找到PHP的依赖DLL了。
重新下载完整的PHP包
有时候压缩包解压时会损坏文件,导致扩展出问题。重新下载对应版本的PHP包,解压到新目录,重新配置php.ini和Apache的PHP模块,再测试curl加载情况。清理系统PATH中的冲突项
检查系统PATH里有没有其他版本的PHP或者旧的curl相关DLL,这些可能会让Apache加载错误的文件。在命令行运行where libcurl.dll,看看返回的路径是不是你当前PHP目录下的文件,如果不是,把冲突路径从PATH里移除,或者把PHP目录移到PATH最前面。
内容的提问来源于stack exchange,提问作者Mr J

