[PHP-users 236] ファイルのダウンロードについて

takashi okamoto php-users@php.gr.jp
Sat, 23 Jun 2001 15:25:18 +0900


初めまして、初の投稿をさせていただく、岡本です。
早速質問させていただきます。現在、ファイルサーバーもどきのページを作成中なの
ですが、ダウンロードというボタン(リンク)をクリックしたら、ファイルがダウン
ロードされるような、ファイルのダウンロードページのスクリプトを昔のphpMLのス
レッドを参照してみようみまねで以下のように作りました。
まず、ダウンロードファイルを選ばせるページで

(main.php3)
strstr($HTTP_USER_AGENT, "MSIE")

で、IEかネスケかをチェックして、もし、IEであったなら、リンク先のスクリプトを

(download2.php3)
<?
$file_location=i18n_convert($file_location,SJIS);//$file_locationはダウン
ロードしたいファイルのある場所
$filesize=filesize($file_location);
header ("Accept-Ranges: none");
header ("Content-Length: $filesize");
header("Content-Type: text/octet-stream");//ここがIEとネスケで違う
header("Content-Disposition: attachment; filename=$cm_file_place");
i18n_http_output("pass");
$fp=fopen("$file_location","rb");
@fpassthru($fp);
fclose($fp);
exit;
?>

として、もし、ネスケであったなら、リンク先のスクリプトを

(download.php3)
<?
$file_location=i18n_convert($file_location,SJIS);//$file_locationはダウン
ロードしたいファイルのある場所
$filesize=filesize($file_location);
header ("Accept-Ranges: none");
header ("Content-Length: $filesize");
header("Content-Type: application/octet-stream");//ここがIEとネスケで違う
header("Content-Disposition: attachment; filename=$cm_file_place");
i18n_http_output("pass");
$fp=fopen("$file_location","rb");
@fpassthru($fp);
fclose($fp);
exit;
?>

としてダウンロードさせるようにしました。そこで、質問が二つあるのですが、
まず、現在の方法のようにIEとネスケで対応を分けるのは、あまりスマートではない
と思うのですが、なにか他によい方法をご存知の方はいらっしゃらないでしょうか?
次に、現在の方法では、ネスケ(NN4.75)では(download.php3)うまく動作するのです
が、IE(IE5.5)では(download2.php3)「名前を付けて保存」のまどで、「キャンセ
ル」を選択することを数回(1〜3回ぐらい)行うと、エクスプローラーの地球が回転
したままIEが動かなくなることがあります。このようなバグを回避する方法をご存知
の方はいらっしゃらないでしょうか?
開発環境は、PHP/3.0.15 で、NN4.75、IE5.5です。よろしくお願いします。

takashi okamoto
takashi@motif.co.jp
fr990477@hc.cc.keio.ac.jp