我在Windows服务器上使用cURL和PHP时遇到了一个奇怪的问题。我有一个非常基本的代码,我用来测试这个问题(几乎直接来自php cURL手册页):
<?php
// In this example we are referring to a page that handles html
$headers = array( "Content-Type: text/html");
// Initialise Curl
$curl = curl_init();
if ($curl === false)
throw new Exception(' cURL init failed');
// Configure curl for website
curl_setopt($curl, CURLOPT_URL, "https://google.com");
// Set up to view correct page type
curl_setopt($curl, CURLOPT_HTTPHEADER, &$headers);
// Turn on SSL certificate verfication
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
// Tell the curl instance to talk to the server using HTTP GET
curl_setopt($curl, CURLOPT_HTTPGET, 1);
// 1 second for a connection timeout with curl
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
// Try using this instead of the php set_time_limit function call
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
// Causes curl to return the result on success which should help us avoid using the writeback option
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if( ! $result = curl_exec($curl))
$result = curl_error($curl);
curl_close($curl);
echo var_dump($result);
?>
对于代码转储感到抱歉,但这是非常基本的代码,它所做的只是尝试使用HTTPS(SSL)获取google.com网站。
问题是第一次调用此脚本时,响应始终:string(22)“SSL连接超时”。
对脚本的后续调用会输出所需的结果,但是,如果我在再次调用脚本之前等待几分钟,则会再次发生超时问题。
所以,重现“错误”的步骤:
如果我调用任何其他脚本,即使在一段时间不活动之后立即响应,所以只有在涉及到cURL时才会发生此行为。
所有组件都运行最新的稳定版本,包括PHP,cURL,OpenSSL等。服务器运行带有IIS 8的Windows 2012,最新升级,在FastCGI上运行PHP。
有没有人知道如何解决这个问题?目前我有一个每5分钟运行一次的cron作业并调用上面的脚本来刷新cURL,但这感觉就像一个黑客:(
感谢。