我在
PHP 5.5.25
上使用 Apache 2.4
和 Windows 7 x64
,但无法激活 cURL 模块。我环顾四周并尝试了所有我能想到的。请帮忙:
php.ini
中,行 extension=php_curl.dll
处于活动状态并且文件 php_curl.dll
存在于扩展目录中 C:\php\ext
php.ini
中,当我设置extension_dir = ext
时,没有加载任何扩展。当 Apache 启动时,我收到几条消息,类似于 Unable to load dynamic library
ext\php_openssl.dll- The specified module could not be found.
extension_dir = C:\php\ext
时,除了 cURL 之外,所有扩展都可以正常加载。我收到错误:Unable to load dynamic library
C:\php xt\php_curl.dll- The specified module could not be found.
php_curl.new.dll
并调整 php.ini
,但收到有关新文件名的错误消息。我还从 windows.php.net
下载了 DLL 的全新副本,但这没有什么区别。php_curl.dll
的文件权限(右键单击文件>>属性>>安全选项卡),它们与成功加载的扩展的权限相同此问题
的答复的指示,将
libeay32.dll
和 ssleay32.dll
php.ini
,因为当我将 extension_dir
值从 ext
更改为 C:\php\ext
时,PHP 启动错误消息发生了变化,正如我上面所解释的。php.ini
配置更改之间重新启动 Apache 服务器。var_dump(file_exists('C:\php\ext\php_curl.dll'));
,我会得到 boolean True
,这样 PHP 就可以看到该文件!还有什么可以解释为什么 cURL 模块未启用?
我认为您的
libssh2.dll
中也需要 PATH
。
感谢@Steven Hilder 为我指明了正确的方向。
问题是 Windows 无法看到
libssh2.dll
,这是 PHP 目录中的另一个 DLL。将此文件复制到 C:\Windows\SysWOW64
和 C:\Windows\System32
,以及我的 OP 中的其他两个 DLL 文件(libeay32.dll
和 ssleay32.dll
)是有效的。
我对这个解决方案感到不舒服,因为当更新到新的 PHP 版本时,我将很难记住用新版本覆盖这些 DLL。 因此,我决定从
System32
和 SysWOW64
目录中删除所有 3 个 DLL。 相反,我只是将 PHP bin 目录添加到 Windows 的 PATH 变量中,以便下次操作系统查找丢失的文件时,它也会在该目录中查找。这样做的额外好处是,如果另一个 DLL 出现类似问题,它将自动解决。
将 PHP bin 添加到 Windows 路径:
Start Menu
搜索栏中搜索并选择 Advanced system settings
Environment Variables
。 向下滚动系统变量列表以选择 Path
,然后单击 Edit...
打开当前的 PATH 设置;C:\php
或任何具有 php.exe
的目录附加到当前设置(分号用于分隔路径)。在 Windows 上,cURL 执行需要 SSL 证书。可能是因为其他错误正在显示。
将以下代码放在curl_exec(curlHandle)之前以忽略对SSL证书的检查
//to ignore the SSL certificate in windows
curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER,false);
每次我遇到 php 模块问题时,都与库缺少或重叠有关。
假设最好的选择是将 php 文件夹添加到 PATH 环境变量。
然而有时这还不够。 如果 php 独立版(没有 apache)加载模块,可能 php 文件夹中的 dll 没问题,但 apache 不会加载它们,因为具有相同库的其他文件夹具有优先权(例如 system32 或其他程序)。
在这种情况下,只需将主 php 文件夹中的所有 dll 复制到 apache/bin 文件夹中即可。