2016-10-14

PHPで動的コンテンツを静的ファイルに出力する

はじめに

PHPでデータベースにアクセスして動的にデータを出力することで、わざわざHTMLファイルを直接書き換える事無く、常にコンテンツを最新の状態に保つことが出来ますが、アクセスする度にデータを取得する必要がないものも中には存在します。例えばHTMLサイトマップの場合、記事が投稿された時点で書き変わるだけで良いのに、ページにアクセスする度にデータベースから記事一覧を取得して表示するというのは、無駄が多いように感じます。

つまり、動的に取得した静的なページを表示させるようにすれば、最新の状態を保ちつつレスポンスの向上を測れるのではないか、という事です。

動的な出力を静的に変換する方法

今回はHTMLサイトマップを例にして動的コンテンツを静的に出力します。方法としては、PHPのfile_put_contents関数を使用して、少々力技で変換を行います。例えば、データベースからカテゴリ名や番号を取得し、個別ページをへのリンクの状態で出力させるには、以下のように記述します。

PHP

この例では、個別ページのURLが「サイト名/カテゴリー名/番号/」の形になっている場合で、それぞれの変数を取得した後output.phpに出力することで、静的なURLとしてファイルに記述することが出来ます。これをwhile等のループ処理で全件分行うことで、個別ページへのリンク一覧を静的ファイルに作成することが出来ます。なお、追記を行う場合は、file_put_contentsのオプションにFILE_APPENDを追記しないと、ループ処理で上書きされてしますので注意してください。

静的なファイルを取り込む

とりあえず一覧として取得は出来ましたが、そのままの状態ではただリンクを羅列した状態なので、このファイルを直接表示させるのはまずないでしょう。かといってヘッダーの記述から同じように出力させるのも手間なので、実際に表示させたい固定ページなどから、includeを使用して読み込みを行います。

PHP

こうすることで、固定ページのレイアウトにサイトマップを表示させることができます。装飾については、必要に応じてリストタグやクラス等をfile_put_contentsで静的ファイルに出力する際に記述しておいて、読み込んだ時に自動的にレイアウトが整うようにしておきます。

かなり簡単に説明しましたが、以上が動的に読み込んで静的にファイルに出力する方法です。ちなみに、このサイトの、HTMLサイトマップはこの仕組みで作成しています。

さいごに

一つ手間がかかる点としては、静的ファイルを作成するためにphpファイルにアクセスしなければならない点です。もしかして、アクセスしないでphpファイルを動かす方法ってあるのかな?

これによってどの程度レスポンスに違いが出るのかまでは検証していませんし、力技なので汎用的かどうか微妙なところですが、一つの方法として参考にしていただければと思います。



コメントする(※は必須項目です)













画像認証