当サイトの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スプリクトを共通にすることができます。