[PHP-users 10797] メザコヴロミネミュピボザベボヴアーキケインヴバイナリファイルのダウンロードがうまくできない

Mashiki php-users@php.gr.jp
Mon, 14 Oct 2002 01:32:58 +0900


 Mashikiです。

>PHP4.2でファイルダウンロードスクリプトを書いています。
>メーリングリストでの情報を参照しながら下記のプログラムを作成したのですが、
>バイナリファイルがうまくダウンロードできません。

>--- php.iniの内容 -------------------------------------------------
>[mbstring]
>mbstring.internal_encoding = EUC-JP
>mbstring.http_input = auto
>mbstring.http_output = SJIS
>mbstring.detect_order = auto
>;mbstring.substitute_character = none;

サーバーはwinですか?
ノーマルなphp4.2.xであればこの場合、eucでコードを保存しましょう。

>--- スクリプト(抜粋) ---------------------------------------------
>mb_http_output("pass");
>header("Content-Type: application/octet-stream");
>header("Content-Disposition: attachment; filename=" . basename($fn));
>header("Content-length: ".filesize("$dlfile"));
>$fp = fopen ( $dlfile , "r" ) ;
>while ( !feof ( $fp ) ) {
>	print fread ( $fp , 1024 ) ;
>}
>fclose ( $fp ) ;
>--------------------------------------------------------------------

肝心などうににうまくいかないかが記述されていないのですが、

まずはテキストファイルで試してみるのが近道かと

A. テキストファイルが完全にダウンロードできるのであれば、

  1. fclose の直後に「exit;」を書く
  2. mb_http_output('pass')の代わりに、ob_end_clean()を記述する

  1はバイナリコード出力後に、2は出力前にゴミが書かれたことを疑っています。

B. テキストファイルを指定してもうまくいかないのであれば、

  header 関数を echoに変えて、自分の思ったとおりのヘッダーを
  出力しているか、fopenは成功しているかを確認しましょう。
  # ふたを開けたらregister_global問題だったりして...

などを順に確認してみてください。