簡體   English   中英

PHP標題:內容處理:附件,然后位置:一些網址

[英]PHP Header : Content-disposition: attachment , then Location: some url

我的目標是在瀏覽器發出附件下載后將瀏覽器重定向到新頁面。

header("Content-type: text/csv");
header("Cache-Control: no-store, no-cache");
header("Content-disposition: attachment;filename=file.csv");
// csv output logic here

// forward to next page
header("Location: $url");

可能嗎 ?

更新 :上述結果

CSV的最后一行顯示PHP錯誤:

無法修改標頭信息 - 已由...發送的標頭

這是因為CSV邏輯部分修改了行header("Location: $url");之前的內容header("Location: $url");

更新 :我嘗試了另一種方法:回顯一個由關鍵行組成的小HTML <meta http-equiv="refresh" content="0; url=$url" /> (當然<html> <head> <body>甚至DOCTYPE也得到了回應)。 但是,HTML代碼仍顯示在CSV內容中。

使用當前代碼,沒有你不能。 您強制瀏覽器將更多內容下載到file.csv,以便忽略更新的標頭。

但是,看看元刷新的東西。 您將能夠在頁面加載之間添加延遲(以便用戶實際看到網頁)並在刷新時將文件發送到下載。

我希望我可以添加一個例子,但我現在正坐在一輛被一些嬰兒哭泣的火車里,我很無聊。

為防止元標記(和其他HTML)出現在CSV文件內容中,我們可以使用一些$ _GET值。

<?php
if (isset($_GET['dl']) && $_GET['dl'] == '1') {
header("Content-type: text/csv");
header("Cache-Control: no-store, no-cache");
header("Content-disposition: attachment;filename=file.csv");
// csv output logic here
}
else{
?>
web page here, with html, head, title, body, and whatnot tags. 
In the head tag, add this:
<meta http-equiv="refresh" content="5;url=http://my.web.site.com/download.php?dl=1"> 
<?php
}
?>

您可以在客戶端執行此操作:在新窗口中打開文件下載,然后使用javascript重定向當前窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM