[PHP-users 10872] ファイルのダウンロードについて、たまに上手く動作してくれない。

辻 靖 php-users@php.gr.jp
Wed, 16 Oct 2002 14:33:05 +0900


はじめまして、辻と申します。

ファイルのダウンロードについて、たまに上手く動作してくれない。

色々と関連HPや過去ログ等を調べたのですが、該当する様なものが見つからなかった
ので、この問題を解決策をご教示願い致します。
(調べかたが悪いかもしれません。似たようなものはいっぱいあったのですが)


■仕様
クライアントアプリを動かす為のファイルをWEBからダウンロードさせる。


■現象
現象が二つありまして

(1).
たまに、ダウンロードのパネルが開かずページ移動し真っ白い画面が表示される。
ページのソース表示にて確認すると中身は空っぽ。

(2).
たまに、ダウンロードするファイルが、ダウンロードさせるPHPファイル名となる。
ダウンしても空っぽ。


どちらも、たまに発生します。
大概は上手くいくのですが、一発目で発生する場合もあります。
確認したIEバージョンは
IE4.0/IE5.0/IE5.01SP2/IE5.5/IE5.5SP2/IE6.0/IE6.0SP1
なお、キャッシュもクリアしてテストしています。

この様な不可解な現象に悩んでおります。
皆さんのお知恵を拝借させてください。宜しくお願い致します。



■ソース
download.php ファイル選択のソース
download_file.php 実際にファイルをダウンさせるソース


以下は、download_file.phpです。

$prmFILE:ファイル名
$prmSIZE:ファイルサイズ


// バイナリファイルのダウンロード時
(ウィンドズで作成したバイナリをFTPにてアップ)
header ("Content-Disposition: attachment; filename=" . $prmFILE);
header ("Content-type: application/octet-stream");
header ("Content-Transfer-Encoding: binary");
header ("Content-length: " . $prmSIZE);
readfile ($prmFILE);


// テキストタイプ(CSVファイルは省く)のダウンロード指定時
header ("Content-Disposition: attachment; filename=" . $prmFILE);
header ("Content-type: application/octet-stream");
header ("Content-length: " . $prmSIZE);
readfile ($prmFILE);


// テキストタイプ(CSVファイル)のダウンロード指定時
header ("Content-Disposition: attachment; filename=" . $prmFILE);
header ("Content-type: application/x-csv");

header ("Content-length: " . $prmSIZE);
readfile ($prmFILE);


尚、IE5.5以下では
header ("Content-Disposition: inline; filename=" . $prmFILE);を
header ("Content-Disposition: attachment; filename=" . $prmFILE);
に入れ替えてます。
(ダウンロードするファイルが正しく表示されない場合がある為)


また、「Content-Disposition: Attachment」が動作しないとあるようなので、
回避策として、Internet Explorer 5.5以下では、存在しない ContentType を
下記の様に設定します。
header ("Content-type: application/octet-stream");を
header ("Content-type: application/octet-stream-dummy");
に入れ替えてます。


以上です。皆さん宜しくお願い致します。


-----------------------------------------------------------
株式会社うるうるネット
辻 靖
ytsuji@uruuru.net