我们在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可以找到证书吗?