外部ファイルを取込む方法(PHPまたはSSIインクルード)

PHPまたはSSIを使用して外部ファイルを取り込んでメニューを作成したり、アフィリエイトプログラムを挿入したページを作成する方法を紹介します。この方法はメニューやファイルの管理がとても楽になります。

サーバーの写真

私は以前にはフレームを使用してホームページを作成していました。理由はメニューのメンテナンスが楽だからです。しかしフレームの欠点が目立つように感じて、フレームを使わない他の方法を模索していました。

PHPまたはSSIを使用して 外部ファイル楽天 を取り込んでメニューを作成したり、アフィリエイトプログラムを挿入したページを作成する方法があることを知ってからは、この方法を採用することにしました。

もちろんこの方法はPHPまたはSSIが使えるサーバーでないと行なうことができません。

メニューやアフィリエイトにPHPまたはSSIを使うメリット

メニューやアフィリエイトにPHPまたはSSIを使うようになってから、ファイルの管理が非常に楽になりました。

各ページに挿入したメニューやアフィリエイトスクリプトのメンテナンスが簡単になったからです。特にグーグルのアドセンスはスクリプトが基本的には各ページ同じで良いので特に効果的でした。

またアフィリエイトスクリプトの中にはホームページ作成ソフト(ホームページビルダー等)でエラーになったり、ホームページビルダーが勝手にスクリプトを書き換えたりしていましたが、全くエラーが出なくなりましたし、勝手にスクリプトを書き換えられることも無くなりました。

特にTEXTSSのソフトで全ファイル一括変更をする場合、インクルードファイルを除外すると、間違ってアドセンスコードを書き換える心配が無くなります。

特にグーグルアドセンスはスクリプトの書き換えを禁止されており、安心してホームページビルダーを使うことができます。

その他の効果として、サイトマップのメンテナンスが全く不要になった事です。私のサイトマップは見出しと外部のメニューファイルを羅列しただけで構成されています。ページの追加の時メニューファイルはどうしても変更する訳でサイトマップを変更する必要が無いのです。

PHPを使用し外部ファイルを取り込んでメニューを作成

PHPとはHTML文書中に記述されたスクリプトをサーバーのPHPが実行しその結果を HTMLデーターとしてWebブラウザに渡すものです。

PHPファイル(拡張子は普通php)の中でメニューを呼び出すには次のようにサーバーの絶対アドレスから記述するか呼び出すファイルから見た相対アドレスで記述します。

<?php include('/vertual/server-id/public_html/hoge.jp/***/inc/menu.inc'); ?>

この方法だとドメインを変更したりしてドメインが違っていると使えないので、汎用で使えるようにするには次のようにサーバーの絶対アドレス(サーバーのドキュメントルート)を取得します。

<?php include($_SERVER['DOCUMENT_ROOT'].'/***/inc/menu.inc'); ?>

ここで、「/***/inc/menu.inc」は「http://hoge.jp/***/inc/menu.inc」から「http://hoge.jp」を取り除いたもので「/」から始まります。

この方法はどのディレクトリからでも同じ方法で外部ファイルを呼び出せ、ドメインが違っていても何も変更することなく使えます。

またメニューファイルの拡張子はincでなくてhtmでもhtmlでもphpでも何でもかまいません。しかし、インクルードされるファイルならincの方が良いでしょう。

includeを使わずrequireを使っても同様な動作をさせることができますが、requireの場合は、要求されたファイルがもし無かった場合はエラーとなり、そこでプログラムが停止する場合があるようです。

.htaccessを使用してhtmlファイルをPHPで動作させる方法

SEO対策という観点から考えるとファイル名を変えるのは好ましくありません。ファイル名を変更せずに従来のままのファイル名を使用する必要があります。

しかし、本格的にPHPを使って多くのページを作成するのなら、拡張子をphpに変更して、ページの永久移転(301転送)を使った方が良いでしょう。そうすればSEOでも問題ありません。

PHPを動作させるファイルの拡張子をphpだけでなくhtmやhtmlでも使えるようにするには.htaccessファイルに次の行を追加します。

AddType application/x-httpd-php .htm .html

この時拡張子の前のドットはあっても無くてもかまいません。

SSIを使用し外部ファイルを取り込んでメニューを作成

SSIとはServer Side Includeの略です。つまりサーバー側でインクルードするので、サーバーに負担が掛かります。その為、SSIの使用を許可していないサーバーも多いようです。

SSIファイル(拡張子は普通shtmまたはshtml)の中でメニューを呼び出すには次のようにします。

例としてドメインのルートからメニューまでのパスは /***/inc/menu.inc とします。

<!--#include virtual='/***/inc/menu.inc' -->

ここで、「/***/inc/menu.inc」は「http://domain/***/inc/menu.inc」から「http://domain」を取り除いたもので / から始まります)

この方法はどのディレクトリからでも同じ方法で外部ファイルを呼び出せ、ドメインが違っていても何も変更することなく使えます。

またメニューファイルの拡張子はinc でなくてhtmでもshtmでもshtmlでもかまいません。しかし、インクルードされるファイルならincの方が良いでしょう。

.htaccessを使用してhtmlファイルをSSIで動作させる方法

SSIを動作させるファイルの拡張子をshtmやshtmlだけでなくhtmやhtmlでも使えるようにするには.htaccessファイルに次の2行を追加します。

Options +Includes
AddHandler server-parsed .htm .html

この時拡張子の前のドットはあっても無くてもかまいません。またhtmlファイルに同時にPHPとSSIを有効にすることはできません。まあ、する必要もその意味もありませんが。

拡張子 htmやhtml に SSI を有効にした場合、すべての html ファイルがサーバーによってSSIだと認識されて、サーバーに負担を掛けるので好ましくありません。

上記以外のSSIのメリット

私はアクセス解析に有限工房のefStatというのを使っています。これはフリーソフトでありながらとても高機能です。

UTF-8で文字化けする欠点と、更新が止まったままなのが残念ですが、文字化けの欠点は改造して使用しています。改造の内容はユーザー掲示板が無くなったのでもうわかりません。

普通はCGIで動かすのですが、fcount.cgiを一部のページでSSIで動かすと、高速で訪問する検索ロボットも捕捉することができます。

どんな検索ロボットがどの程度の頻度で来ているかがわかります。隠しページにSSIとアクセス解析を適用すると検索ロボットだけを捕捉できて、とても便利です。

各ページに付けたアクセス解析スクリプトもPHPまたはSSIで各ページに取り込んで使っています。