【PHP】Last-Modifiedヘッダによる静的コンテンツのキャッシュ制御

画像などの静的コンテンツのファイルに直接アクセスした場合は
ブラウザが自動的にキャッシュ制御を行ってくれますが、
PHPで静的コンテンツを返すような処理を行っている場合にキャッシュを利用するには
Last-Modifiedヘッダを使ってキャッシュを制御する必要があります。

まず、PHPでファイルをダウンロードさせる際に
filemtime関数でファイルの更新日時を取得してLast-Modifiedヘッダを追加します。

さらにキャッシュを残すためのヘッダも追加します。

そうすると、次に同じファイルをダウンロードしようとした際のリクエストヘッダの中に

というヘッダが追加され、ファイルの更新日時が入っています。

ですので、このヘッダの有無を調べ、ファイルの更新日時と比較することで
ファイルを返すかキャッシュを返すかを判定します。

レスポンスコード304を返す処理は下記の通りです。

ちなみに、Etagというヘッダを使ってキャッシュを制御することもできますが
Etagはどちらかというと動的コンテンツのキャッシュで利用するためのものです。
静的コンテンツのキャッシュにもEtagを使ったサンプルが多くみられるのですが
Last-Modifiedヘッダだけで十分だと思います。

【Linux】各種バージョンを調べる

調べ方も様々なのでつい忘れてしまいますよね。

CentOSのバージョン

Apacheのバージョン

MySQLのバージョン

PHPのバージョン

【PHP】年間会員システムの開始日と終了日を求める

年間会員の仕組みを作っていて
会員の有効期間をデータベースに登録するとします。

データベース登録後に送信するメールにも有効期間を記載するため、
SQLではなくPHPで開始日と終了日を求めることになりました。

PHPの日付関数で年間会員の開始日と終了日を計算します。

開始日は当日ではなく、当月の1日とします。これは簡単ですね。

終了日は1年後の前月の最終日、たとえば2017年4月15日に入会した場合の終了日は
2018年3月31日
になります。
このとき、単純に今日の日付をもとに計算してしまうと、
月末の31日などに入会した際に前後の月が30日までしかないことにより、結果がおかしくなってしまいます。
ですので、必ず「1日」を基準に計算するようにします。

長いですね。無駄がありそうな気がしないでもないですが。

【WordPress】トップページのtitleタグをカスタマイズ

WordPressでトップページのtitleタグの内容をカスタマイズしようと思い調べましたが、
バージョンによって修正箇所が違うようですね。
バージョン4.7では
wp-includes/general-template.php

function wp_get_document_title()
の中の下記の部分を修正しました。

修正前

修正後(サイトのキャッチフレーズを削除したかった)

他にも方法があるのかもしれませんがとりあえず。