我有一个脚本,我可以上传用户可以下载的pdf文件。
现在我想以MB为单位显示下载次数和文件大小。
我还想要一些帮助以避免任何可能的攻击,因为我的脚本非常简单。
我的download.php
如下
<?php
include("admin/config.php");
$id = $_REQUEST['id'];
$sql = "SELECT * FROM novels where id=$id";
$rs = mysql_query($sql);
$row = mysql_fetch_array($rs);
$pdf = $row['pdf'];
$name = $row['title'];
$path = 'admin/';
$file = $path.$pdf;
$filename = $pdf;
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename='$name-bookspk.net.pdf'");
header("Content-Length: filesize($file)");
readfile($file);
?>
答案 0 :(得分:1)
对于下载计数,您可以保存到数据库
$sql = "UPDATE `novels` SET `count`=`count`+1 WHERE `id`=".(int)$id;
假设你有一个计数栏
对于下载大小,您应该移出filesize
:
header("Content-Length: ".filesize($file));
这是为了让浏览器看到进度,如果你想显示它,它是一样的,你可以将它存储在数据库中
$sql = "UPDATE `novels` SET `size`=".filesize($file)." WHERE `id`=".(int)$id;
这应该在您上传时设置。
记得因漏洞而逃避你的mysql查询。对于整数很简单,因为你可以投射(int)
。
答案 1 :(得分:0)
尝试添加缓存标头,如果您担心误报,这应该会减少从服务器下载文件的次数。
<?php
header("Expires: Sat, 26 Jul 2020 05:00:00 GMT"); // Date in the future
?>
您可能应该在上传时将文件大小存储在表格中,这样您就可以通过一次调用数据库来获取所有信息。