php 编程,使用file_get_contents('http://www.vketch.com/')获取远程页面超时为啥不会返回false

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 编程,使用file_get_contents('http://www.vketch.com/')获取远程页面超时为啥不会返回false相关的知识,希望对你有一定的参考价值。

php 编程,使用file_get_contents('http://www.vketch.com/')获取远程页面超时为什么不会返回false
如果返回false我就可以用后面这句判断有没取提内容(file_get_contents('http://www.vketch.com/')==flase)
但是它不返回false,我怎样判断因为超时没有获取到内容呀?
<br />
<b>Warning</b>: file_get_contents(http://www.aboutbyc.com/) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
in <b>F:\phpnow\htdocs\domain-get\t3.php</b> on line <b>18</b><br />
<br />
<b>Fatal error</b>: Maximum execution time of 30 seconds exceeded in <b>F:\phpnow\htdocs\domain-get\t3.php</b> on line <b>18</b><br />

你用的这个函数由于使用的是高层传输协议,很容易超时,即使能够判断也因为重试次数太多而无法使用。至于curl函数,则不是为这种应用设计的。最好是使用fsocket函数,不会存在你说的问题。 参考技术A if(@false == file_get_contents(''))

超时的话可以加上时间限制
参考技术B 这个是没有超时返回的,建议换成curl扩展库来请求页面,这样可以设置超时 参考技术C 对 用curl

php中的file_get_contents或curl?

【中文标题】php中的file_get_contents或curl?【英文标题】:file_get_contents or curl in php? 【发布时间】:2012-10-11 20:55:13 【问题描述】:

在 PHP 中应该使用 file_get_contentscurl 中的哪一个来发出 HTTP 请求?

如果file_get_contents 可以完成这项工作,是否需要使用curl?使用curl 似乎需要更多的行。

例如:

卷曲:

$ch = curl_init('http://www.website.com/myfile.php'); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $content); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec ($ch); 
curl_close ($ch); 

file_get_contents:

$output = file_get_contents('http://www.website.com/myfile.php'.$content); 

【问题讨论】:

curl 可以比 file_get_contents() 做更多的事情,但是如果您不需要它做的任何事情,那么请采用更简单的方法。 我听说,使用 file_get_contents 有一些安全威胁,所以很少有服务器在 PHP 中禁用此功能。 @Dagon phpsec.org/projects/phpsecinfo/tests/allow_url_fopen.html 这是我第一次读到关于安全问题的地方。此外,cURL 似乎比 file_get_contents 快。这是一个关于相同的好帖子 -> ***.com/questions/555523/… @Dagon 在我以前的工作中,我们的企业 PHP 包禁用了 allow_url_fopen,因此在抓取 Web 服务时我们不得不使用 cURL。不确定具体问题是什么,但使用 cURL,您可以执行诸如在帖子中传递登录信息之类的操作,并且比使用 file_get_contents 更灵活地处理返回的数据。 @teami 特定于 include() 和 require(),而不是 op 的 file_get_contents 问题 【参考方案1】:

首先cURL 有很多选项可以设置。您真的可以设置任何您需要的选项 - 许多支持的协议、文件上传、cookie、代理等等。

file_get_contents() 实际上只是 GET 或 POST 文件并得到结果。

但是:我尝试了一些 API 并做了一些“基准测试”:

cURL 比 file_get_contents快很多 用你的终端试试吧:time php curl.php

curl.php:

<?php 
$ch = curl_init();
$options = [
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL            => 'http://api.local/all'
];

curl_setopt_array($ch, $options);
$data = json_decode(curl_exec($ch));
curl_close($ch);

fgc.php

<?php 
$data = json_decode(file_get_contents('http://api.local/all'));

在我的例子中,平均 cURL 比 file_get_contents 快 3-10 倍。 api.local 响应缓存的 JSON 文件 - 大约 600kb。

我认为这不是巧合 - 但您无法准确衡量这一点,因为网络和响应时间差异很大,这取决于它们当前的负载/网络速度/响应时间等。(本地网络胜出'不要改变效果 - 也会有负载和流量)

但对于某些用例,file_get_contents 实际上也可能更快。

于是我构建了一个简单的函数:https://git.io/J6s9e

【讨论】:

【参考方案2】:

CurlFile_get_contents 快。我只是对此做了一些快速的基准测试。

使用 file_get_contents 获取 google.com 耗时(以秒为单位):

2.31319094 
2.30374217
2.21512604
3.30553889
2.30124092

CURL 拍摄:

0.68719101
0.64675593
0.64326 
0.81983113
0.63956594

【讨论】:

您发布的这些测试结果(以秒为单位)真的是您在您的测试中获得的结果吗?差异似乎有点大..您使用什么php版本?【参考方案3】:

供您参考,curl 是否可以让您有更多选择并使用 GET/POST 方法和发送参数。

file_get_contents 将有更少的选项供您获取/发布参数。

希望这会有所帮助...

【讨论】:

以上是关于php 编程,使用file_get_contents('http://www.vketch.com/')获取远程页面超时为啥不会返回false的主要内容,如果未能解决你的问题,请参考以下文章

解决file_get_contents无法请求https连接的方法

php curl的使用

php中的file_get_contents或curl?

如何使用 file_get_contents 在 PHP 中发布数据?

JSON 到 PHP 数组使用 file_get_contents

php请求远程url内容方法