PHP 静的ファイルは 304 を返します
時々、いくつかの静的ファイル (画像など) が PHP によって出力され、リクエストがすべて 200 であることがわかります。この時点で閲覧を許可するにはどうすればよいですか? サーバー上のキャッシュされた画像はどうなりますか? phpで304を出力する必要があります。
これを行うには、PHP で HTTP_IF_MODIFIED_SINCE
を etag と組み合わせて使用できます。 Etag には明確に定義された形式がありません。コードは次のとおりです:
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> _addEtag(<span style="color: #800080;">$file</span><span style="color: #000000;">) { </span><span style="color: #800080;">$last_modified_time</span> = <span style="color: #008080;">filemtime</span>(<span style="color: #800080;">$file</span><span style="color: #000000;">); </span><span style="color: #800080;">$etag</span> = <span style="color: #008080;">md5_file</span>(<span style="color: #800080;">$file</span><span style="color: #000000;">); </span><span style="color: #008000;">//</span><span style="color: #008000;"> always send headers </span> <span style="color: #008080;">header</span>("Last-Modified: ".<span style="color: #008080;">gmdate</span>("D, d M Y H:i:s", <span style="color: #800080;">$last_modified_time</span>)." GMT"<span style="color: #000000;">); </span><span style="color: #008080;">header</span>("Etag: <span style="color: #800080;">$etag</span>"<span style="color: #000000;">); </span><span style="color: #008000;">//</span><span style="color: #008000;"> exit if not modified</span> <span style="color: #0000ff;">if</span> (@<span style="color: #008080;">strtotime</span>(<span style="color: #800080;">$_SERVER</span>['HTTP_IF_MODIFIED_SINCE']) == <span style="color: #800080;">$last_modified_time</span> ||<span style="color: #000000;"> @</span><span style="color: #008080;">trim</span>(<span style="color: #800080;">$_SERVER</span>['HTTP_IF_NONE_MATCH']) == <span style="color: #800080;">$etag</span><span style="color: #000000;">) { </span><span style="color: #008080;">header</span>("HTTP/1.1 304 Not Modified"<span style="color: #000000;">); </span><span style="color: #0000ff;">exit</span><span style="color: #000000;">; }}</span>
静的ファイル(写真など)が出力される前に。