【问题标题】:Curl Calls are not working on Apache/PHP卷曲调用不适用于 Apache/PHP
【发布时间】:2015-05-13 19:12:19
【问题描述】:

我的 curl 调用未在 Apache/PHP 上启用。我的 PHP 版本是 5.6.3 (x32) 而 Apache 是 2.4

我已经取消了在 C:/PHP/php.ini 中启用 curl 的行的注释:

extension=php_curl.dll

另外,我确保在我的路径变量中包含 PHP 路径和 PHP ext 路径,以便启用 PHP 文档指定的 ssleay32.dlllibeay32.dll。这是路径:

C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\TortoiseSVN\bin;C:\PHP;C:\PHP\ext;C:\Apache24\bin;C:\xampp\apache\bin;C:\Ruby193\bin;C:\xampp\apache\bin"

但是,在多次重新启动后,我仍然在日志中收到此错误:

PHP Fatal error:  Call to undefined function curl_init() in C:\\Apache24\\htdocs\\user\\newapi\\test.php on line 5, referer: http://localhost/newapi/

【问题讨论】:

  • 您是否确认所需的文件确实存在于扩展目录中?您是否重新启动了apache服务?如果这是一个开发环境,我建议在 windows 上运行 xampp 或 wamp 与手动安装 apache 和 php。
  • 所需文件已验证存在,我多次重新启动 apache 服务。实际上,作为附加实现,我根据文档的建议将其中一些 dll 文件复制到 C:\System32 和 C:\PHP:php.net/manual/en/curl.installation.php 复制的 dll 是 libssh2.dll、php_curl.dll、ssleay32.dll、libeay32。 dll

标签: php apache curl


【解决方案1】:

我知道这很明显,但首先要检查的是 PHP 配置,确保 curl 未在其中列出:

disable_functions=
disable_classes=

在检查 php 设置时,请确保您拥有(根据您的路径):

extension_dir="C:\PHP\ext"

验证(再次)C:\PHP\ext\php_curl.dll 确实存在并且它不是从 XAMPP 安装中复制的。

之后,根据您启动 Apache 的方式(作为使用系统帐户的服务或作为用户),您可能需要检查系统路径之外的用户路径。

在某个时间点,我发现我有多个 ssleay32.dll 和 libeay32.dll 副本,这些副本在 PHP 二进制文件导致版本冲突之前被调用。我在下面提供了一个遇到问题的示例。

查看正在使用的完整路径(假设 Apache 从用户空间运行):

C:\> echo %PATH%
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\curl;C:\Program Files\curl\dlls;C:\Web\php;C:\Python27;

在这台机器上,这些条目来自我的用户路径,而不是系统路径:

C:\Program Files\curl;C:\Program Files\curl\dlls;C:\Web\php;C:\Python27;

检查安装文件在路径中的位置:

C:\> where ssleay32.dll
C:\Program Files\curl\dlls\ssleay32.dll
C:\Web\php\ssleay32.dll
C:\> 

在这个例子中,我构建的 curl 和 php 包含的 dll 相距甚远,以至于它们彼此不兼容。 PHP 试图加载 curl 的 dll,但失败了。我没有安装它,所以我现在无法检查,但 TortoiseSVN 可能包含它们。

可能还值得验证文件的权限:

C:\> cacls c:\Web\php\ssleay32.dll
C:\Web\php\ssleay32.dll BUILTIN\Administrators:(ID)F
                        NT AUTHORITY\SYSTEM:(ID)F
                        BUILTIN\Users:(ID)R
                        NT AUTHORITY\Authenticated Users:(ID)C

附带说明,将文件复制到 %SystemDrive%\Windows\System32 是个坏主意。将任何文件放入系统路径(处于优先位置)基本上只是一种技巧,而无需向用户解释如何编辑路径变量。

【讨论】:

  • 谢谢戴夫。我实际上反对将文件复制到 System32,但有点不顾一切地想让 curl 调用工作。在 php.ini 文件中,curl 未在 disable_functions 和 disable_classes 行中列出,并且 extension_dir 是正确的。但是,我不知道会发生 curl 冲突,谢谢。我将尝试在单独的计算机上安装独立的 apache 和 php,看看是否有任何改变,或者我是否仍然遇到此问题。
猜你喜欢
  • 2019-01-01
  • 2017-09-16
  • 2011-04-14
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
相关资源
最近更新 更多