CURL PHP 不适用于 WAMP 和 XAMPP
CURL PHP not working on WAMP and XAMPP
我有这个简单的 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 已加载)但是这个脚本没有。奇怪的是没有错误只是一个空白页。
我真的没有更多的排错思路
经过一些测试我发现了问题:
首先我检查了脚本本身的错误:
echo curl_error($ch)
它返回了这个:
SSL certificate problem: unable to get local issuer certificate
原来我不得不禁用 SSL 证书验证,因为我尝试过的所有网站都使用 SSL(例如 instagram、google 等)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)
此问题已标记为已回答,但对于以后看到此问题的人来说,@amphetamachine 的评论很重要。将 CURLOPT_SSL_VERIFYPEER 设置为 false 不是一个好主意。它可以在您的本地服务器上运行,但您真的想要在远程服务器上运行吗?
我建议您将证书颁发机构文件的绝对路径添加到您的 php.ini 文件中,而不必记住在生产环境中注释掉这一行(或使其以环境为条件)将已经取消注释 cURL 扩展名)。
curl.cainfo ="your absolute local path\cacert.pem"
如果您没有此文件,可以 downloaded。
这样您的本地测试系统就可以工作,并且您不会损害您的生产设置。
您可以在 cURL 选项中设置路径 CURLOPT_CAPATH 但同样您不希望在生产代码中使用此路径。
我有这个简单的 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 已加载)但是这个脚本没有。奇怪的是没有错误只是一个空白页。
我真的没有更多的排错思路
经过一些测试我发现了问题:
首先我检查了脚本本身的错误:
echo curl_error($ch)
它返回了这个:
SSL certificate problem: unable to get local issuer certificate
原来我不得不禁用 SSL 证书验证,因为我尝试过的所有网站都使用 SSL(例如 instagram、google 等)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)
此问题已标记为已回答,但对于以后看到此问题的人来说,@amphetamachine 的评论很重要。将 CURLOPT_SSL_VERIFYPEER 设置为 false 不是一个好主意。它可以在您的本地服务器上运行,但您真的想要在远程服务器上运行吗?
我建议您将证书颁发机构文件的绝对路径添加到您的 php.ini 文件中,而不必记住在生产环境中注释掉这一行(或使其以环境为条件)将已经取消注释 cURL 扩展名)。
curl.cainfo ="your absolute local path\cacert.pem"
如果您没有此文件,可以 downloaded。
这样您的本地测试系统就可以工作,并且您不会损害您的生产设置。
您可以在 cURL 选项中设置路径 CURLOPT_CAPATH 但同样您不希望在生产代码中使用此路径。