使用file_get_contents远程调用一个纯文本总是超时怎么办?

2013-08-26 10:43:19 +08:00
 bobopu
RT,使用file_get_contents('http://xxxx.com/xxxx.txt');刚开始还可以,过上一阵就总是超时调用不了了,这该怎么办?
5913 次点击
所在节点    PHP
16 条回复
BOYPT
2013-08-26 10:46:49 +08:00
配置一个超时参数:

<?php
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
?>


外部资源属于不可控因素,程序里面要做好这类异常处理。
bobopu
2013-08-26 10:57:53 +08:00
@BOYPT 请问当大于设定的时间时是不显示,还是输出错误代码呢?
anewg
2013-08-26 11:29:22 +08:00
@bobopu file_get_contents返回false
lusin
2013-08-26 11:34:15 +08:00
用curl好像会好一些
bobopu
2013-08-26 11:36:44 +08:00
@BOYPT
@anewg 提示
Warning: file_get_contents(http://xxxx.com/xxxx.txt) [function.file-get-contents]: failed to open stream: Connection timed out in /home/xxx/xxx on line 8
BOYPT
2013-08-26 11:38:15 +08:00
@bobopu 这要你自己决定啊,超时之后是自动重试、显示给用户、还是换一个地址,你都知道这一步了下一步自然自己决定了。
hennywei
2013-08-26 11:57:17 +08:00
建议用curl
itaotao
2013-08-26 12:20:10 +08:00
set_time_limit(0)
anewg
2013-08-26 12:30:48 +08:00
@bobopu 你连接的页面要存在才返回false,你在写个test.php,里面sleep(10)。file_get_contents("http://localhost/test.php", 0, $ctx)返回的就是false
Sokos
2013-08-26 12:43:20 +08:00
尽量不用 file_get_contents。参考这文章 http://www.s135.com/file_get_contents
vibbow
2013-08-26 13:27:38 +08:00
hello570111
2013-08-26 16:13:27 +08:00
file_get_contents默认没有超时时间,而且出错之后会终止整个程序而不是继续执行后面的语句,最多调试的时候用用,正式情况下最好用curl。
bobopu
2013-08-26 16:24:20 +08:00
@anewg 哦哦,我要调用的是纯文本文件,咋弄?
bobopu
2013-08-26 16:29:52 +08:00
@hennywei
@hello570111
@BOYPT 换做curl后又提示Fatal error: Call to undefined function curl() in /xxx/xxx.php on line 8 了。。。。
hello570111
2013-08-26 17:22:38 +08:00
@bobopu 因为php没有curl()这个函数,它不是这么用的(吐槽一下,难怪大家都喜欢用file_get_contents,太方便了),需要先curl_init()再curl_setopt()设置什么的。搜索一下“php curl使用”就知道了,可以自己再封装一下。
bobopu
2013-08-26 17:32:33 +08:00
@hello570111 好吧,我真是太菜了。。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/80231

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX