如果不可能的话,我不能允许file_get_contents工作超过1秒-我需要跳到下一个循环。
for ($i = 0; $i <=59; ++$i) {
$f=file_get_contents('http://example.com');
if(timeout<1 sec) - do something and loop next;
else skip file_get_contents(), do semething else, and loop next;
}
有可能做这样的函数吗?
事实上,我使用的是curl_multi,我不知道如何设置一个完整的curl_multi请求的超时。
如果您只使用http URL,则可以执行以下操作:
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1
)
));
for ($i = 0; $i <=59; $i++) {
file_get_contents("http://example.com/", 0, $ctx);
}
然而,这只是读取超时,意味着两次读取操作之间的时间(或第一次读取操作之前的时间(。如果下载速率是恒定的,那么下载速率就不应该有这样的差距,下载甚至可能需要一个小时。
如果你想让整个下载不超过一秒钟,你就不能再使用file_get_contents()
了。我鼓励在这种情况下使用curl
。像这样:
// create curl resource
$ch = curl_init();
for($i=0; $i<59; $i++) {
// set url
curl_setopt($ch, CURLOPT_URL, "example.com");
// set timeout
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
}
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
源