首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >file_get_contents加速

file_get_contents加速
EN

Stack Overflow用户
提问于 2012-06-17 15:34:30
回答 2查看 845关注 0票数 0

我正在构建一个rss feed发现服务,方法是抓取页面URL并在页面标题中找到<link>标记。问题是有些URL需要很长时间才能提供页面源代码,所以我的代码经常被file_get_contents($url)卡住。

有没有一种方法可以在预定义的超时时间内做到这一点,例如,如果10秒过去了,仍然没有提供任何内容,那么只需删除该URL并转到下一个URL即可。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-17 15:44:32

我刚读到这篇文章,所以这只是理论上的..但是..。

这是函数定义,请注意资源上下文部分:

代码语言:javascript
复制
string file_get_contents ( string $filename [, bool $use_include_path = false [, **resource $context** [, int $offset = -1 [, int $maxlen ]]]] )

如果您指定一个stream_context_create()函数的结果,并在它的选项数组中向它传递超时值,那么它可能会起作用。

代码语言:javascript
复制
$context = stream_context_create($opts);

或者,您可以创建流并直接设置它的超时:

代码语言:javascript
复制
http://www.php.net/manual/en/function.stream-set-timeout.php

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

票数 2
EN

Stack Overflow用户

发布于 2012-06-17 15:45:15

使用'context‘参数。您可以通过使用'stream_context_create‘函数并在http上下文中指定所需的超时来创建流上下文。

代码语言:javascript
复制
$context = stream_context_create(array(
    'http' => array(
        'timeout' => YOUR_TIMEOUT,
    )
));
$content = file_get_contents(SOME_FILE, false, $context);

更多信息:Herealso here.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11069674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档