- PR -

php からのファイルダウンロード

1
投稿者投稿内容
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 2005-12-25 22:45
現在、Apache1.3.33 + php4.3.8 で試験中のファイルのダウンロードを行うコードが期待通りに動かなくて困っております。

行おうとしていたことは、csv などをダウンロードするのに、下記のようなものを考えていました。

1.ダウンロードボタンを押す
2.IE の「保存」、「開く」というダイアログが表示される。
3.「保存」を選んだら、ファイルが保存される。
4.「開く」を選んだら、とりあえずファイルを見れる。

ここで、3まではうまくいくのですが、4の「開く」を選択したときに開かれるファイルが、txt, csv, pdf のどれをやっても空ファイルしか開かれないようでした。

試しに次のコードでやってみたのですが、やはり、「開く」を選択すると文字が表示されません。私のやっていることが間違っているのか、そもそもできないことをやろうとしているのか、どなたか教えていただければと思います。

header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=a.txt");
print "Hello";

よろしくお願いいたします。



流れプログラマ
常連さん
会議室デビュー日: 2005/09/30
投稿数: 26
投稿日時: 2005-12-25 23:04
引用:

header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=a.txt");


「開く」で画面が真っ白になったとき、その画面のソースを確認しましたか?
たぶん、漢字コードの認識に失敗しているだけじゃないかと思います。
Content-Type に「;charset=Shift_JIS」のように漢字コード指定をしましょう。

ちなみに、次のようにファイル名を2回指定したほうが安全です。
引用:

Header("Content-Disposition: attachment; filename=a.csv");
Header("Content-Type: application/octet-stream; name=a.csv");


「filename=...」と「name=...」に同じファイル名を指定するのは、
いろいろなブラウザに対応するための安全策。

あと、状況によっては「Content-Length: 」を指定してあげないと
正しくダウンロードできないこともあります。どうしてもうまくいかない
場合は、試してみてください。

[ メッセージ編集済み 編集者: 流れプログラマ 編集日時 2005-12-25 23:05 ]
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 2005-12-26 05:33
流れプログラマ殿

おかげさまで、うまくいきました。
どうやら、切り分けの段階で一番無難と思っていた text ファイルで試験をしたのがよくなかったようです。
csv などでは、無事動くようになりました。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)