2010-09-28 46 views
1

快速問題:我有一個強制用戶輸入電子郵件的表單,之後下載/附件被按下並且文件被下載...文件下載正常...但是...PHP下載方法掛斷頁面...推送下載的最佳實踐?

我的問題是,當下載開始時,頁面鎖定,用戶無法導航任何地方或在頁面上做任何事情,直到文件被下載(即:點擊下面的「回家」鏈接)。比我在這裏提出的更好的解決方案?我知道我可能錯過了一些非常簡單的事情......這是我第一次創建私人下載頁面。

<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(); 
?> 
+0

5000的超時時間是什麼? – Stewie 2010-09-28 20:04:03

+0

超時在調用下載頁面之前等待5秒...更多的形式,可能不是必需的。 – Jon 2010-09-28 20:06:21

+0

這個文件有多大? – JAL 2010-09-28 23:06:51

回答

0

幾乎沒有,您需要將內容類型更改爲

application/force-download 
+0

即使使用application/x-file-to-save,文件也已下載,問題是當redirect_function()調用下載頁面時,頁面會掛起,直到文件完成下載爲止......禁止用戶單擊「go首頁「鏈接:(感謝您的回覆! – Jon 2010-09-28 20:13:35

+0

這是你說的IE嗎?我認爲唯一的解決辦法是在新窗口中打開url? – buggedcom 2010-09-28 20:40:01

+0

其實你有沒有嘗試刪除輸出緩衝? – buggedcom 2010-09-28 20:40:35

1

取出輸出緩衝區。 Readfile()會逐漸彈出數據,但是輸出緩衝區會捕獲所有數據,直到達到flush。