手軽にできるウェブアプリケーション構築術

PHP

新連載

第 1回

PHPの基本をマスターしよう
HTML はある程度理解したので、さらに次のステップに進みたいという人におすすめなのが、PHPというスクリプト言語だ。PHPを使えば数行のスクリプトを書くだけでも、複雑なCGIに匹敵する機能が実現できる。今月から始まる
この連載でPHP をマスターして、ワンランク上のウェブ作成にチャレンジしよう。 宮本和明

PHPでウェブ作成が変わる！
PHP を説明するには、実際のPHP のスクだ。PHP はHTML の中にリプトを紹介するのがわかりやすいだろう。ま直接記述でき、しかもCGIずは、下の1のスクリプトを見てみよう。ほのような「おまじない」もとんど普通のHTMLファイルと変わらないが、必要のない、初心者が覚え途中にあるるにも簡単な言語だ。
また、同じようにHTML<? print( date("H:i") ); ?>という部分がPHPのスクリプトで、このスの中に記述するスクリプト

クリプトは現在の時刻を表示するものだ。こ言語としてはJavaScriptのように、PHP は通常のHTML に簡単なスがあるが、JavaScriptはブクリプトを記述するだけで、こうした機能がラウザー側で実行されるス追加できる便利な言語である。

クリプトであるため、サーこれと同じものをCGI（Perl）で記述したのバー側のデータと連携するが2のスクリプトだが、PHPに比べるとかなようなスクリプトは記述でり複雑になる。特に、先頭の3行はCGIを使きない。これに対してPHP

う上での「おまじない」のようなもので、このはサーバー側で実行される部分がなければCGI としては動作しない。

スクリプトなので、CGI でPerl を使ったCGI では、こうした約束事としできることはほぼ実現できて覚えなければならないことが多いのが難点るというメリットがある。

<HTML><BODY>
現在の時刻は <? print( date("H:i") ); ?> です。
</BODY></HTML>1PHPの例

224 INTERNET magazine 2001/7

PHPとJavaScriptの違い
PHP
現在時刻
15:38

ウェブサーバー

現在時刻15:38

スクリプトはウェブサーバーで実行される

スクリプト< ?phpprint(date("H:i"));?>JavaScript
現在時刻
15:38

ウェブサーバー
スクリプト<SCRIPT>
Today = new Date();hour = Today.getHours();

スクリプトはウェブブラウザーで実行される#!/usr/bin/perl
use CGI qw/:standard/;
print header("text/html");($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime();print "<HTML>\n";print "<BODY>\n";print "現在の時刻は".$hour.":".$min."です。\n";print "</BODY>\n";print "</HTML>\n";2CGIの例

インターネットマガジン／株式会社インプレスR&D

Perl（パール）：ラリー・ウォールによって開発されたプログラミング言語。当初はテキスト処理に重点を置いた言語として開発されたが、言語仕様の拡張がなされ、ファイル操作やネットワークプログラミングなども可能となっている。ウェブサーバーと連携させるCGIプログラムの多くは、Perlによって記述されている。
©1994-2007 Impress R&D

PHP
現在の時刻、ファイル更新時刻を表示する
それでは、前ページで紹介したスクリプトをもう少し発展させた例を見てみよう。1のnow.php は、時刻だけでなく年月日や曜日を表示 するスクリプトだ。このほかにも、date関数の中では表1のような文字列が指定できる。
1 のスクリプトにさらに手を加えて、さらに曜日を日本語表記するようにしたのが、2のnow2.php だ。このスクリプトの2 行目で<HTML><HEAD><TITLE> 現在時刻の表示 </TITLE></HEAD><BODY>
現在時刻：<?
echo date("Y 年 m 月 d 日(D) H 時 i 分 s 秒");?></BODY></HTML>

1now.php
現在時刻の表示は、array 関数を使って、$weekday̲j という配列に曜日の日本語表記を設定している。
具体的には、以下のような値が配列に代入されることになる。
$weekday̲j[0] = "日"〜$weekday̲j[1] = "月"$weekday̲j[6] = "土"
あとは、date関数で「w」を指定すれば曜日を数値（0 〜 6）として取り出せるので、これを配列のインデックスとして利用することで、曜日を日本語で表示している。
3のnow3.phpは、ウェブページの最終更新 日 を表 示 するスクリプトである。
getlastmod()というのは、現在のファイルが<?
$weekday_j = array("日", "月", "火", "水", "木", "金", "土");?><HTML><BODY>
現在時刻：<?
echo Date("Y 年 m 月 d 日");$weekday_no = date("w");echo "(" . $weekday_j[$weekday_no] . ")";
echo date("H 時 i 分 s 秒");?></BODY></HTML>更新された日時を取得する関数である。date関数には2 つ目の引数でunixtime を指定することができるので、その日時をY/m/d H:i2now2.php
現在時刻の表示（日本語の曜日）というフォーマットで出力している。

表 1 date関数で指定できる文字列の例
文字値

Y

年（2000〜）y

年（00〜）m

月（01〜 12）n月（1〜 12）<HTML><HEAD><TITLE> ファイル更新時刻の表示 </TITLE></HEAD><BODY>
最終更新時刻<?
echo date( "Y/m/d H:i", getlastmod() );?></BODY></HTML>日（01〜 31）j日（1〜 31）

D

曜日（Sun〜 Sat）

3now3.phpw

曜日（0〜 6）

ファイル更新時刻の表示

H時（00〜 23）

G時（0〜 23）

i分（00〜 59）s秒（00〜 59）〜d

インターネットマガジン／株式会社インプレスR&D

unixtime ：UNIXで用いられる時刻の内部表現。1970年1月1日0時0分0秒からの通算秒数を整数で表す。

©1994-2007 Impress R&D

INTERNET magazine 2001/7225環境変数で表示されるページを変えよう
次は、ウェブページを見ている人の環境によって表示される内容が変わるページを作ってみよう。
1のenv.phpは、ウェブページを見ている人のブラウザー名とIP アドレスを表示するスクリプトだ。PHP ではこうしたユーザーの状態を表す環境変数があらかじめ用意されてお<HTML><BODY><H2> 環境変数の表示 </H2>
ブラウザー： <? echo $HTTP_USER_AGENT; ?><BR>
IP アドレス： <? echo $REMOTE_ADDR; ?></BODY></HTML>り、ここで用いた「$HTTP̲USER̲AGENT」1env.php

や「 $ R E M O T E ̲ A D D R 」 のほかにも、環境変数を表示する「$SERVER̲NAME」（スクリプトが実行されているサーバーの名前）や、「$PHP̲SELF」（現在実行されているスクリプトのファイル名）などが利用できる。
2 のbrowser.php では、if 文で条件分岐することによって、ブラウザーごとに表示を変えるようになっている。注目すべき箇所としては、<?〜?> のPHP スクリプトが複数の箇所に分断されている点である。PHPではこのように記述しても、ファイル全体でスクリプトとして動作するようにできている。ほかの言語のプログラミングに慣れた人は少し戸
惑うかもしれないが、このような使い方ができるのはPHP の大きな特徴の1つである。

<HTML><BODY><? if(ereg("MSIE", $HTTP_USER_AGENT)){ ?><H2>MSIE 用のページ </H2>
このページは MSIE 用のページです。
<? }elseif(ereg("Netscape", $HTTP_USER_AGENT)){ ?><H2>Netscape 用のページ </H2>
このページは Netscape 用のページです。
<? }elseif(ereg("DoCoMo", $HTTP_USER_AGENT)){ ?><H2>i モード用のページ </H2>
このページは i モード用のページです。
<? }else{ ?><H2> その他のブラウザー用のページ </H2>
このページはその他のブラウザー用のページです。
<? } ?></BODY></HTML>

if 文の中では、指定した文字列が含まれているかを判定するeregという関数を利用している。ここでは、$HTTP̲USER̲AGENT に

2browser.php$HTTP̲USER̲AGENTによる分岐「MSIE」や「Netscape」、「DoCoMo」といった文字列が含まれているかどうかを判別して、それぞれのページを表示している。
3 のaccess.php では、サーバーマシン自身からアクセスした場合にだけページを表示し、他のマシンからアクセスされた時にはページを表示しないような仕組みを作っている。
ウェブページはネットワークにつながっていればどこからでも参照される可能性があるので、管理用のスクリプトを記述する場合には、こ<HTML><BODY><? if($REMOTE_ADDR == "127.0.0.1"){ ?><H2> サーバーマシン用のページ </H2>
サーバーマシンからアクセスした場合のページ<? }else{ ?>このページはサーバーマシンからしかアクセスできません。
<? } ?></BODY></HTML>

うした処理によりセキュリティーに配慮して3access.phpおくことが必要だ。ここでは「自分自身のIP$REMOTE̲ADDRによる分岐アドレス」は「127.0.0.1」であることを利用して、これをif 文で判定して表示される内容を変えている。

226 INTERNET magazine 2001/7

インターネットマガジン／株式会社インプレスR&D

IP アドレス：インターネットに接続されたコンピュータを識別するために付けられる、基本的に世界で1つしかない番号。IPアドレスにわかりやすい名前を付けたのがホスト名。

©1994-2007 Impress R&D

PHP

自分のパソコンにPHPをインストール
しよう● PHPのインストール
PHPを実際に使ってみるには、自分のパソコンにPHPが動く環境を作ってしまうのがもっとも簡単だ。今回は、PHPをウィンドウズマシンにインストールする方法を紹介しよう。

2 ダウンロードしたファイルを解 凍 して、「php4ts.dll」というファイルを「C:¥Windows¥System」フォルダーに移動する。残りのファイルは、「C:¥PHP」というフォルダーを作り、そこにすべて移動する。

1PHPのダウンロード用のページで、ウィンドウズ版のPHPをダウンロードする。

www.php.net/downloads.php● Apacheのインストール
次に、ウェブサーバー用のプログラム「Apache」をインストールしよう。
設定が終われば、自分のパソコンでPHP が動かせるようになる。

4Apache を動かすには、スタートメニューから「 プ ロ グ ラ ム 」 → 「 Apache httpd Server」 →「Start Apache in Console」を選ぶ。

1Apache のダウンロード用 のページから、「Apache-1.3.19-win32-no src-r2.msi」をダウンロードする。
「1.3.19」はバーション番号なので、変わる可能性がある。

2 ダウンロードしたファイルをダブルクリックすれば、Apacheのインストールが開始される。インストールはウィザード形式なので、指示に従っていけば問題ない。
5 以上で準備は完了。PHP ファイルを「C:¥Program
Files¥Apache Group¥Apache¥htdocs」フォルダーに入れて、ウェブブラウザーで「http://localhost/〜.php」にアクセスすれば、PHPが動いているはずだ。

httpd.apache.org/dist/httpd/binaries/win32/

LoadModule php4_module c:/php/sapi/php4apache.dll
AddType application/x-httpd-php .php

3「C:¥Program Files¥Apache Group¥Apache¥conf」
フォルダーにある「httpd.conf」をテキストエディターで開き、左記の2行を最終行に追加する。

インターネットマガジン／株式会社インプレスR&D©1994-2007 Impress R&D

INTERNET magazine 2001/7

227

［インターネットマガジン バックナンバーアーカイブ］ ご利用上の注意
この PDF ファイルは、株式会社インプレス R&D（株式会社インプレスから分割）が 1994 年～2006 年まで発行した月刊誌『インターネットマガジン』の誌面を PDF 化し、「インターネットマガジン バックナンバーアーカイブ」として以下のウェブサイト「All-in-One INTERNET magazine 2.0」で公開しているものです。

http://i.impressRD.jp/bn
このファイルをご利用いただくにあたり、下記の注意事項を必ずお読みください。
z 記載されている内容（技術解説、URL、団体・企業名、商品名、価格、プレゼント募集、アンケートなど）は発行当時のものです。
z 収録されている内容は著作権法上の保護を受けています。著作権はそれぞれの記事の著作者（執筆者、写真の撮影者、イラストの作成者、編集部など）が保持しています。
z 著作者から許諾が得られなかった著作物は収録されていない場合があります。
z このファイルやその内容を改変したり、商用を目的として再利用することはできません。あくまで個人や企業の非商用利用での閲覧、複製、送信に限られます。
z 収録されている内容を何らかの媒体に引用としてご利用する際は、出典として媒体名および月号、該当ページ番号、発行元（株式会社インプレス R&D）、コピーライトなどの情報をご明記ください。
z オリジナルの雑誌の発行時点では、株式会社インプレス R&D（当時は株式会社インプレス）と著作権者は内容が正確なものであるように最大限に努めましたが、すべての情報が完全に正確であることは保証できません。このファイルの内容に起因する直接的および間接的な損害に対して、一切の責任を負いません。お客様個人の責任においてご利用ください。

このファイルに関するお問い合わせ先
All-in-One INTERNET magazine 編集部
im-info@impress.co.jp
Copyright © 1994-2007 Impress R&D, an Impress Group company. All rights reserved.