当サイトのPHPで使える関数や文字列や配列

当サイトは、主にHTMLを使って作成していますが、HTMLの機能だけでは限界があるので、PHPの関数や文字列や配列などを駆使して、インクルードや様々な条件判断などをさせて少しでも高機能なページにしています。ワードプレスのようなCMSなどを使用せずに、作りやすくて使いやすいページになるようにしています。

パソコンの写真

私は当サイトでは外部のファイルをPHPでインクルードして、その内容をメインのHTMLファイルに取り込むなどして、独自の方針で、ホームページを作成しています。

これの発展で、メタタグのdescriptionやkeywordsやタイトルタグの内容なども、あらかじめ、PHPで関数や文字列や配列を登録してページ内で使っています。

どんな関数や文字列や配列がホームページ内で使えるのかを、知っていると様々なアイデアが浮かんで来ます。また、忘れないためにもここに記録しておきます。使えるものがあれば使ってみてください。

PHP関数の登録と使い方

ユーザーエージェントがモバイル(スマートフォン)かどうかを判定するPHP関数です。

<?php
function is_mobile () {
$useragents=array('iPhone','iPod','Android.*Mob','Opera.*Mini','blackberry','Windows.*Phone');
$pattern='/'.implode('|', $useragents).'/i';
return preg_match($pattern, $_SERVER['HTTP_USER_AGENT']);
} ?>

これを使ってスマートフォンかどうかで、次のようにHTMLの動作を変えています。

<?php if (!is_mobile()) { ?>
<?php include($sdr.'/inc/logo.inc'); ?>
<?php } ?>

つまり、スマートフォンではない(パソコンやタブレットなど)時は「logo.inc」というファイルをインクルードしています。

文字列や配列の登録(定義)

次のように ヘッドタグ楽天 の中で、サーバードキュメントルートやメタタグのdescriptionやkeywordsやタイトルタグの内容を文字列に登録しています。この他にもありますが、一般的ではないので割愛します。

これらの文字列(配列)は、ボディタグの開始直後までに定義していますので、それ以後であればどこでも使うことができます。

$des_c = "ページの説明文"
$key_w = "キーワード群"
$title = "ページのタイトル"
$sdr = $_SERVER['DOCUMENT_ROOT']
$rq_uri = preg_replace('/\?.*/','',$_SERVER['REQUEST_URI'])
$s_name = $_SERVER['SCRIPT_NAME']
$f_name = basename($_SERVER['SCRIPT_NAME'])
$dir_a = explode("/",$s_name,-1)

メタタグのdescriptionやkeywordsやタイトルタグでの文字列使用

次のようにヘッドタグ内の使いたい文字列の所で、登録した文字列を表示させることができます。もし、ボディタグ内でも使いたい場合は、更に表示させて使っても何らかまいません。タイトル($title)をH1タグ内で使ってページの見出しをタイトルと同じにすることもできます。

<?php echo $des_c; ?>
<?php echo $key_w; ?>
<?php echo $title; ?>

$sdr = $_SERVER['DOCUMENT_ROOT']について

メニューや広告のファイルなどをインクルードする時は、$_SERVER['DOCUMENT_ROOT']の文字列を頻繁に使うので、あらかじめこれを $sdr に登録しておくと便利です。それだけの理由です。

<?php include($sdr.'/inc/インクルードするファイル'); ?>

$rq_uri = preg_replace('/\?.*/','',$_SERVER['REQUEST_URI'])について

$_SERVER['REQUEST_URI']部分はURL部の後半(/***/example.php等)を表しています。この為、パラメータ「?123」などが付いたURLの場合は別ページと判断される事が起こります。

つまり、パラメータ無しのページと、同じページでパラメータ付きの場合とでは、別のページと判断されてしまったりして不具合が起こります。

そこで、この部分を上記のようにして、正規表現を使って、次のように「?」以降のパラメータを取り除いたものを使うことができます。

<?php echo "https://".$_SERVER['SERVER_NAME'].$rq_uri; ?>

今実行している該当のページを表す場合は、上記のように使えば便利です。

$s_name = $_SERVER['SCRIPT_NAME']について

現在のスクリプトのパスを表しています。$_SERVER['SCRIPT_NAME']は、サーバーのドメイン名の後ろのパスとファイル名を表しています。例えば「hoge.jp/dir1/dir2/example.php」なら「/dir1/dir2/example.php」を表しています。

$f_name = basename($_SERVER['SCRIPT_NAME'])について

$_SERVER['SCRIPT_NAME']からファイル名だけを取り出して使います。例えば次のように、ファイル名の違いで、PHPの動作を変えることができます。

<?php $f_name = basename($_SERVER['SCRIPT_NAME']);
if ($f_name != "toiawase.php" and $f_name != "link.php") { ?>
広告コード

つまり、ファイル名が「toiawase.php」か「link.php」の時には、広告コードを読み込まないようにできます。

$dir_a = explode("/",$s_name,-1)について

上記の $s_nane でも説明していますが、 $s_nane は、サーバーのドメイン名の後ろのパスとファイル名を表しています。例えばhoge.jp/dir1/dir2/example.phpなら/dir1/dir2/example.phpを表しています。

そこで、PHPの explode() 関数を使ってファイルのディレクトリ名に分解して配列にします。この中のディレクトリ(フォルダ)名「dir1」を取り出すのなら「$dir_a[1]」とします。この中の「dir2」を取り出すのなら「$dir_a[2]」とします。

「$limit」が「-1」になっているのは、最後の文字列がファイル名なのでこれを削除する為です。

「$_SERVER['SCRIPT_NAME']」を直接explode()で処理しようとするとエラーとなります。だから、あらかじめ、「$_SERVER['SCRIPT_NAME']」を「$s_name」に代入しています。

これは、カテゴリー(ディレクトリ)の違いで、カテゴリー別のメニューを表示したり、カテゴリーの違いで、PHPの動作を変えたりできます。

カテゴリー別のメニューを自動的に表示する例

これを使うと、カテゴリー別のメニューをファイルによって自動的に表示させることができます。つまり、アンテナに関するページでは、「$dir_a[1]」は「ant」になり、「menu_ant.inc」のファイルを自動的にインクルードして表示できるのです。

<?php include($sdr.'/inc/menu_'.$dir_a[1].'.inc'); ?>

このようにすれば、上記のように、全てのファイルでインクルードで呼び出すPHPスプリクトを共通にすることができます。