Php Curl 在本地机器上返回数据,但在服务器上返回 bool false
Posted
技术标签:
【中文标题】Php Curl 在本地机器上返回数据,但在服务器上返回 bool false【英文标题】:Php Curl returns data on local machine but bool false on server 【发布时间】:2017-10-24 23:13:23 【问题描述】:我正在尝试获取 facebook 访问令牌
但是从浏览器和本地机器 php 脚本执行的 url 返回真实的数据值。但是,当我从服务器运行相同的脚本时,它会失败并显示 bool(false)
网址
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=".$config['appId']."&redirect_uri=" . urlencode($config['callback_url'])
. "&client_secret=".$config['secret']."&code=" . $_GET['code'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $token_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec ($ch);
var_dump($response);
其他 url 在服务器上工作。
这里有什么问题?
【问题讨论】:
可以用cURL获取其他网页吗? facebook 可能在您的虚拟主机上被阻止,或者 cURL 一起被阻止。 是的,我可以获取其他网页 但是……你能得到其他的“https”网址吗? 是的...我可以获取其他 https 网址。我试过这个页面,它成功了! 调试curl时,使用CURLOPT_VERBOSE...CURLOPT_VERBOSE说什么?curl_setopt_array($ch,array(CURLOPT_VERBOSE=>true,CURLOPT_STDERR=>STDOUT));
【参考方案1】:
我的服务器 Hostinger(免费)不允许连接到 Facebook SDK 的其他问题之一的赞成答案让我了解了!!!
我要迁移到付费服务器!
【讨论】:
【参考方案2】:您应该查看curl error 而不是只查看 curl_exec 结果:
PHP 4 >= 4.0.3, PHP 5, PHP 7) curl_error — 返回包含当前会话的最后一个错误的字符串
试试这个:
if(curl_exec($ch) === false)
echo 'Curl error: ' . curl_error($ch);
else
echo 'Operation completed without any errors';
curl_close($ch);
更新
尝试设置:
'curl' => [ CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4]
更多详情请查看here
【讨论】:
我收到 Curl 错误:无法连接到 graph.facebook.com 端口 443:连接被拒绝。应该是什么原因? @user3526204 facebook 可能会阻止您的服务器或您的服务器不允许 https 连接。这通常是使用免费虚拟主机来防止垃圾邮件的情况。 @thepieterdc 是的,这似乎是问题所在。我已将其更新为答案【参考方案3】:尝试检查curl_error
curl_error — 返回包含当前会话的最后一个错误的字符串
这可能有助于找出问题所在。
【讨论】:
比@lloiaconi 回答晚了几秒; ) 别担心,我已经投了赞成票。我收到 Curl 错误:无法连接到 graph.facebook.com 端口 443:连接被拒绝。会是什么原因? 尝试添加curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
那么也许您的主机不允许连接到 Facebook SDK ?或者无法路由解析为 ipv6 的域?
是的,这似乎是问题所在。我已将其更新为答案以上是关于Php Curl 在本地机器上返回数据,但在服务器上返回 bool false的主要内容,如果未能解决你的问题,请参考以下文章
php curl 在本地 XAMPP 上返回空字符串,但是相同的代码在生产服务器上返回正确的字符串