第1部 構築編

お試し

LAMP 構成一通り

Linux を導入し、Apache の設定を試し、FTP とも格闘し、MySQL も入れた我が家のサーバ。
んで、やっと LAMP プラットフォーム最後の牙城、PHP に挑戦だ。

PHP は、HTML に直接書き込むタイプのサーバサイドスクリプト言語で、知っている人は Microsoft IIS (Internet Information Server) 上で動く ASP (Active Server Pages) をイメージすると分かりやすい。

その証拠というわけではないが、一時期のまだ成長過渡期にあった PHP を差して、出来損ないの ASP と表現することがあった。
実際、PHP2 とかの辺りは実行速度も遅いして大変だったらしい。
しかし ASP が Microsoft 一社の寡占的なシロモノであるのに対して、PHP はオープンソースであるし、Windows + IIS、Windows + Apache、Linux + Apache とおよそプラットフォームを選ばない。

言語その物は PHP が元々 PERL へのフィルタから出発していることから、PERL と酷似している C 言語系の文法を採用。
変数の取り扱いなどが PERL に比して割と直感的に解釈がされたり、各データベースへの接続に強かったりといった特徴がある。

ただし、俺的にはナンセンスであると思わざるを得ない仕様が多々ある。
データベース接続を抽象化していないので、結局データベース毎にソースを変更しないといけないところとか、関数定義の中に関数を書くことを許可しているのに、その関数はグローバルスコープで参照できてしまうとか………
前にも書いたけど、C 言語世界で生きている連中が楽するために作った言語ってナンセンスな部分が多すぎると思うぞ、俺は。

ちなみに、Microsoft の ASP には VBScript だけでなく、JScript や PERL Script も使えるという強みもある。
Microsoft はその企業体質上プラットフォームは限定したいから、せめて言語は限定しないことで UNIX 陣営に対する差別化を図りたいらしい。
だから VBScript とか言う余りにも取り回しの効かないヘタレた言語が嫌で嫌で仕方ない人は、サーバサイドなんだし、自分の使いやすい言語を選択するべし。
VB 系の言語しかできませんとか抜かす脳腐れプログラマなど放っておけ(爆)

取り敢えず、PHP のソースコードを貰ってくる。
http://www.php.net/ にいけば最新版が手にはいるので、早速ダウンロードだ。
この日記を書いている 2002/11/16(Sat) 現在では 4.2.3 が最新らしいので、php-4.2.3.tar.gz になった。
これを WinSCP でサーバに転送する。
それを慣例に従って /usr/local/src/php にコピーして、解凍する。

tar -xzf php-4.2.3.tar.gz

んで、例によってソースを展開したディレクトリに移動して configure を行う。
MySQL を使うことが前提だし、マルチバイト文字サポートも入れたい。
さらに Apache の DSO モジュールとして組み込みたいので、以下のような設定になる。

DSO モジュールとして組み込む場合には Apache の DSO モジュール用ユーティリティである apxs が必要になるらしいが、Red Hat Linux の rpm によってインストールされた Apache のディレクトリ構造はイマイチ慣例に従っていないようで、探すのにエライ苦労した。

./configure --with-apxs=/usr/sbin/apxs --with-mysql=/usr/local/mysql --enable-mbstring --enable-mbstr-enc-trans --enable-versioning

Apache の DSO モジュールとして組み込むと、Apache からの呼び出される際に、いちいち別プロセスを起動する CGI 動作に比して高速に起動できる
PHP が PERL に対して“速い”と言われた所以だが、今は PERL も mod_perl という DSO 形式があるようなので、この差はなくなったと言えよう。
後は純粋に実行エンジンの性能に寄ることになった。

さらに、コンパイル。

make

続いてインストール。

make install

さて、これでインストール自体は終わったが、PHP の設定ファイルは自動的にはインストールされないので、ソースを展開してディレクトリにある php.ini-dist というファイルを php.ini と改名しつつ、/usr/local/lib にコピーする。

cp php.ini-dist /usr/local/lib/php.ini

んで、vi で php.ini を設定する。
日本語を扱うので、マルチバイト文字機能を有効にしてしまう。

[mbstring]
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
;mbstring.detect_order = auto
;mbstring.substitute_character = none;

となっているところを、

[mbstring]
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.detect_order = auto
mbstring.substitute_character = none;

と修正する。
その他に、http からの入力を自動的に変数展開する機能が必要ならば、

register_globals = Off


register_globals = On

にする。
4.2.0 から register_globals の初期設定が Off になったので、以前のソースをそのまま使いたい場合には On にする。
ただし、On にするとパフォーマンスが少し落ちるらしいので注意。
詳しいことは専門書籍に譲る。

次ぎに Apache の設定ファイルを書き換える。

vi /etc/httpd/conf/httpd.conf

慣例では /usr/local/apache/conf/httpd.conf の筈だ。
Red Hat Linux の rpm でインストールされた場合は位置が変わってしまうらしい。
様々な書籍を見ても、この辺りの読み替えは適宜必要になる。

LoadModule php4_module libexec/libphp4.so


AddModule mod_php4.c

という行があるのを確認しよう。
一応あるので、最後に DirectoryIndex の設定に拡張子 php の index.php を加えよう。
こうすれば、ファイル名を指定しないリクエストでの既定のファイル名に indes.php が導入される………と思ったが………

もう書かれてる………

rpm でインストールすると色々と初期設定が変わっているらしい。
これって、結構大きなお世話?
取り敢えず、要らないやつは消しておく。

んで、Apache を再起動する。

/etc/rc.d/init.d/httpd restart

で、動作確認してみよう。
今の所は設定をいじっていないので、ドキュメントルートは /var/www/html のままだ。
ここに test.php という名前で以下の一文を書き込んだファイルを作成する。

<?php phpinfo() ?>

んで、メイン環境のブラウザから http://192.168.1.99/test.php を表示してみる。
すると以下のような PHP の情報表示が現れた。

PHP 情報ページの画面イメージ

もちろん、MySQL の組み込みも大丈夫だ。

MySQL 組み込み情報のイメージ

と言うわけで、LAMP プラットフォームはそのものは完成したわけだね。

この日記は基本は LAMP プラットフォームの構築が終了するところまでだけど、これを WEB に公開できるようになった時点で勝利だ。
一応一通りのお試しは終わったので、気が向いたら Apache の導入とかも全部ソースから行って、Red Hat Linux は Linux 本体のインストールのみに終始させることを目指してみよう。
初めてインストールしたので、色々と使いもしない機能がインストールされていたり、慣例と違う設定がされていたりで、少々気分が悪いことも確かだからだ。
かつて MS-DOS で“ぶいぶい”言わせていた頃の勘所も取り戻したし、vi の基本的な使い方も憶えたし、結構いいお勉強だったね(笑)

後で気付いたのだが、PHP の 4.2.3 はマルチバイト文字の自動エンコーディングで致命的なバグがあることが判明しているようだ。
今回の日記で指定した --enable-mbstr-enc-trans 指定が為されていると文字コード判別がしくじるようで、しかしこの指定がないと自前で文字コード変換を作らないといけないわけで、本末転倒というか何というか………
4.2.2 と 4.2.3 の間には細かいバグフィックスが含まれるがセキュリティ修正は含まれないので、4.2.2 に戻してしまうのもひとつの手か。
日本 PHP ユーザー会の方でパッチが当たったバージョンを用意してくれているので、そちらを使わせてもらうのも選択肢だ。

ちなみに俺は、4.2.3 でインストールしたファイルを全て消して、4.2.2 にダウングレードしてしまった。

Valid HTML 4.01 Strict Valid CSS!