curl_exec在SDK中不起作用,但curl在命令行中起作用

时间:2014-11-25 22:19:56

标签: php curl ssl-certificate

我们在Amazon Linux EC2实例上托管了一个网站。我们的PHP版本是5.3.29。我们还没有升级到5.4,因为我们的某些代码不能向前兼容。我们的curl目前是7.38.0版。软件更新后,我们开始在几个PHP SDK中遇到curl_exec命令的问题。命令行上的curl命令仍然可以正常工作。我们遇到问题的两个SDK是Facebook和Mandrill SDK。我们也遇到了Amazon S3 SDK的问题,但我在SO上找到了添加

的解决方案
'scheme' => 'http'

到S3对象参数,它解决了这个问题。这个在Guzzle中产生了一个CurlException。

搜索Stack Overflow我已经看到有关将CURLOPT_SSL_VERIFYPEER设置为false的帖子,但是这对其他两个SDK没有帮助。

两个SDK都会抛出CurlException 77,"错误设置证书验证位置"。这似乎表明curl无法找到SSL证书文件,但我检查了certs文件夹的权限,并且他们是755并由root:root拥有,所以我相信这意味着它们应该是可访问的。我也尝试将CURL_CAPATH设置到我的证书所在的目录,但这也没有帮助。

对于Facebook,curl_getinfo给出以下值:

array(22) { ["url"]=> string(45) "https://graph.facebook.com/oauth/access_token" 
["content_type"]=> NULL 
["http_code"]=> int(0) 
["header_size"]=> int(0) 
["request_size"]=> int(0) 
["filetime"]=> int(-1) 
["ssl_verify_result"]=> int(0) 
["redirect_count"]=> int(0) 
["total_time"]=> float(0.00424) 
["namelookup_time"]=> float(0.004197) 
["connect_time"]=> float(0.019219) 
["pretransfer_time"]=> float(0) 
["size_upload"]=> float(0) 
["size_download"]=> float(0) 
["speed_download"]=> float(0) 
["speed_upload"]=> float(0) 
["download_content_length"]=> float(-1) 
["upload_content_length"]=> float(-1) 
["starttransfer_time"]=> float(0) 
["redirect_time"]=> float(0) 
["certinfo"]=> array(0) { } 
["redirect_url"]=> string(0) "" }

和Mandrill:

array(22) {
  ["url"]=>
  string(59) "https://mandrillapp.com/api/1.0/messages/template-name.json"
  ["content_type"]=>
  NULL
  ["http_code"]=>
  int(0)
  ["header_size"]=>
  int(0)
  ["request_size"]=>
  int(0)
  ["filetime"]=>
  int(-1)
  ["ssl_verify_result"]=>
  int(0)
  ["redirect_count"]=>
  int(0)
  ["total_time"]=>
  float(0.004241)
  ["namelookup_time"]=>
  float(0.004194)
  ["connect_time"]=>
  float(0.005479)
  ["pretransfer_time"]=>
  float(0)
  ["size_upload"]=>
  float(0)
  ["size_download"]=>
  float(0)
  ["speed_download"]=>
  float(0)
  ["speed_upload"]=>
  float(0)
  ["download_content_length"]=>
  float(-1)
  ["upload_content_length"]=>
  float(-1)
  ["starttransfer_time"]=>
  float(0)
  ["redirect_time"]=>
  float(0)
  ["certinfo"]=>
  array(0) {
  }
  ["redirect_url"]=>
  string(0) ""
}    

我注意到这里的certinfo都是假的,这似乎再次表明证书问题。不过,我不确定那个证书问题是什么。我需要设置一个CURL选项,以便curl可以找到证书吗?

0 个答案:

没有答案