ファイル名によってPHPの動作を変える

 PHPのsubstr()やbasename()の機能を使って、現在インターネツトで表示中のファイル名を取得して、PHPの動作を動的に変えてページのデザインなどをページによって自動的に変更できます。

PHPを使ってファイル名を取得する方法

 PHPを使って現在表示しようとしているページのファイル名を、PHPファイル内で取得します。これができると、ファイル名によってPHPの動作を変えることが可能で、ページによって共通のインクルードファイルなどを別に用意する必要がなくなります。

 つまり、同じ1つのファイルで用が足りるということです。このようにするとファイルのメンテナンス性が非常に良くなります。

 私はPHPのインクルード機能を多用して、ウエブページを作成していますので、共通ファイルが少なくて済むのはとても助かります。同じファイルを各ページで使い回すことができるからです。

 また、ページによって自動的に広告の表示を無くしたりすることも可能です。

(1)PHPの basemane() 機能を使ってファイル名を取得する方法

後述のようにsubstr() の機能でもファイル名は取得できますが、PHPの basemane() 機能を使ってもファイル名を取得することができます。こちらの方が文字数を指定する必要がなく簡単です。

<?php $f_name = basemane($_SERVER['SCRIPT_NAME']);
if ($f_name == "index.php") 
{ ?>
ファイル名が「index.php」の時の動作、HTMLタグをそのまま記述
<?php } else { ?>
ファイル名が「index.php」以外の時の動作、HTMLタグをそのまま記述
<?php } ?>

 ここで、「$_SERVER['SCRIPT_NAME']」は、サーバーの ドメイン名から後ろのパスとファイル名を表しています。例えば「hogehoge.jp/***/index.php」なら「/***/index.php」を表しています。これからファイル名basename()でファイル名だけを取り出すのです。

basename関数の使い方

basename (ファイル名を取得したいパス , 除外したい最後の文字);

 basename()はパスとファイ名の中から、簡単に自動的にファイル名を判別し取得してくれます。

 「/」(スラッシュ)や「\」(バックスラッシュ)を区切り文字とみなして、最後の区切り文字以降をファイル名として取得してくれます。そして区切り文字は削除されます。

 第2引数の「除外したい最後の文字」を指定すると、その文字列が削除されます。これを利用して拡張子などを削除することが可能です。例えば、index.phpなら「.php」を第2引数とすると、「index」だけになる。

(2)PHPの substr() 機能を使う方法

substr() の主な機能は文字列の一部分を取り出すことです。

substr(string, start, length);

 substr() は文字列 string の、 start で指定した位置から length バイト分の文字列を取り出して返します。 start が正の場合、取り出される文字列は、 string の 0 から数えて start 番目から始まる文字列となります。

 start が負の場合、取り出される文字列は、 string の後ろから数えて start 番目から始まる文字列となります。

 PHPの substr() 機能を使ってファイル名を取得する具体例

<?php $f_name = substr($_SERVER['SCRIPT_NAME'],-9,9);
if ($f_name != "index.php") 
{ ?>
ファイル名が「index.php」以外の時の動作、HTMLタグをそのまま記述
<?php } else { ?>
ファイル名が「index.php」の時の動作、HTMLタグをそのまま記述
<?php } ?>

 この例では、「$_SERVER['SCRIPT_NAME']」は、サーバーの ドメイン名の後ろのパスとファイル名を表しています。例えば「example.jp/***/index.php」なら「/***/index.php」を表しています。この例では上記の場合と動作を反対にしてみました。

 この中の後ろから9番目の文字から9文字を取り出すと、「index.php」が取り出せます。

これらを使うとファイル名によってPHPの動作を変えることができます

ファイル名の違いによって、ページの動作を変えたいことはよくあります。例えば、indexページだけメニューの表示を変えたいとか、ある特定のページだけに広告を表示したくないとかの用途にはとても便利なものです。

 403や404のエラーページやコンテンツの少ない「問い合わせ」のページなどに自動広告が出るとグーグルアドセンスでは、ポリシー違反となることがあります。このようなページから自動的に広告コードを外すことも、これを使えば容易に実現できるのです。

コンテンツの少ないページのみ広告コードを削除する実際の例

次の例はプライバシーポリシーのページ(policy.php)とサイトマップのページ(setemap.php)のみ自動広告を載せない場合です。

<?php $f_name = basename($_SERVER['SCRIPT_NAME']);
if ($f_name != "policy.php" and $f_name != "sitemap.php") { ?>
自動広告のコードを書く
<?php } ?>

「!=」というのは、右と左が等しくない場合ですので、policy.phpかsitemap.phpのページの場合だけ広告コードを削除できるのです。

コメント