首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >下载计数并在php中显示文件大小

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

Stack Overflow用户
提问于 2013-12-17 10:43:11
回答 2查看 615关注 0票数 0

我有一个脚本,在其中我上传pdf文件,用户可以下载。

现在我想以MB显示下载计数和文件大小。

我还需要一些帮助,以避免任何可能的攻击,因为我的脚本非常简单。

我的download.php如下所示

代码语言:javascript
运行
复制
<?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);
    ?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-17 10:48:46

对于下载计数,您可以保存到数据库。

代码语言:javascript
运行
复制
$sql = "UPDATE `novels` SET `count`=`count`+1 WHERE `id`=".(int)$id;

假设您有一个计数列

对于下载大小,您应该将filesize移出:

代码语言:javascript
运行
复制
header("Content-Length: ".filesize($file));

这是为了允许浏览器查看进度,如果您想要显示它,它是相同的,您可以将它存储在数据库中

代码语言:javascript
运行
复制
$sql = "UPDATE `novels` SET `size`=".filesize($file)." WHERE `id`=".(int)$id;

这应该在你上传的时候设置。

请记住,由于存在漏洞,所以要转义mysql查询。对于整数来说,由于可以强制转换(int),所以非常简单。

票数 1
EN

Stack Overflow用户

发布于 2013-12-17 10:47:17

尝试添加缓存头,这将减少文件从服务器下载的次数,如果您担心出现错误的话。

代码语言:javascript
运行
复制
<?php
header("Expires: Sat, 26 Jul 2020 05:00:00 GMT"); // Date in the future
?>

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20632004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档