下載檔案且自動更新網頁內容

一般來說,網頁表單送出的結果是下載一個檔案的時候,網頁的內容會停留在你輸入表單的那一個頁面。
此時如果你的網頁有製作類似 CSRF 防護的話,會因為有送出資料到伺服器的原因,導致 CSRF 的驗證碼已經變更,使原本頁面當中的表單變得無法使用。
其中一個解決方案,就是讓網頁在下載完檔案之後重新整理就可以了。

但正常來說,傳送檔案的時候,在 http 的標頭送完之後,之後所有的內容都是檔案的內容,無法送出資料給瀏覽器去進行重新整理的動作。
且大家的網路速度都不一樣,所以也無法在下載檔案之前,就先設定好在多久之後將網頁重新整理。

不過拜網路的發達,與各式神人的貢獻,於是在 stackoverflow 找到了解決方案。

就是讓在送出檔案資料之後,還可以再送出一些資料給瀏覽器去進行操作。

define('MP_BOUNDARY', '--' . sha1(microtime(true)));

header('Content-Type: multipart/x-mixed-replace; boundary="' . MP_BOUNDARY . '"');
flush();
echo('Content-Type: application/zip' . "\r\n");
echo('Content-Disposition: attachment;filename=foo.zip' . "\r\n");
echo("\r\n");
readfile('foo.zip');
echo(MP_BOUNDARY);
flush();

echo('Content-Type: text/html' . "\r\n");
echo("\r\n");
echo('<html><script type="text/javascript">location.reload();</script></html>');
echo(MP_BOUNDARY . '--');
flush();

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *