我正在管理一个测试版网站,其中只有少数试用用户(20个中的3个)无法在某些网页上看到该内容。每个用户在不同的网络上使用不同的计算机。我确保3位用户启用了JavaScript,但这并没有解决问题。
深入研究,看起来缺少内容是由于cURL调用失败;对于这些用户来说,curl_exec()似乎失败,或者没有返回数据,而这又返回null结果,这就是他们没有看到任何信息的原因。对于这3个用户,此问题存在于3个不同的浏览器(Chrome,IE,Firefox)中。我已经验证它不是由于任何用户设置,例如用户ID,因为我可以从不同网络上的多台计算机登录他们的帐户并获得响应。
我认为罪魁祸首可能是他们的机器/网络处理SSL证书的方式。我不太熟悉SSL证书,所以请原谅我在某些方面的无知或明显的错误。但是,消除过程让我相信网站证书被这3个用户的网络/机器拒绝,因此cURL呼叫失败。我的问题是如何验证是否是这种情况,如果是这样的原因是什么,以及如何解决问题?
该网站使用Zend frameowrk使用PHP构建。 以下是相关的代码:
$ssl_cert = ZendGA_Global::getOption('curl_ssl_certificate');
$ssl_verify_peer = ZendGA_Global::getOption('curl_ssl_verify_peer');
$ssl_verify_host = ZendGA_Global::getOption('curl_ssl_verify_host');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// related to SSL cerificate verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $ssl_verify_host);
curl_setopt($ch, CURLOPT_CAINFO, $ssl_cert);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
非常感谢任何帮助。
答案 0 :(得分:0)
我已经找到了问题:cURL调用失败了,但仅仅是因为URL不正确,这是一个原创于其他地方的问题。 URL是从基本URL和一些参数创建的,但是获取基本URL的功能是获取主机名而不是域名。有些用户通过VPN登录,这导致主机名的读取略有不同,这就是URL错误的原因。好吧,这是相当复杂的,但问题已经解决。 : - )