「PHP/ファイル入出力」の版間の差分

削除された内容 追加された内容
編集の要約なし
274 行
 
これがないと、ファイルにバッファ内の余計なデータがついたままブラウザに送信されてしまい、ダウンロード自体はできても、読み込みエラーになってしまい、さっかくダウンロードした価値が無くなってしまいます。
 
 
 
* 豆知識など
PHPのここらへんの仕様は、あまり論理的ではなく、規則としてこう決まっていると思ったほうがいい。
 
たとえば、下記のように、ヘッダーの一部をコメントアウトすると、ブラウザ画面上に読み込んだPNG画像が表示される。
 
要するに、readfile() という関数は、本来ならば読み込んだファイル内容を表示する関数なのだが、PHPは readfile() 関数をダウンローダーとして流用しているのである。
 
;コード例
<syntaxhighlight lang="PHP">
<?php
 
// 画像のパスとファイル名 (拡張子ごと)
$fpath = "/var/www/html/phpgra2.png";
$fname = "phpgra2.png";
 
// ヘッダーの設定
header('Content-Type: application/octet-stream');
// header('Content-Length: ' . filesize($fpath));
// header('Content-Disposition: attachment; filename="' . $fname . '"');
 
 
// 環境によっては必要
ob_end_clean();
// 画像のダウンロード
readfile($fpath);
 
?>
</syntaxhighlight>
 
 
なお
// header('Content-Type: application/octet-stream');
のようにヘッダーの最初の行もコメントアウトすると、機械語のような文字列が画面に表示される。