3

専門家の皆様、

データベースにクエリを実行し、ブラウザーでcsvファイルを吐き出すphpスクリプトがあります。これは、FireFox、Safari、および Chrome でうまく機能します。当ビルのデフォルトブラウザである Internet Explorer では動作しません(笑)。保護されたサイトであり、何の役にも立たないため、URL を投稿することはできません。

IE で、このレポートへのリンクをクリックすると、2 つのポップアップ ウィンドウが表示されます。

1) から downloads.html をダウンロードできません。このインターネット サイトを開くことができません。リクエスト サイトが利用できないか、見つかりません。しばらくしてからもう一度お試しください。

2) ダウンロード % 情報ウィンドウ: ファイル情報の取得: downloads.html から 推定残り時間: ダウンロード先: 転送速度: これらはすべて空です。

したがって、CSV ファイルを作成しようとしている downloads.html ページがあります。IEに関する限り、ここで何が爆撃されているのかわかりません。試すことができるさまざまなヘッダーはありますか? 私の検索では見たことがありません。

ヒントをありがとう...

データを出力する関数は次のとおりです。

# $data is array of data from database
function render_excel($data) {
  # headers for browsers
  header("Content-type: text/csv");
  header("Content-Disposition: attachment; filename=file.csv");
  header("Pragma: no-cache");
  header("Expires: 0");

  # column headers
  $column_headers = "Filename, Link to File, Details, Unique Viewers\n";
  $rows = '';
  foreach($data as $foo => $arr){   
    $rows .= $arr['filename'].",";
    $rows .= $arr['resource_url'].",";
    $rows .= $arr['detail_url'].",";
    $rows .= $arr['distinct_views']."\n";
  }
  print $column_headers;
  print $rows;
}
4

2 に答える 2

1

私が考える問題は2つあります。1 つ目は、ファイル名を引用符で囲む必要があることです。2 つ目は、Content-Lengthダウンロード時間を表示するヘッダーを追加する必要があることです。

//1
header("Content-Disposition: attachment; filename=\"file.csv\"");

//2
header("Content-Length: " . (strlen($column_headers.$rows)));

ページに他のコードがある場合は、長さが異なる場合があることに注意してください。

于 2013-03-14T15:29:28.147 に答える
-1

私の経験では、これを IE (特に古いバージョンの IE) で動作させるには、mod_rewrite を使用して正しいファイル拡張子 (download/file.csv など) を持つ URL を、CSV 出力を生成する PHP ファイルにリダイレクトする必要がありました。IE は何らかの理由で content-type および content-disposition ヘッダーよりも URL ファイル拡張子を優先します。

于 2013-03-14T15:33:23.243 に答える