Facebook和Google+都有一个很棒的功能:图像预览。当你在网页的URL中输入图片时,你可以在它们之间进行选择--这是通过代理脚本完成的。
我的问题是--有没有一种方法可以重现同样的行为,同时防止用户插入指向大文件的链接,而这些大文件应该是HTML文件?代理脚本可能如下所示
<?php
$contents = file_get_contents($_GET['url']); //problem is on this line - When $_GET['url'] is url to 5GB file, it will try to download it - How could I prevent it?
$images = preg_match_all('~img src="(.*?)"~', $contents, $images);
if ($images){
echo json_encode($images[1]);
else
die('[]');发布于 2011-08-16 01:02:12
发出HEAD请求,这基本上是一个GET,但不传输文件的任何内容。然后,您可以提取Content-length标头,并查看如果它是GET,您将获取多少数据。
然而,请注意,没有什么可以阻止恶意用户提供两组不同的数据-通过“head”提供"this image is 10k“,然后通过”get“提供1TB的数据。这会浪费他们的带宽,也会浪费你的带宽,但这是可能的。
发布于 2011-08-16 01:01:11
使用cURL (或一些传真),并首先获取一个HEAD请求。这将提供URL头,它将在尝试检索整个内容之前告诉您Content-Length的最终结果(以字节为单位)。
发布于 2011-08-16 01:04:13
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
实际上,在file_get_contents中有一个可选的参数来指定要读取的最大长度。
maxlen最大读取数据长度。默认设置是读取,直到到达文件末尾。请注意,此参数应用于筛选器处理的流。
https://stackoverflow.com/questions/7068026
复制相似问题