我正在构建一个rss feed发现服务,方法是抓取页面URL并在页面标题中找到<link>标记。问题是有些URL需要很长时间才能提供页面源代码,所以我的代码经常被file_get_contents($url)卡住。
有没有一种方法可以在预定义的超时时间内做到这一点,例如,如果10秒过去了,仍然没有提供任何内容,那么只需删除该URL并转到下一个URL即可。
我在考虑使用maxLen参数只获取源文件(<head>..</head>)的一部分,但我不确定在达到接收的字节数后是否真的会停止,因为这仍然需要完整的页面加载。这样做的另一个问题是,我不知道在这里设置什么值,因为每个页面的head标记中都有不同的内容,因此大小各不相同。
发布于 2012-06-17 15:44:32
我刚读到这篇文章,所以这只是理论上的..但是..。
这是函数定义,请注意资源上下文部分:
string file_get_contents ( string $filename [, bool $use_include_path = false [, **resource $context** [, int $offset = -1 [, int $maxlen ]]]] )如果您指定一个stream_context_create()函数的结果,并在它的选项数组中向它传递超时值,那么它可能会起作用。
$context = stream_context_create($opts);或者,您可以创建流并直接设置它的超时:
http://www.php.net/manual/en/function.stream-set-timeout.php希望你在这方面取得一些成功。
发布于 2012-06-17 15:45:15
使用'context‘参数。您可以通过使用'stream_context_create‘函数并在http上下文中指定所需的超时来创建流上下文。
$context = stream_context_create(array(
'http' => array(
'timeout' => YOUR_TIMEOUT,
)
));
$content = file_get_contents(SOME_FILE, false, $context);更多信息:Here和also here.
https://stackoverflow.com/questions/11069674
复制相似问题