下载计数并在php中显示文件大小

时间:2013-12-17 10:43:11

标签: php security filesize

我有一个脚本,我可以上传用户可以下载的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);
    ?>

2 个答案:

答案 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
?>

您可能应该在上传时将文件大小存储在表格中,这样您就可以通过一次调用数据库来获取所有信息。