Webデザイナーやコーダーの方でも知っておきたいPHPの便利な使い方

この記事は、普段サーバーサイドスクリプト言語(PHP、Perl、Ruby等)を書いていない方を対象に、PHP を使うとどのようなことができるのか、あるいはできないのかを解説した入門記事です。

PHPのロゴ

キャンペーンページで、指定の時間に受付を終了する

たとえばキャンペーンページで、指定の時間までは「お申込みはこちら!」というボタンを表示し、それ以降は「キャンペーンは終了しました」と表示させたいとします。
こういう時、PHP はわりと直感的に書けるので便利です。

1
2
3
4
5
6
7
8
9
10
<?php
// 現在時刻が、キャンペーン終了より前であれば
if (time() < strtotime("2013-09-01 00:00:00")) {
    echo "お申込みはこちら!</p>";
 
// 現在時刻が、キャンペーン終了後であれば
} else {
    echo "<p>キャンペーンは終了しました</p>";
}
?>

※コメントで、「日付はUNIXタイムスタンプに変換してから比較したほうがよい」とご指摘いただいたので、strtotime() を使用するよう変更しました。

3行目に “2013-09-01 00:00:00” という箇所がありますが、ここをキャンペーンの終了時刻にします。
この場合は、2013年9月1日 0時0分0秒でキャンペーンが終了しますので、2013年8月31日 23時59分59秒までは「<p>キャンペーン実施中!</p>」という文字列が、2013年9月1日 0時0分0秒からは「<p>キャンペーンは終了しました</p>」という文字列が表示されます。

※「//」から始まる行は、CSSの「/* */」と同じようなコメントであり、PHPの動作や画面の表示には影響しません。

なお、指定した時間にキャンペーンをスタートし、指定した時間に終了させるということもできます。

1
2
3
4
5
6
7
8
<?php
// キャンペーン期間を指定
if (time() >= strtotime("2013-09-01 00:00:00") && time() < strtotime("2013-10-01 00:00:00")) {
    echo "キャンペーン実施中!</p>";
} else {
    echo "<p>キャンペーン期間は9月1日〜9月30日です。</p>";
}
?>

3行目が “2013-09-01 00:00:00” と “2013-10-01 00:00:00” になっていますが、これは 2013年9月1日〜9月30日 ということです。

なぜ “2013-10-01 00:00:00″ と書いてあるにも関わらず10月1日までではないかというと、その直前で「<」を使って「未満」を表しているからです。

一方、キャンペーンの開始時刻は「>=」を使って「以上」を表しているため、”2013-09-01 00:00:00” は9月1日になった瞬間キャンペーンがスタートすることになります。

共通のヘッダーやフッターを読み込む

Webサイト全体で共通のヘッダーやフッターがある場合、各 HTML にそれぞれ書いてあると、Webサイト全体のヘッダーやフッターを修正したい時不便です。
「検索・置換」機能でまとめて置換ということもできますが、無関係な場所まで置換してしまう危険があります。

ヘッダーやフッターは1つのファイルにまとめておけば、1つのファイルを書き換えるだけでサイト全体のヘッダーやフッターが書き換わるので便利です。

そのような時、もしサイト制作に携わる全員が Dreamweaver を使用しており、かつ今後もずっと Dreamweaver を使用し続けるということであれば Dreamweaver のテンプレート機能 を使用するという選択肢もありかもしれません。
しかし、実際はそれぞれの制作者が使用しているエディターはバラバラということが多いので、PHP などのサーバーサイドスクリプトを使用すると便利です。

やり方は簡単、ヘッダー部分のみ(例: <div id=”header”>〜</div>)を「header.html」などのファイル名で保存しておき、同じフォルダーに以下のようなPHPを用意すればそこに読み込まれます。

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
</head>
<body>
    <?php include "header.html"; ?>
</body>
</html>

見ての通り、8行目以外はただのHTMLです。

実際の案件では、ページ数が多いWebサイトの場合はこのような方法を使わず、今後の更新のしやすさなども考えて WordPress などの CMS(コンテンツ管理システム)を導入するケースが多いと思います。
WordPress のテーマも、このようにヘッダーやフッターなどが別ファイルに分かれています。

私の場合、このブログは WordPress を使用していますが、最近発売した プロになるためのWebデザイン入門講座 のサポートページはそれなりにページ数があるものの、WordPress を導入する必要はなかったのでこの方法を使用しました。

フッターの年表記を自動的に更新する

よくある「©2008-2013」のような表記の「2013」部分は、以下のようにすると自動的に更新できます。

1
2
3
<div id="footer">
    <p class="copyright">©2008-<?php echo date("Y"); ?> Stocker.jp</p>
</div>

URLを「.html」のままPHPを使用する

たとえば、「既存のWebサイトにPHPを導入したいがURLは変更したくない」という場合、ファイル拡張子は「.html」のまま PHP を導入することもできます。

※これは、PHP の機能ではなく「Apache」という一般的に使用されているWebサーバーの機能です。

まず、テキストエディターで新規作成し、以下のコードをペーストします。

AddType application/x-httpd-php .htm .html

いったん「htaccess.txt」などのファイル名で保存し、FTPクライアント(FFFTP などのアプリケーション)で、Webサーバーのトップページの「index.html」と同じフォルダーにアップロードした後、Webサーバー側のファイル名を「htaccess.txt」から「.htaccess」に変更します。

これで、拡張子「.php」だけでなく「.html」や「.htm」のファイルでも PHP が使用できるようになります。

※レンタルサーバーによっては、この方法ではうまくいかないことや、このような設定ができないこともあります。詳しくは、ご利用のレンタルサーバーの解説ページなどをご覧ください。

その他、PHPでできること

他にも、以下のようなこともできます。

  • メールフォームの作成。HTMLのフォームから送られた文字列を整形して(たとえば全角半角を統一して)メールを送信したりできます。
  • 他のサイトから情報を取得して表示したりできます。
  • ECサイト(ショッピングサイト)の作成。といっても、1から PHP を書くのではなく、EC-CUBE などの PHP でできたECサイト向けの CMS(コンテンツ管理システム)を導入し、カスタマイズするのが一般的です。
  • WordPress のカスタマイズ。WordPress は、今や世界中の 18% を越えるWebサイトで使用されているといわれています。

PHPではできないこと

Google で PHP 関係のキーワードで検索していると、まれに「関連する検索キーワード」に「PHP アラートボックス」などのキーワードが出てくることがあります。

これは、おそらく下の画像のようなWebブラウザーのアラートダイアログをPHPを使って表示したいと考えた方が検索しているのではないかと思うのですが、これは PHP ではできません。

アラートダイアログ: Hello World

こういう時は、JavaScript を使用します。
HTML の中に以下のように書くと、JavaScript を使用してアラートダイアログを表示させることができます。

1
2
3
<script>
alert("Hello World");
</script>

その他、シューティングゲームのようなインタラクティブなゲームを作りたい時は、PHP ではなく JavaScript を使用するか、特定のプラットフォーム(iPhone など)向けに制作する時はネイティブの言語(Objective-C など)を検討しましょう。