場合によっては、私の PHP スクリプトが大きなバイナリ ファイルを提供しています。if-modified-sinceヘッダーをサポートしたい。
テスト中に予期しない動作が観察されました。PHP でlast-modified応答ヘッダーを設定すると、Apache はif-modified-sinceヘッダーを使用してリクエストを自動的に処理するようです ('200 OK' + コンテンツまたはコンテンツなしの '304 Not Modified')。の「200 OK」を覆すことさえありheader("Last-Modified: $lastModifiedValue GMT", true, 200);
ます。
この動作に依存するかどうか、またはif(isset($headers['If-Modified-Since'])){...}
ブロックを実装する必要があるかどうかを判断する前に、この動作に関するドキュメントを見つけようとしました。
この振る舞いがどれほど公式なものであるかについての経験、アドバイス、またはヒントは大歓迎です。
完全なテスト スニペット:
$lastModifiedValue = gmdate('D, d M Y H:i:s', filemtime($path));
header('Content-Type: application/octet-stream');
header("Last-Modified: $lastModifiedValue GMT", true, 200);
header('Content-Length: ' . filesize($path));
header('Content-Disposition: attachment; filename="binary-data.bin"');
ob_end_clean();
$fileHandle = fopen($path, "rb");
fpassthru($fileHandle);
fclose($fileHandle);
exit;
(サーバーは Apache: 2.2、PHP: 5.6 で動作します)