0

重複の可能性:
ヘッダーの場所+コンテンツの配置

生成情報を使用してExcelレポートを生成 header content-typeし、データベースに生成情報を保存するページがあります(たとえば、誰がいつレポートを生成したかなど)。私の問題は、ページをリダイレクトできない理由です。以下はサンプルコード/アルゴリズムです

// excel content
/* excel content populates here */

// output to excel file
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=".$positionFileName);
header("Cache-Control: max-age=0");

// save logs on the database  
/* save logs code executed here */

// redirect page to get the logs on the database that display on the web page
header("location: report.php");  *<--- I can't redirect to report.php*

これがまさに私が欲しいものです

ユーザーは、レポートの種類を選択し、[生成]ボタンをクリックしてExcelレポートを出力します([開く/保存]ダイアログ)。その後、システムは生成されたレポートのログをデータベースに保存し、ページに表示します。そのため、report.phpで再度リダイレクトして、ログがデータベースで再度取得され、ブラウザーに表示されるようにします。

4

5 に答える 5

2

ヘッダーが衝突しています。最初に を使用して「ここにドキュメントが来ました」Content-Disposition: attachmentと言い、次にヘッダーを使用して「ああ、来ていません。XYZ に追加のリクエストを行います」と言いました。ヘッダーをLocation省略しても同じ結果が得られます。Content-

ただし、これは私にとってはうまくいきます:

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=foo.dat");
header("location: foo.dat");

その中で、ブラウザーに表示される foo.dat ファイルにリダイレクトされます (したがって、Content-headers は無視されます。これは、Location-header の後に新しい要求が発行され、その応答で -headers が取得されないContentためです。を強制するには、特定の拡張機能またはディレクトリのヘッダーを発行するように Web サーバーを構成するattachmentか、 -header を指定せずに使用して、メモリ エラーが発生することなくファイルを直接発行します。fpassthru($filename)Location

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

// save logs on the database  
/* save logs code executed here */

fpasstrhu($positionFileName);

ただし、最初の 3 つのステートメントの後のコードの実行中に生成された出力header()は、ファイル データと見なされるブラウザに出力されることに注意してください。

これは現在も起こっていると思います。これにより、header("location: ...")失敗します。エラー報告を有効にして、データが印刷された理由と場所を確認します

于 2012-10-30T10:54:17.967 に答える
1

Excelファイルを期待する必要があることをブラウザーに伝えているため、機能しません。次に、ブラウザーに Excel ファイルが必要であることを伝えた後、別のページにリダイレクトしようとしています。問題はあなたのアプローチにあります。

于 2012-10-30T10:35:54.877 に答える
-1

まだブラウザに何も出力していないことを確認してください。

'location' も通常は 'Location' である必要があります。

于 2012-10-30T10:30:47.920 に答える
-1

Edit This
header("Location: report.php");

于 2012-10-30T10:32:49.923 に答える
-1
header( "Location: http://" . strip_tags( $_SERVER ['HTTP_HOST'] ) . "/report.php" );

これを試してみてください..私は常にHTTPホストチェッカーを呼び出して、同じドメインにとどまっていることを確認します.

編集:悪いことに、大文字のLで書くことを学びました...以前のメモで申し訳ありません。

于 2012-10-30T10:35:06.283 に答える