4

私の目標は、ブラウザが添付ファイルのダウンロードを発行した後、ブラウザを新しいページにリダイレクトすることです。

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");

出来ますか ?

UPDATE : 上記の結果

CSV の最後の行に PHP エラーが表示されます。

ヘッダー情報を変更できません - ヘッダーは既に送信されています...

CSVロジック部分が行の前の内容を変更したためですheader("Location: $url");

更新: 別の方法を試しました: キー行で構成される小さな HTML をエコーする<meta http-equiv="refresh" content="0; url=$url" />(もちろん<html> <head> <body>、DOCTYPE もエコーされます)。それでも、HTML コードは CSV コンテンツに表示されます。

4

2 に答える 2

3

現在のコードでは、できません。新しいヘッダーが無視されるように、ブラウザーに追加のコンテンツを file.csv にダウンロードさせます。

ただし、メタリフレッシュのものを見てください。ページの読み込みと (ユーザーが実際に Web ページを表示するため) の間に遅延を追加し、ファイルを送信して更新時にダウンロードすることができます。

例を追加できたらいいのにと思いますが、私は現在、泣いている赤ちゃんに囲まれて電車に乗っていて、退屈しています.

CSV ファイルのコンテンツにメタ タグ (およびその他の HTML) が表示されないようにするために、$_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
}
?>
于 2012-12-17T06:48:40.593 に答える
1

クライアント側で実行できます。ファイルのダウンロードを新しいウィンドウで開き、現在のウィンドウを JavaScript でリダイレクトします。

于 2012-12-17T04:03:33.347 に答える