我有一个简单的下载页面,它接收文件 URL、下载计数器 .TXT 文件 url 以及下载后的重定向链接。这都是通过 PHP 参数发送的。问题是,有人一直在向下载者发送垃圾邮件并弄乱计数。我想在下载计数器上设置一个上限,以便每个可下载项目的每个地址仅计算 3 次点击。
我需要能够仅使用 PHP 而不使用 MySQL 数据库来执行此操作。我确实有这个理由,我的数据库服务器是垃圾且不可靠,我不能让计数器停机。
这是我当前的下载器 PHP 文件。进一步的信息,这个 PHP 文件位于它自己的文件夹中,每个下载计数 TXT 文件都有/counter
一个/counter/data
目录。这些文件只存储一个整数值。
<?
//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 地址,并防止下载计数器仅使用 PHP 而没有数据库从该地址计算超过 3 次下载?
非常感谢您的帮助。
编辑: 正如我上面所说,我不能使用数据库。另外,我对两种解决方案感兴趣,但不确定如何使它们工作(我正在寻找代码示例),一种是 cookie,另一种是充当数据库的文本文件。