PHP下载方法挂起页面...推送下载的最佳实践?

时间:2010-09-28 20:01:17

标签: php download header http-headers

快速问题:我有一个强制用户输入电子邮件的表单,然后推送下载/附件并下载文件...文件下载正常...但是......

我的问题是,当下载开始时,页面会锁定,用户无法在任何地方导航或在页面上执行任何操作,直到下载文件(即:单击下面的“回家”链接)。有什么比我在这里提出的更好的解决方案?我知道我可能错过了一些非常简单的东西......这是我在设置私人下载页面时的第一次破解。

<script type="text/javascript">
function redirect_function(loc){
    window.location = loc;
}
</script>

<?php
// after form is submitted
$condition_met=check($_POST['email']);

if($condition_met) { ?>
    <p>Your file will begin downloading in 5 seconds.</p> <a>go home</a>
    <script type="text/javascript">
        setTimeout('redirect_function("download.php")', 5000);
    </script>
<?php } ?>

被叫(download.php)页面看起来像这样,这是它挂起页面的地方......

<?php
ob_start();
if($some_condition) { // check for authorization, etc
    $file='location/file.ext';
    header('Content-type: application/force-download');
    header('Content-disposition: attachment; filename="'. basename($file) .'"');
    header('Content-length: '. filesize($file) );
    readfile( $file );
} else {
    echo "error message";
}
ob_end_flush();
?>

2 个答案:

答案 0 :(得分:1)

取出输出缓冲区。 Readfile()将逐步弹出数据,但是输出缓冲区会捕获所有数据,直到它进入刷新状态。

答案 1 :(得分:0)

几乎在那里,您需要将内容类型更改为

application/force-download