以下の【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 'ダウンロードが終わりました';
echo 'ダウンロードが終わりました';
こんなのつけたら、駄目です。
Content-Lengthなんてちゃんとまともに読んでるブラウザなんて
ないです。
ありがとうございます。
ちょっと話が横道にそれるかもしれませんが、実際のプログラムは、
echo $message;とecho 'ダウンロードが終わりました';の間に結構いろいろ処理が入っています。
にもかかわらず、随分後のechoも拾ってしまうということがおかしいなと思った次第です。
結局、headerでダウンロードを行う場合、ダウンロードする文末の判断は、PHPの終了、つまり、
?>で終わらせないといけないような気がします。たとえば、
<中略>
echo $message;
?>
とすべきと勝手に思いました。
PHPがこのような作りだと、ちょっと陳腐な仕様だと思います。
echo 'ダウンロードが終わりました';
こんなのつけたら、駄目です。
Content-Lengthなんてちゃんとまともに読んでるブラウザなんて
ないです。
ご回答頂きありがとうございます。
> Content-Lengthなんてちゃんとまともに読んでるブラウザなんてないです。
やはりそうですか。
コメントは、No.1さんと同じです。
みなさん、どのようなプログラムをしているんでしょうか?
こちらで、ちょっと調べてみることにします。ありがとうございました。
ご回答頂きありがとうございます。
> Content-Lengthなんてちゃんとまともに読んでるブラウザなんてないです。
やはりそうですか。
コメントは、No.1さんと同じです。
みなさん、どのようなプログラムをしているんでしょうか?
こちらで、ちょっと調べてみることにします。ありがとうございました。