【问题标题】:file_get_contents speed-upfile_get_contents 加速
【发布时间】:2012-06-17 07:34:30
【问题描述】:
我正在通过抓取页面 URL 并在页面标题中查找 <link> 标记来构建 rss 提要发现服务。问题是某些 URL 需要很长时间才能为页面源提供服务,因此我的代码经常卡在 file_get_contents($url)。
有没有办法通过预定义的超时来执行此操作,例如,如果 10 秒后仍然没有提供内容,那么只需删除该 URL 并移至下一个?
我正在考虑使用maxLen 参数来仅获取源的一部分(<head>..</head>),但我不确定在达到接收到的字节后这是否真的会停止,仍然需要整页加载。另一个问题是我不知道在此处设置什么值,因为每个页面在 head 标记中都有不同的内容,因此大小会有所不同。
【问题讨论】:
标签:
html
timeout
file-get-contents
【解决方案1】:
我刚刚读到这个,所以现在这只是理论......但是..
这是函数定义,注意资源上下文部分:
string file_get_contents ( string $filename [, bool $use_include_path = false [, **resource $context** [, int $offset = -1 [, int $maxlen ]]]] )
如果您指定 stream_context_create() 函数的结果并在其选项数组中传递 it 超时值,它可能会起作用。
$context = stream_context_create($opts);
或者您可以创建流并直接设置它的超时时间:
http://www.php.net/manual/en/function.stream-set-timeout.php
希望你能取得一些成功。
【解决方案2】:
使用“上下文”参数。您可以使用“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.