在开始文件下载之前使用php显示消息

在开始文件下载之前使用php显示消息,php,file-io,nginx,http-headers,Php,File Io,Nginx,Http Headers,我正在使用此PHP代码开始下载,但希望在启动下载之前/之后显示“HTML”,但以下代码导致出现空白页: 输出html的函数: function writeMsg($msg) { echo "<html><body><h2>$msg</h2></body></html>"; } if(file_exists ($fullpath)) { //Start Download ob_start(); writeMsg('D

我正在使用此PHP代码开始下载,但希望在启动下载之前/之后显示“HTML”,但以下代码导致出现空白页:

输出html的函数:

function writeMsg($msg)
{
    echo "<html><body><h2>$msg</h2></body></html>";
}
if(file_exists ($fullpath)) {
//Start Download
ob_start();
writeMsg('Download Started');
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$fname\"");
header("Content-Transfer-Encoding: binary");
header('Connection: close');
ob_end_flush();
exit();
}

这是不可能的,因为您将头类型设置为application/octet stream,这意味着它是必须使用应用程序打开的二进制文件

相反,您可以显示文本,然后使用HTML或Javascript重定向用户

在HTML中,您可以使用以下命令

<META http-equiv="refresh" content="NUMBER_OF_SECONDS_HERE; URL=DOWNLOAD_LINK_HERE">

试试这个。如果不显示内联文本,可能需要一个模态来显示加载文本

HTML MARK UP 
<a href="#" id="d1">Download Now</a>

// Jquery
$(function(){
 $('#d1').click(function(){

   $(this).text('Download Started...');

   setTimeout(function(){

        window.location.replace('http://domain.com/download.php');

   },2000);

   return false;

 })
});
HTML标记
//Jquery
$(函数(){
$('#d1')。单击(函数(){
$(this.text('下载已开始…');
setTimeout(函数(){
window.location.replace('http://domain.com/download.php');
},2000);
返回false;
})
});

这只能在客户端使用javascript来完成,我现在使用的是:

jQuery文件下载是一个跨服务器平台兼容的jQuery 允许类似Ajax的文件下载体验的插件 通常不可能使用web


还有一件事,我使用X-Sendfile头来推送文件,而不暴露原始文件在磁盘上的位置,以防止直接下载-那么这样做可以吗?