我正在通过抓取网页网址并在网页标题中找到<link>
标记来构建RSS订阅源发现服务。问题是某些网址需要很长时间来提供网页来源,因此我的代码会经常停留在file_get_contents($url)
。
有没有办法在预定义的超时时间内执行此操作,例如,如果已经过了10秒但仍然没有提供内容,那么只需删除该URL并移至下一个URL?
我正在考虑使用maxLen
参数来获取源代码的一部分(<head>..</head>
),但我不确定在达到接收到的字节后这是否真的会停止需要整页加载。另一个问题是我不知道在此处设置什么值,因为每个页面在head
标记中都有不同的内容,因此大小各不相同。
答案 0 :(得分:2)
我刚刚读过这篇文章,所以现在这只是理论......但是......
这是函数定义,注意资源上下文部分:
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
希望你能取得一些成功。
答案 1 :(得分:2)
使用'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.