1

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

例如:

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

4

4 回答 4

2

我可以建议你,用这个解决方案:

  1. 去掉通过htaccess直接访问图片文件到服务器的请求
  2. 以图片文件名为参数创建一个php页面
  3. 存储IP地址或主机并通过php脚本显示图像

希望这个选项对你有用,我没有附加任何代码示例。后面会帮你。

于 2013-07-31T06:22:58.880 回答
1

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

  1. 为您的图像设置一个唯一 ID,并将所述 ID 与当天的请求计数一起存储在数据库中
  2. 让您的客户通过处理程序请求您的图像,例如 www.yourserver.com/getImage.php?id=1234ABCD
  3. 检查来自数据库的请求计数,如果它小于您的限制,则将数据库中的文件(例如 file_get_contents(your_url_to_file) 读入变量
  4. 回显该变量并停止处理
  5. 如果超过限制,则执行相同的操作,而是读取标准的“超出限制”图像

我希望这有帮助

于 2013-07-31T06:20:31.547 回答
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']));

?>

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

快乐编码!:)

于 2013-07-31T06:28:23.743 回答
1

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

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

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

于 2014-06-11T00:30:43.070 回答