0

我正在通过抓取页面 URL 并<link>在页面标题中查找标签来构建 rss 提要发现服务。file_get_contents($url)问题是某些 URL 需要很长时间才能为页面源提供服务,因此我的代码经常被卡住。

有没有办法通过预定义的超时来做到这一点,例如,如果 10 秒过去了,仍然没有提供内容,那么只需删除该 URL 并移至下一个?

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

4

2 回答 2

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

希望你在这方面取得一些成功。

于 2012-06-17T07:44:32.383 回答
2

使用“上下文”参数。您可以使用“stream_context_create”函数创建流上下文,并在 http 上下文中指定所需的超时时间。

$context = stream_context_create(array(
    'http' => array(
        'timeout' => YOUR_TIMEOUT,
    )
));
$content = file_get_contents(SOME_FILE, false, $context);

更多信息: 这里这里。

于 2012-06-17T07:45:15.187 回答