0

私は壊れて助けを求めなければならないと思います。(3日前にやるべきだった!)

ここで何が起こるか...

  • PHP はセッション変数とポスト変数を読み取り、mysql クエリから .csv ファイルを作成します。
  • 「名前を付けて保存」ダイアログボックスを開こうとし、それが完了すると、別のページにジャンプします。
  • ネストされた関数を使用していますが、実行すると、ダイアログ ボックスが表示されなくなります。
  • 個別に機能は正常に動作します。
  • 実行すると、「名前を付けて保存」ダイアログボックスはユーザー入力を待機しません
  • 誰かが私が間違ったことをしたことを理解できますか、それとも私の考えを変えることができますか?
  • $filename は、サーバー上に作成された CSV ファイルを指します
  • $suggname は、ユーザーがダイアログ ボックスに表示するデフォルトのファイル名です。

コード:

holdit($filename,$suggname);

function holdit($filename,$suggname) {
  $fp=@fopen($filename, 'rb');
  if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
    header('Content-Type: "application/octet-stream"');
    header('Content-Disposition: attachment; filename="'.$suggname.'"' );
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-Transfer-Encoding: binary");
    header('Pragma: public');
    header("Content-Length: ".filesize($filename));
  } else {
    header('Content-Type: "application/octet-stream"');
    header('Content-Disposition: attachment; filename="'.$suggname.'"' );
    header("Content-Transfer-Encoding: binary");
    header('Expires: 0');
    header('Pragma: no-cache');
    header("Content-Length: ".filesize($filename));
  }
  fpassthru($fp);
  fclose($fp);
  jump();
}

function jump() {
    header('Location: return_from_csv.php');
}
4

1 に答える 1

0

HTTP 応答に多くのヘッダーを追加しています。それらの 1 つはLocation、ブラウザにリダイレクトを指示するものです。明らかに、他のヘッダーよりも優先度が高いと解釈しています。

応答でファイルをリダイレクトまたは提供するかどうかを決定し、どちらかを実行します。

Locationヘッダーを誤解していると思われます。これを読んでください: http://en.wikipedia.org/wiki/HTTP_location

CSVファイルを提供してから別のページにリダイレクトしようとしているようです。申し訳ありませんが、これはできません。HTTP 応答が行うことは 1 つだけです。targetの属性を使用して、CSV ファイルへのリンクを別のウィンドウで開くことを検討してください<a>

于 2012-08-21T14:17:28.887 に答える