У меня есть простая страница загрузки, которая получает URL-адрес файла, URL-адрес загружаемого файла .TXT-файла и ссылку перенаправления после загрузки. Все это отправляется через аргументы PHP. Проблема в том, что кто-то рассылал спамеры и загружал счет. Я хочу поставить колпачок на счетчик загрузки, поэтому он будет считать только 3 обращения от каждого адреса, на загружаемый элемент.Как я могу заставить мой загружаемый PHP загрузчик перестать повторять загрузки для IP-адресов?
Мне нужно сделать это только с PHP и без базы данных MySQL. У меня есть аргументы в пользу этого, мой сервер базы данных мусор и ненадежный, я не могу отключить счетчик.
Это мой текущий файл PHP загрузчика. Дополнительная информация, этот файл PHP находится в своей собственной папке по адресу /counter
с каталогом /counter/data
для каждого файла, загружающего TXT. Эти файлы хранят только одно целое значение.
<?
//Retrieve downloadable file URL
$c_url = urldecode($_GET['url']);
//retrieve redirect page URL
$c_page = urldecode($_GET['page']);
//Retrieve download counter TXT URL
$c_file = "../" . $_GET['file'];
?>
<!-- Set up simple styles -->
<head>
<style type="text/css">
body{
background: url("../images/background.png");
color: #ffffff;
}
</style>
</head>
<!-- Creates download file URL in hidden iFrame -->
<iframe src="<?echo $c_url;?>" id="hiddenFrm" style="display:none;" frameborder="0"></iframe>
<body>
<center>
<h1>Your download is starting</h1><br>
<p>You should be redirected momentarily...<br>
<?
<br><br>
if (file_exists($c_file))
{
//Add one value to the counter file
file_put_contents($c_file, ((int) file_get_contents($c_file)) + 1);
//Set an automatic redirect for the page (Return home)
?>
<meta http-equiv="refresh" content="0;url=<?echo $c_page;?>" />
<?
//Display information about the download, and alternate exits to the page
if ($c_url != "")
{?>
<b><a href="<?echo $c_url?>">Click here</a> if the download did not start.<br><br>
<a href="<?echo $c_page?>">Click here</a> if this page does not close after your download.</b></p>
<?}
else
{
?>
<b><a href="<?echo $c_page?>">Click here</a> if you are not redirected automatically</b></p>
<?
}
}
else
{
//In case our counter file is improperly specified
echo "<br><br><br>Error, the counter file was not found!";
}
?>
</center>
</body>
Мой вопрос упрощена: Как я могу хранить IP-адреса людей, которые загружают каждый продукт и предотвратить загрузку счетчика из насчитывающей более 3 загрузки с этого адреса, используя только PHP и нет базы данных?
Помощь очень ценится.
EDIT: Как я уже говорил выше, я не могу использовать базы данных. Кроме того, меня интересуют два решения, но не знаю, как заставить их работать (я ищу примеры кода), один из которых - файлы cookie, а другой - текстовые файлы, действующие в качестве баз данных.
Ссылка http://stackoverflow.com/questions/15579620/how-to-block-100-000-individual-ip-addresses может быть это поможет .. –
Время, затрачиваемое на запись быстрого хэша для хранения IPS и подсчета количества звонков и даже эффективного обновления, уже будет менее выгодным, чем исправление этого сервера базы данных «trash and unreliable» и поможет вам избежать головной боли позже. Если ваш веб-сервер может обслуживать сайты, он также должен иметь возможность запускать базу данных для этого –
Вы пробовали кеш? – kdazzle