0

ユーザーが HTML フォームの 3 つのページのうち最後のページを送信すると、そのセクションの 1 つが Excel ファイルをエクスポートする PHP アプリケーションを作成しています。これは処理に時間がかかるため、フォームを送信すると、処理が開始される前に JavaScript で「お待ちください」ポップアップが表示されます。次に、以下のヘッダーを設定することにより、ファイルが作成され、ユーザーのマシンにダウンロードされます

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

私が抱えている問題は、ユーザーをフォームの最初のページにリダイレクトする必要があることです。content-type はこの前に既に変更されているため、javascript の location.href 呼び出しをエコーできません。そのため、画面には表示されません。同じ理由で、標準の PHP ヘッダー ('Location: x') リダイレクトも使用できません。

私の質問は、上記の方法で出力をファイルに転送した後、出力を画面に戻して JavaScript リダイレクトをエコーするか、別の方法でユーザーを新しいページにリダイレクトするにはどうすればよいですか?

いつものように、どんな助けも大歓迎です。

ジェームズ

4

3 に答える 3

0

以下のコードでそれを行うことができます。ダウンロード要求が送信された場所から最後のページをリダイレクトできます。コンテンツをエコーする必要はありません。

$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);
于 2013-06-05T12:22:30.607 に答える
0

上で説明したように、ページが読み込まれた後に新しいヘッダーを送信する方法はありませんが、必要な機能を取得する方法はあります。

その答えは、PHP で $_SESSION 変数を探す setInterval ループで実行される AJAX 呼び出しを作成することでした。このセッション変数は、Excel ファイルが作成された後に設定され (以前にリダイレクトを配置しようとしていた場所)、AJAX 関数が成功を返し、location.href リダイレクトを正しいページに実行します。

于 2013-06-05T11:56:50.083 に答える
0

このコードを試してください

 <?php
    echo "<script>
    window.location='page.php';
    </script>";
    ?>
于 2013-06-05T10:15:23.740 に答える