人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで質問があります。PHPは5.2.10です。
以下の【A】【B】どちらの処理でも、Content-Lengthを指定しているにもかかわらず、
a.csvには「a,b,cダウンロードが終わりました」というa.csvファイルがダウンロードされます。
期待値は、もちろん「a,b,c」という内容のa.csvがダウンロードされることです。
どこかおかしいのかわからないので、質問させていただきました。よろしくお願いいたします。

【A】
$message = 'a,b,c';
$len = strLen($message);
header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="a.csv"');
header('Content-Length: ' . strLen($message));
echo $message;
echo 'ダウンロードが終わりました';

【B】
file_put_contents($file, 'a,b,c');
header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="a.csv"');
header('Content-Length: ' . fileSize($file));
readFile($file);
echo 'ダウンロードが終わりました';

●質問者: cochoo
●カテゴリ:インターネット ウェブ制作
✍キーワード:CSV echo len MESSAGE PHP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● yamaneroom
●35ポイント

この行が悪い。消去すべし。

echo 'ダウンロードが終わりました';

http://q.hatena.ne.jp/

◎質問者からの返答

ありがとうございます。

ちょっと話が横道にそれるかもしれませんが、実際のプログラムは、

echo $message;とecho 'ダウンロードが終わりました';の間に結構いろいろ処理が入っています。

にもかかわらず、随分後のechoも拾ってしまうということがおかしいなと思った次第です。

結局、headerでダウンロードを行う場合、ダウンロードする文末の判断は、PHPの終了、つまり、

?>で終わらせないといけないような気がします。たとえば、

<中略>

echo $message;

?>

とすべきと勝手に思いました。

PHPがこのような作りだと、ちょっと陳腐な仕様だと思います。


2 ● hanako393
●35ポイント ベストアンサー

echo 'ダウンロードが終わりました';

こんなのつけたら、駄目です。

Content-Lengthなんてちゃんとまともに読んでるブラウザなんて

ないです。

http://q.hatena.ne.jp/answer

◎質問者からの返答

ご回答頂きありがとうございます。

> Content-Lengthなんてちゃんとまともに読んでるブラウザなんてないです。

やはりそうですか。

コメントは、No.1さんと同じです。

みなさん、どのようなプログラムをしているんでしょうか?

こちらで、ちょっと調べてみることにします。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ