PHP/PHPの基本・始め方

PHPレシピ3:スマートフォンとPCで振り分ける 1(2ページ目)

今時のWebサイトは、スマートフォン(スマホ)への対応が必須です。スマホへの対応には、CSSで切り替える「レスポンシブWebデザイン」などの手法もありますが、ここではHTMLを切り替える方法で、しかもPHPを利用することでURLを変えずにデザインだけを変えるレシピを紹介します。

執筆者:谷口 允


解説

はじめに、このプログラムで利用しているメインとなるファンクションは次の部分です。
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');
}

変数には、この他にもさまざまな使い方があります。変数を使いこなすことで、プログラムをその時々の状況に合わせてとか、ユーザーの操作にあわせて、柔軟に動作させることができるようになります。

今後の連載でも、随時取り上げていきますので、扱いに慣れていきましょう。
【編集部おすすめの購入サイト】
楽天市場で PHP 関連の書籍を見るAmazon で PHP 関連の書籍を見る
  • 前のページへ
  • 1
  • 2
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます