PHPドキュメント 良い例を提供します:
<?php
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
編集 (コメントへの回答、説明)
header('Content-Description: File Transfer');
ブラウザには表示せず、ファイルを転送してください。
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
ファイルはバイナリファイルです。
ブラウザは、表示できない限り、通常、バイナリファイルをダウンロードします。
header('Content-Disposition: attachment; filename='.basename($file));
ダウンロードダイアログに適切なファイル名が表示されるようにします。
注:任意のファイル名を使用できます。
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ブラウザでファイルをキャッシュしないでください。
動的コンテンツの場合、キャッシュによって問題が発生する可能性があります。
header('Content-Length: ' . filesize($file));
正しいファイルサイズをブラウザに送信してください。
そうしないと、ブラウザは転送時間を見積もることができません。
ob_clean();
flush();
ダウンロードを開始する前に、ヘッダーがブラウザに送信されていることを確認してください。
readfile($file);
ファイルをブラウザに送信します。
exit;
完了:)