如何避免滥用图片预览流量?

时间:2011-08-15 16:59:15

标签: php image preview

Facebook和Google+都有一个很棒的功能:图片预览。当您在Web上写入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('[]');

3 个答案:

答案 0 :(得分:3)

使用cURL(或某些传真)并首先获取HEAD请求。这将提供Content-Length标头,用于在尝试检索整个内容之前告诉您URL的最终结果(以字节为单位的大小)。

答案 1 :(得分:2)

发出HEAD请求,该请求基本上是GET但不传输任何文件的内容。然后,您可以提取Content-length标题,看看如果获取GET,您将获取多少数据。

然而,请注意,没有任何东西可以防止恶意用户通过“head”提供两组不同的数据 - “此图像为10k”,然后通过“get”提供数TB的数据。它会浪费你的带宽和你的带宽,但这是可能的。

答案 2 :(得分:2)

string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )

实际上,file_get_contents中有一个可选参数,用于读取最大长度。

  

maxlen读取的最大数据长度。默认为读取直到结束   达到了文件。请注意,此参数将应用于流   由过滤器处理。