解説
はじめに、このプログラムで利用しているメインとなるファンクションは次の部分です。readfile('index_pc.html');「readfile」は、パラメーターに指定されたファイルを読み込んでそのまま画面に表示するというスクリプトで、これを利用することで「index.php」のファイルから、「index_pc.html」や「index_touch.html」などのHTMLファイルを読み込んで表示させることができます。
これを元に、「PCからのアクセスの場合はindex_pc.htmlを、スマートフォンからのアクセスの場合はindex_touch.htmlを表示する」という動きにしていきましょう。第2回で紹介した「if構文」を利用します。
if ( iPhoneである場合 ) { スマホ用を表示する } else { PC用を表示する }
実際のスクリプトは次のようになります。
if (strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') !== false) { readfile('index_touch.html'); } else { readfile('index_pc.html'); }
アクセスされた端末が iPhoneであるかを判断するには「ユーザーエージェント情報」と呼ばれる情報を利用します。これは、各Webブラウザーが持っている情報で、そのWebブラウザーの環境などをWebサーバー側に知らせるためのものです。例えば、iPhoneのSafariでは次のようになります。(iOSのバージョンなどにより異なります)
Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25
例えば、PC版の Chromeなどでは次のようになります。
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36
これを見比べると、iPhoneのユーザーエージェント情報には「iPhone」というキーワードが含まれていることが分かります。そこで、これを検索して見つかるかを判断します。
そこで、「strpos」というファンクションを使います。
【strpos】
文字列の位置を検索する
・パラメーター
1つめ: 検索対象の文字列
2つめ: 検索したキーワード
・リターン値
見つかった位置か、または false
1つめのパラメーターに検索する文章、つまりここでは「ユーザーエージェント情報」を、2つめのパラメーターに検索したいキーワードを指定します。
キーワードが見つかればその位置(○文字目)を通知し、見つからなければ「false」というブール値を通知します。これを利用すれば、if構文の条件として利用できます。
変数を利用する
さて、ここで次の記述に注目をしてみましょう。$_SERVER['HTTP_USER_AGENT']この記述で、アクセスされたユーザーエージェントを取得することができます。これを「変数」といいます。変数とは一時的に情報を記録するためのしくみで、特に「$_SERVER」から始まる変数を「サーバー変数」と呼びます。ここにはWebサーバーから通知される、さまざまな情報が記録されていて、例えば次のような事を知ることができます。
・リンク元のページ(HTTP_REFERER)
・見ているユーザーのIPアドレス(REMOTE_ADDR)
・見ているURL(REQUEST_URI)
その他にも、さまざまな情報があります。
利用したい値はブラケット([])で囲って、指定します。ここでは、ユーザーエージェント情報を取得するため「HTTP_USER_AGENT」を指定しました。
これで、アクセスされた端末の種類によって読み込むページの内容を変化させることができました。
リクエスト変数
続いて、次の記述に注目してみます。$_REQUEST['view']「$_REQUEST」という記述は、先と同様の「変数」ですが、この変数ではURLで指定された「URLパラメーター」を取得することができます。図のリンクのリンク先URLは、次のようになっていました。
http://localhost:8080/recipe03/?view=pc
この時、URLの「?」記号以降の文字列がURLパラメーターです。例えば、All Aboutのサイトで図の検索窓にキーワードを入力して送信すると、URLが次のようになります。
http://search.allabout.co.jp/?q=php
この場合「q」というのがURLパラメーターになります。本文のプログラムでは「view」というURLパラメーターで情報を送信しているので、PHPでは次の記述でこれを取得することができます。
$_REQUEST['view’]
そして、リンクがクリックされたときには、この変数に「pc」という値が記録されるのです。これを、if構文の条件に利用することで、次のようにスマートフォンからのアクセスであっても、PC向けのページを表示できるようにしたというわけです。
if ($_REQUEST['view'] == 'pc') { readfile('index_pc.html'); } else { readfile('index_touch.html'); }
変数には、この他にもさまざまな使い方があります。変数を使いこなすことで、プログラムをその時々の状況に合わせてとか、ユーザーの操作にあわせて、柔軟に動作させることができるようになります。
今後の連載でも、随時取り上げていきますので、扱いに慣れていきましょう。