2013-06-05 44 views
0

我正在構建一個PHP應用程序,其中一部分將在用戶提交HTML頁面的最後三頁時導出Excel文件。這需要一段時間來處理,所以在表單提交之前,我會在處理開始之前創建一個帶JavaScript的「請稍候」彈出窗口。然後通過設置以下下載文件後重定向的問題

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="' . $fileName . '.xls' .'"'); 
header('Cache-Control: max-age=0'); 

我有這個問題的頭創建的文件並下載用戶的機器上,就是我那麼需要將用戶重定向到表單的第一頁。我無法回顯javascript location.href調用,因爲在此之前內容類型已經被更改,所以它永遠不會屏幕顯示。出於同樣的原因,我也不能使用標準的PHP頭('Location:x')重定向。

我的問題是,在以上述方式將輸出轉移到文件之後,我該如何將輸出回到屏幕以回顯JavaScript重定向,或者以其他方式將用戶重定向到新頁面?

一如既往,任何幫助,非常感謝。

詹姆斯

+0

你不能做到這一點。一個請求=一個響應。如果請求是「給我那個文件」,你不能發送該文件和一些額外的東西。 這不是PHP的問題,而是HTTP的工作方式。 –

+0

請參閱鏈接 http://stackoverflow.com/questions/822707/php-generate-file-for-download-then-redirect –

回答

0

如上所述上面有沒有辦法發送頁面加載後新的標題,但有一種方式來獲得我想要的功能。

答案是創建一個AJAX調用,運行在setInterval循環中,該循環在PHP中查找$ _SESSION變量。這個會話變量是在Excel文件創建之後(我之前試圖放置重定向的地方)設置的,導致AJAX函數返回成功,然後執行location.href重定向到正確的頁面。

0

試試這個代碼

<?php 
    echo "<script> 
    window.location='page.php'; 
    </script>"; 
    ?> 
0

下面的代碼可以做到這一點。它可以重定向你從發送下載請求的最後一頁開始,不需要echo內容只讀文件可以做到這一點,因此下載框出現後頁面會自動卸載。

$ path是文件的路徑,使用戶下載

header("Content-type: application/vnd.ms-excel"); 
    header('Content-Disposition: attachment; filename="'.$path.'"'); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header("Cache-Control: public"); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($path)); 
    readfile($path);