php readfile,使用php readfile确定成功下载

我需要知道用户是否选择了下载然后单击了取消按钮,这与有错误的readfile不同.我已经检查了readfile函数返回的计数,但它显示了文件中的字节,即使用户从“另存为”对话框中取消了下载.

这是需要的原因是因为我的网站有一次性下载,其中一个成员允许另一次使用下载文件一次,然后权限消失.但是如果一个成员点击下载按钮然后决定不立即下载它,我不希望我的数据库得到更新以显示他们得到了该文件.

这涉及知识产权保护,因为文件是上传它们的成员的财产,我需要保留审计跟踪其他成员下载文件的情况,以防他们开始在互联网上浮动.但是如果readfile函数总是反映文件大小(意味着那些字节以某种方式传输),我无法知道文件是否实际下载了.

我已经看过很多关于这个主题的帖子,但是对于经常需要的东西没有真正的解决方案 – 他们是否下载了它?只知道他们点击了下载按钮并没有真正说明他们是否决定使用它,因为“另存为”对话框允许某人取消实际完成下载.

为了完整性,这是我的下载代码,直到readfile函数:

header('Content-Description: File Transfer');

header('Content-Type: application/octet-stream');

header("Content-Disposition: attachment; filename=$download_name");

header('Content-Transfer-Encoding: binary');

header('Expires: 0');

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

header('Pragma: public');

header('Content-Length: ' . filesize("sub/$doc_file"));

ob_clean();

flush();

$wasdownloaded = readfile("sub/$doc_file");

解决方法:

我担心正确答案是“不可能的” – 让我解释一下:你可能能够正确地弄清楚,当文件越过电线时,你无法可靠地弄清楚,客户是否扔掉它.

示例(按时间顺序排列):

> MSIE上的用户单击下载并显示“保存位置”对话框.

>此对话框打开时,下载将在后台启动.

>用户在对话框中导航或者什么都不做(电话响了,他说话)

>后台下载完成后,您的脚本会将下载视为完成

>用户点击“取消”

> MSIE删除临时文件,下载永远不会以用户可访问的形式存储

结果:

>用户将文件视为“未下载” – 而且他是正确的

>您的应用程序将文件视为“正确下载” – 这是正确的

标签:readfile,php,download

来源: https://codeday.me/bug/20190929/1830044.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值