file_get_contents加速

时间:2012-06-17 07:34:30

标签: html timeout file-get-contents

我正在通过抓取网页网址并在网页标题中找到<link>标记来构建RSS订阅源发现服务。问题是某些网址需要很长时间来提供网页来源,因此我的代码会经常停留在file_get_contents($url)

有没有办法在预定义的超时时间内执行此操作,例如,如果已经过了10秒但仍然没有提供内容,那么只需删除该URL并移至下一个URL?

我正在考虑使用maxLen参数来获取源代码的一部分(<head>..</head>),但我不确定在达到接收到的字节后这是否真的会停止需要整页加载。另一个问题是我不知道在此处设置什么值,因为每个页面在head标记中都有不同的内容,因此大小各不相同。

2 个答案:

答案 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);

更多信息: Herealso here.