如何限制远程服务器对Image的请求

时间:2013-07-31 06:11:29

标签: php .htaccess

我有一个免费的图片上传中心。我可以从远程服务器限制服务器上的文件请求吗?怎么样?

例如

如果test.png请求每天超过1000,直到第二天请求未被接受或重定向到其他路径。

4 个答案:

答案 0 :(得分:2)

我建议你使用这个解决方案:

  1. 通过htaccess
  2. 删除对图像文件的直接访问请求
  3. 使用图像文件名
  4. 的参数创建一个php页面
  5. 存储IP地址或主机并通过php脚本显示图像
  6. 希望这些选项对您有用,我没有附加任何代码示例。将为您提供帮助。

答案 1 :(得分:1)

非常有趣,也许你可以做的是:

  1. 为您的图片创建一个唯一ID,并将所述ID存储在数据库中,并附上当天的请求数
  2. 让您的客户通过处理程序请求您的图片,例如www.yourserver.com/getImage.php?id=1234ABCD
  3. 检查来自数据库的请求数,如果小于限制,则从数据库中读取文件(例如file_get_contents(your_url_to_file)到变量
  4. 回显该变量并停止处理
  5. 如果超过限制,那么做同样的事情,而是阅读标准的“超过极限”图像
  6. 我希望这会有所帮助

答案 2 :(得分:1)

这是可能的。对于上传的每个图片,在数据库中都有一个名为“点击”的列或类似的列。

不是直接提供图像,而是通过PHP文件提供服务。将标题内容类型设置为图像格式更新计数器。

示例实现可能如下所示。请注意,这还没有准备好使用代码,但你会看到自己。

<?php

$image = $db->getWhere('images', array('img_id' => $_GET['img']));
if($image->hits >= 1000)
{
    header('location: /imageviewsexceeded.php');
    die();
}

header("Content-type: image/png");
$im     = imagecreatefrompng('images/'.$_GET['img'].'.png');
imagepng($im);
imagedestroy($im);

$db->query('UPDATE `images` SET `hits` = `hits`  + 1 WHERE `img_id` = ?', array($_GET['img']));

?>

您可能希望自定义数据库连接并实施检查图像是否存在。但我希望这是一个适合你的好地方。

快乐的编码! :)

答案 3 :(得分:1)

它取决于您的网络服务器。

是的,您可以在MySQL中存储图像列表或处理图像真正的PHP,但如果您只需要简单的控制文件请求限制,您可以使用您的网络服务器,有时也可以使用防火墙!

据我所知,NGINX可以限制特殊文件夹接受的请求。