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('[]');
答案 0 :(得分:3)
使用cURL(或某些传真)并首先获取HEAD
请求。这将提供Content-Length
标头,用于在尝试检索整个内容之前告诉您URL的最终结果(以字节为单位的大小)。
答案 1 :(得分:2)
发出HEAD
请求,该请求基本上是GET
但不传输任何文件的内容。然后,您可以提取Content-length
标题,看看如果获取GET,您将获取多少数据。
然而,请注意,没有任何东西可以防止恶意用户通过“head”提供两组不同的数据 - “此图像为10k”,然后通过“get”提供数TB的数据。它会浪费你的带宽和你的带宽,但这是可能的。
答案 2 :(得分:2)
实际上,file_get_contents
中有一个可选参数,用于读取最大长度。
maxlen读取的最大数据长度。默认为读取直到结束 达到了文件。请注意,此参数将应用于流 由过滤器处理。