CURL PHP 不适用于 WAMP 和 XAMPP

Posted

技术标签:

【中文标题】CURL PHP 不适用于 WAMP 和 XAMPP【英文标题】:CURL PHP not working on WAMP and XAMPP 【发布时间】:2016-10-19 07:59:14 【问题描述】:

我有这个简单的 php 脚本:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://www.instagram.com/zuck/'); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$output = curl_exec($ch); 

curl_close($ch);

echo htmlspecialchars($output);

我有 Apache 2.4.17,PHP:5.6.16(我也尝试过使用 PHP 7) 我已经尝试在远程主机服务器上运行它,它可以按预期工作。但是它在我的电脑上根本不起作用。 我尝试了 WAMP、XAMPP、禁用防火墙,直接连接到我的调制解调器(没有路由器),检查了 php.ini 和 c_url 未注释。我还尝试从http://www.anindya.com/ 下载修复程序。也不行。当我尝试curl_version 时它可以工作(所以我猜c_url 已加载)但这个脚本没有。奇怪的是没有错误只是一个空白页。 我真的没有更多的故障排除想法

【问题讨论】:

在上面的代码中在<?php 之后添加error_reporting(E_ALL);ini_set('display_errors',1); 并检查错误 你检查你的 apache error.log 了吗? 检查php_info curl是否启用 我尝试了您的两个答案,但页面上仍然没有任何内容,任何日志文件中都没有与 curl 相关的内容。 php_error.log 中唯一的内容是与 [17-Jun-2016 13:09:20 UTC] PHP Warning: unlink(D:/wamp/bin/apache/apache2.4.17/bin/icudt54.dll): Permission denied in D:\wamp\scripts\wampserver.lib.php on line 78 类似的多行内容 我已经签入了 php_info() 并且它已启用 cURL support enabled cURL Information 7.42.1 【参考方案1】:

经过一番测试,我发现了问题:

首先我检查了脚本本身的错误:

echo curl_error($ch)

返回这个:

SSL certificate problem: unable to get local issuer certificate

原来我不得不禁用 SSL 证书验证,因为我尝试过的所有网站都使用了 SSL(例如 instagram、google 等)

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)

【讨论】:

【参考方案2】:

此问题已标记为已回答,但对于以后看到此问题的人来说,@amphetamachine 的评论很重要。将 CURLOPT_SSL_VERIFYPEER 设置为 false 不是一个好主意。它可以在您的本地服务器上运行,但您真的希望它在远程服务器上运行吗?

我建议您在您的 php.ini 文件中添加证书颁发机构文件的绝对路径(您已经取消注释的位置),而不是必须记住注释掉该行以用于生产(或使其以环境为条件) cURL 扩展名)。

curl.cainfo ="your absolute local path\cacert.pem"

如果您没有此文件,则可以是 downloaded。

这样您的本地测试系统就可以正常工作,并且不会影响您的生产设置。

您可以在 cURL 选项 CURLOPT_CAPATH 中设置路径,但您也不希望在生产代码中使用此路径。

【讨论】:

以上是关于CURL PHP 不适用于 WAMP 和 XAMPP的主要内容,如果未能解决你的问题,请参考以下文章

curl 不适用于 wamp 服务器的 php 5.4.3

为啥 mail() PHP 函数不适用于 WAMP 默认安装?

为啥 mail() PHP 函数不适用于 WAMP 默认安装?

PHP curl 不适用于 Windows 和 Apache

Index.php 有效,而 Index.html 不适用于 WAMP 上的本地主机

php composer.phar 更新不适用于 Symfony 安装