我有这个PHP代码,它工作正常。
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="WTBak.zip"');
readfile($ArchiveFileName);
echo $ArchiveFileName;
unlink($ArchiveFileName);
我的问题是,如何在执行最后一行(取消链接)后发出消息?
谢谢!
答案 0 :(得分:1)
<强>假设:强>
客户端用户应该收到一条消息,这是发送给客户端的一种消息
响应是二进制
<强>摘要:强>
如果是mhtml格式,则可以将二进制信息与文本响应一起发送到客户端,在邮件中使用,并且每个浏览器都有(有些人没有)支持多部分响应。我们不要选择这种方式
发送二进制信息以响应一个请求(下载文件),另一个响应另一个请求(下载状态) - 这是一种流行的做法。
<强>解决方案:强>
:保持下载状态
// pseudocode:log_download_event(seessionid,status ='started')
标题('Content-Type:application / zip');
标题('Content-Disposition:attachment; filename =“WTBak.zip”');
的ReadFile($ ArchiveFileName);
echo $ ArchiveFileName;
的unlink($ ArchiveFileName);
// pseudocode:log_download_event(seessionid,status ='done')
:实现一个将以下载状态响应的php
//伪代码:$ DownloadStatus = get_download_status(sessionid)
echo'{staus:'+ $ DownloadStatus +'}'
:某些事件会触发下载
window.open( “http://nowhere.com/download.php?resuorce=archive-file.zip”);
window.theTrackInterval = window.setInterval(trackDownload,1000);
var trackInterval = function(){
$。get('ajax / test.html',function(data){
id(data.status=='ready'){
cleanInterval(window.theTrackInterval);
alert('download is done');
}
});
}
此解决方案将每隔一秒开始向服务器发送ajax请求,询问“已完成下载”,并且当它收到确认“它已完成”时,客户端将停止跟踪并提醒消息
错过了什么: 状态持久性的实现。我不是PHP家伙 - 原谅我这个差距
答案 1 :(得分:0)
看,如果您发送消息,它将在文件中发送,而不会向用户显示,从而破坏/更改文件的内容。您无法修改已经发送的标题!
所以,我觉得,现在有办法!
干杯
答案 2 :(得分:0)
我有一个类似的客户要求。所以我创建了一个工具来在下载文件后显示消息。
您可以在http://www.iamkumaran.com/xdownloader-a-flash-javascript-library/查看并查找演示链接。