実用! PHP入門~インストールから実用サンプルまで速攻マスター

~出典:2005年11月1日 日経ソフトウェア~

PHPの新技術とは

雑誌や書籍での新技術紹介と,現場の間には,おそらく1年余の開きがあります。現場は皆さんの想像以上に手堅いのです。「新技術」と呼ばれているうちには,そうそう使用にゴーサインが出ません。これは裏を返すと「PHPの勉強に出遅れた!」と思っている人にも,まだまだ余裕はあるということでもあります。

準備編:環境を導入する

今回の学習に必要なのは次の3点です。
・パソコン
・Webサーバー・ソフト
・PHP

Webサーバー Apache

Webサーバー・ソフト(以降,単にWebサーバーと呼びます)はブラウザからの問いかけに対して返事をするサーバー側のソフトウエアです。WebアプリケーションでPHPを使うときはWebサーバーが必須です。今回はWebサーバーとして,世界的に最もシェアが大きいApacheを皆さんがお使いのWindowsに導入します。PHPはスクリプト言語エンジンです。Perl,Ruby,Pythonと同類です。ソースコードをテキスト形式のままプログラムとして実行できます。ApacheとPHPはどちらも無償で使用できます。ユーザー登録や支払いといった手間は一切発生しません。

導入手順

導入手順は以下のようにしておくと堅実です。なお今回,インストールはほぼデフォルトで進め,記事もデフォルト・インストールをベースに記述します。各種ソフトのセットアップ前にWindows Updateを実行することを強く推奨します。

Apacheの導入

Apacheは,IIS(Internet Information Services)のようなほかのWebサーバーと同時に動作させると不具合が出ます。Apacheをインストールする前にブラウザでhttp://localhost/にアクセスしてエラー以外の表示がされれば,すでにほかのWebサーバーがインストールされています。特に理由がなければ該当Webサーバーをアンインスートルした後にApacheをインストールしてください。

Apacheのセットアップ用ファイルはhttp://httpd.apache.org/download.cgiから入手できます。「Win32 Binary (MSI Installer): ver 2.0.54」(バージョンは執筆時の最新版)をダウンロードしてください。ダウンロード後にダブルクリックするとセットアップが開始されます。図1に取り上げていないセットアップ画面については,基本的にデフォルト設定のまま「Next」ボタンなどで先に進んで,最後に「Install」ボタンを押せばインストールが始まります。

インストールが完了すると自動的にApacheが起動します。このとき「Windowsセキュリティの重要なセキュリティ警告」というタイトルのダイアログがポップアップ表示されたら「ブロックを解除する」を選択してください。

ブラウザでhttp://localhost/を開いて,図2のページが表示されればセットアップは正しく完了しています。WindowsのタスクトレイにApacheのアイコンがあることも確認します(図3)。以後,Windowsを起動すると,Apacheはその都度自動で起動するようになります。

セットアップが完了すると,Apacheに関する詳細な日本語ドキュメントをhttp://localhost/manual/で閲覧できますので確認してください。なお,http://localhost/で表示されるHTMLはC:\ProgramFiles\ApacheGroup\Apache2\htdocsにあります。今回の記事で紹介するPHPプログラムのファイルもここに置いて実行します。

PHPの導入

http://www.php.net/downloads.phpで,「Windows Binaries:」のところのパッケージ「PHP 5.0.4 zip package」(バージョンは執筆時最新版)をダウンロードしてください。インストーラ付きの「PHP 5.0.4 installer」は簡易版で,今回使用するライブラリ「PEAR」のインストールができません。PHP 5.0.4 zip package(php-5.0.4-Win32.zip)をダウンロードしたら,zipファイルを開いて,中のファイルとフォルダをすべて,C:\phpフォルダ(新たに作ってください)にコピーまたは移動します。

次に,PHPの設定ファイルを用意します。C:\phpにあるphp.ini-recommendedを,テキスト・エディタを使って次のように修正します(行は目安です)。

508行目

extension_dir = ”./”

extension_dir = ”c:エphpエext”
628行目
;extension=php_mbstring.dll

extension=php_mbstring.dll

修正を終えたらphp.iniという名前で保存し,C:\WINDOWSフォルダに移動しておきます。[すべてのプログラム]-[アクセサリ]-[コマンドプロンプト]でコマンドプロンプト画面を出して

c:エphpエphp -v

と入力してバージョン情報が表示されれば完了です(図4)。

PEARの導入

PEARはPHPで記述されたライブラリ群です。http://pear.php.net/で各ライブラリをダウンロードしたり,ドキュメントを閲覧できます。今回はPEARを使ったサンプルを用意しているので,インストールして設定しておきましょう。

PEARのインストールはインターネットに接続した環境で行う必要があります。エクスプローラでC:\phpフォルダを開いて,go-pear.batファイルをダブルクリックして実行してください。インストール画面で特に難しい判断や設定はありません。すべての質問でEnterキーを押し続けるだけです(プロキシ・サーバー経由でインターネットに接続している場合は,途中でプロキシのアドレスを入力する必要があります)。
PEARの詳細は,http://pear.php.net/manual/ja/installation.getting.phpの日本語ドキュメントを参照してください。

ApacheでPHPを使用可能にする
Apacheの設定ファイルを変更

次に,Apacheの設定ファイルを変更して,Apache上でPHPが動作するようにします。C:\Program Files\Apache Group\Apache2\conf\httpd.confを以下のように変更します。

173行目あたりに追加

LoadModule php5_module c:/php/php5apache2.dll

SetEnv PHPRC c:/windows

794行目あたりに追加

AddType application/x-httpd-php .php

書き換えが終わったらファイルを保存し,Apacheを再起動して変更した設定を反映させましょう。タスクトレイのApacheアイコン(図3)を右クリックして,ポップアップ・メニューで「Open Apache Monitor」をクリックします(図5(a))。するとApache Monitorというウィンドウが出ますので「Restart」ボタンを押してください(図5(b))。

これでPHPがApache上で動作するようになります。以後,PHPの設定ファイルであるphp.iniを編集した場合には,Apacheを再起動しないとphp.iniの内容が反映されませんのでご注意ください。

動作の確認

Apacheを再起動したら,動作を確認しておきましょう。次のような内容のファイルを作ってtest.phpという名前で,C:\Program Files\Apache Group\Apache2\htdocsフォルダ(以後,ドキュメント・ルートと呼びます)に保存してください。



<?php 
phpinfo();
?>
phpinfo( )はPHPの内部関数で,PHP,Webサーバー,組み込みモジュールの情報を表示します。http://localhost/test.phpにアクセスして図6の画面が出ればOKです。phpinfo( )で表示される情報にはセキュリティ上公開が望ましくないものも多々入っています。外部に公開するサイトでは絶対に使用しないでください。

基本編:動作の仕組みを理解する
PHPの基本

ここではPHPの基本をさくっと説明しておきます。以後のPHPのサンプルを実際に動かす場合は,test.phpのようにファイルの拡張子を.phpにし,Apacheのドキュメント・ルートに配置してブラウザで確認してください。

まずはHello World

PHPはソースをHTMLの中に埋め込みます。基本中の基本”Hello World”は次のように書けます。


<html><head></head> 
<body>
>?php
Print ”Hello World”;
?>
<?phpから始まって,?>までがPHPのソースコードとして解釈されます。プログラムで生成しなくてもいい部分は通常のHTMLと
まったく同じように書けます。
ここで出てきたprintという関数は,標準出力に対する出力を指定します。Apache上で標準出力するとHTTPに対する出力となり,
閲覧者のブラウザに表示されるわけです。
<html><head></head>
<body>
<?php
print "<h1>Hello World</h1>”;
print "<p>PHPからHTMLタグを生成してみました</p>";
?>
</body></html>

構文そのものはオーソドックス,口悪く言えば古典的で,PerlあるいはC言語的と言えます。まず,行末には「;」を付けます。変数名の頭に「$」が付く点はPerlとよく似ています。コメントは,1行型では//で始まる行で,複数行型では/*から*/の間になるのはC言語的です(実は1行コメントに「#」も使えるのでPerl的でもあります)。組み込み関数の組み合わせだけでプログラムが書ける言語なので,習得は決して難しくありません。PHPの日本語ドキュメントは,http://jp2.php.net/manual/ja/で閲覧できますから,あわてて書籍を買う必要もないでしょう。

HTMLフォームからデータを受け取る

決まった文字列を表示させるだけなら,わざわざPHPを使うことはありませんね。
次に,フォーム(<form>)にユーザーが入力した値を取り込んで,表示するプログラムを作ってみましょう(図7)。

ファイルの用意

ドキュメント・ルートに,フォームを備えたページのHTMLファイル(リスト1(a))と,このフォームからの送信を受け取るPHPプログラム・ファイル(リスト1(b))を用意します。HTML側から簡単に解説していきましょう。

フォーム内のテキスト入力欄やラジオボタン,チェックボックスなどを総称してエレメントと呼びます。各エレメントには,name=xxxのようにnameプロパティが設定されています。例えば「姓」の入力欄には「myouji」というnameプロパティが設定されています。

性別の入力のようにいくつかのラジオボタンを配置して,一つ選択させる場合はnameプロパティを同じにしておきます(どちらも「seibetsu」)。どちらのボタンが押されたのかはvalueプロパティの値で識別します。年齢を選択するリストボックスは<select>タグでnameプロパティを指定し,個々の選択肢である<option>でvalueプロパティを設定します。「開発経験あり」のチェックボックスの値は,チェックが入っているときだけ送信されます。自己紹介欄はテキストエリアとして定義します。ユーザーが「送信」ボタンを押すと,フォームで入力した内容が,<form>タグのactionプロパティで指定したファイルに送られます。

データを適当に入力したら,送信ボタンを押してブラウザのURL欄を見てください。
次のように表示されますね(一部「…」で省略しています)。

http://localhost/sample1.php?

myouji=%B1…&

namae=%C0

…&seibetsu=%C3…

送り先のファイルであるsample1.php?に続いている部分に注目してください。「nameプロパティ=値」の組が「&」で連結してつながっています。これらはすべてフォーム内のエレメントにつけたnameプロパティとその値です。日本語はすべてURLエンコードというエンコード方法によって%xxの形に変換されています。

次に,データを受け取るPHPのコードを見てみます。今回はHTMLの<form>タグでGETメソッドを指定しています(カコミ記事「GETとPOST」を参照)。GETで送られてきたデータをPHPで受け取るには,PHPが内部的に持っている「$_GET」という変数を使います。$_GETには送信されてきたデータが配列で格納されており,それぞれのデータを取り出して表示するには次のようにします。

echo $_GET[”エレメントのnameプロパティ”];

フォームのHTMLできちんとエレメントのnameプロパティを設定していれば,PHPで取り出すのは簡単というわけですね。このあたりはPerlよりはるかに楽チンです。PHPでは文字列の連結には「.」を使います。例えば,4行目は,姓と名の間にスペースを足して繋げているわけです。

チェックボックスの入力を処理している部分を見てください。チェックボックスは「チェックされているときだけ送信され」かつ「valueの指定がなければ,値としてonが送信される」という仕様になっています。ここではif文を使って,keikenというエレメントから送られた値がonであれば変数keikenに「あり」を,それ以外は「なし」を格納し,後で表示させています。

外部ファイル読み込み関数を使う
include と require

PHPにはincludeとrequireという二つの外部ファイル読み込み関数があります。どちらも指定した外部ファイルを,その位置に取り込みます。違いは,includeでは読み込みに失敗してもそれ以降のコードを実行しますが,requireでは読み込みに失敗するとそれ以降のコードを実行しない点です。したがって,そのページのコードを処理するのに必要な外部ライブラリを読み込む際はrequireを使うほうがいいでしょう。

図8は簡単なサンプルです。sample2a.phpがsample2b.phpをincludeで組み込んでいます。sample2b.phpではtext変数に文字列を代入していますから,ブラウザでsample2a.phpにアクセスするとその文字列が表示される仕組みです。

ポイント

気をつけたいポイントを書いておきましょう。include(requireでも同様)される側のファイルでは,PHPのコード部分は必ず<?phpと?>でくくる必要があります。そうしないと単なるテキストとして読み込まれてしまうため,PHPはそのコードをプログラムとして処理してくれません。

これは裏を返すと,includeするファイルにHTMLだけ書いておけば,HTMLのテンプレートとして使用できるということです。すべてのページに著作権表記をしたい場合などに


<hr>©2005 日経ソフトウエア</body></html>

のようなファイルを用意しておき,各ページでincludeすれば済みます。includeする側のファイルの拡張子は.phpでなくてはなりませんが,される側はどんな拡張子でも構いません。インクルード・ファイルだから.inc,ライブラリだから.libのように,見分けやすくしておくこともできます。