第1部 構築編

本番運用に向けて

PHP4 構築

LAMP プラットフォーム最後の牙城である PHP だ。
この PHP だけは Apache に巣くうし、MySQL クライアントライブラリ使うしで最後に設定するほかない

さて、前回のお試しインストールでは PHP 4.2.3 を導入した。
しかし PHP 4.2.3 は日本語処理に致命的な欠陥があって、4.2.2 に戻してしまったということは最後に書いた。
あれから随分と経っているし、流石に新しいバージョンが出ているだろうと思い立って、PHP の総本山である http://www.php.net/ に行ってみた。

余計ややこしくなってるがな………

4.3.0 がリリースされていました(爆)
前回の 4.2.3 から随分とリリース間隔が開いたせいで、随分と大量のバグがフィックスされていたり、日本語対応がより強化されていたり、なんちゅ~か凄いことになっている
と言うわけで、実験もかねて 4.3.0 の導入を行ってみよう。
http://www.php.net/downloads.php からミラーサイトの選択に入って、何処でもいいのでとにかく php-4.3.0.tar.gz.tar を落としてくる。
んで、例によって /home/******** に FTP 転送して SSH でログイン、インストールを開始する。

$ su
Password: ????????
# mkdir /usr/local/src/php
# mv php-4.3.0.tar.gz /usr/local/src/php/
# cd /usr/local/src/php/
# tar zxf php-4.3.0.tar.gz
# cd php-4.3.0

ソースを展開するまでの処理はいつもと同じだ。
さて、最初に configure スクリプトを実行するわけだが、この PHP 4.3.0、随分と豪快に変わっているので注意が必要。
まず日本語を扱う上で非常に大きい変更が、--enable-mbstr-enc-trans オプションが廃止されたこと。
フォームで投稿されたデータの文字コードを自動変換する機能だが、これが php.inimbstring.encodingtranslation で指定するように変更された。
さらに、PHP のソースを Shift JIS で記述することが出来るようになってしまう --enable-zend-multibyte が正式に追加された。

元々は国際化版 PHP にのみ含まれていたのだが、統合されたらしい。
PHP のパーサの動きや、文字コードの詳細を知らないと Shift JIS は危険だっただけに、嬉しい拡張かも知れない。
ま、俺は EUC-jp で書くからいいんだけどさ。

と言うことで、configure スクリプトに渡す最低限は以下のようになるはずだ。

# ./configure --with-apxs=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql/ --enable-mbstring --enable-mbregex --enable-zend-multibyte

複数バージョンをインストール出来る --enable-versioning はオミット。
実際やらないし。

更に、コンパイルして、インストール。
やはりコンパイルにはそれなりの時間がかかるので、しばし休憩だ。

# make
# make install

インストールされたら、実体は /usr/local/apache/libexec にある libphp4.so だ。
以下のように叩いて、存在すること確認しよう。

# ls -l /usr/local/apache/libexec/ | grep php

さらに php.ini ファイルを作成する。
ソースを展開したディレクトリに php.ini-recommended という php.ini の雛形のファイルがあるので、これをコピーして作成する。

# cp php.ini-recommended /usr/local/lib/php.ini

しかし今回、いつもなら vi で編集してしまうのだが、面倒くさいので Windows 端末で FTP でダウンロードしてきて、WZ EDITOR 4.0 で修正してしまおう。

Windows と Linux では改行コードがことなるので、通常のメモ帳などでは編集出来ない。
文字コードと改行コードに関して柔軟性のあるエディタを利用すべし。

取り敢えず、俺は以下の点を書き換えた。
一部はアンコメントしたダケの物もある。
先頭の数値は行番号を表すが、バージョンで行番号が変わる可能性は充分にあるので参考程度に。

89 short_open_tag = Off
119 output_handler = mb_output_handler
282 display_errors = On
313 track_errors = On
1014 mbstring.language = Japanese
1019 mbstring.internal_encoding = EUC-JP
1022 mbstring.http_input = auto
1026 mbstring.http_output = EUC-JP
1033 mbstring.encoding_translation = On
1037 mbstring.detect_order = auto
1041 mbstring.substitute_character = none;
1051 mbstring.func_overload = 0

さらに、PHP ソースコードに Shift JIS を使う予定が在れば以下の 1 行を追加すると良いが、俺は EUC-JP で書くのでいらない。

mbstring.script_encoding = auto

mbstring.internal_encoding と mbstring.http_output と PHP ソースを記述している文字コードを統一するのがもっとも効率がいいのは想像すれば分かるだろう。
さらに MySQL も EUC-JP で動作させているので、PHP と MySQL による WEB データベースは完全に EUC-JP に統一されていて、最も効率的な状態になっているのだ。

さて、php.ini も変更したので、サーバに戻してしまう。
最後に Apache の設定だ。
/usr/local/apache/conf/httpd.conf を vi で開いて、まず

DirectoryIndex index.html


DirectoryIndex index.html index.htm index.php index.cgi

と書き換える。
ついでに二つほどエントリを追加したのはご愛敬
続いて、LoadModule というディレクティブが並んでいる最後辺りに以下の行があるかどうかを確認する。
無ければ追加だ。

LoadModule php4_module libexec/libphp4.so

さらに、AddModule というディレクティブが並んでいる最後辺りに以下の行があるかどうかを確認する。
もちろん無ければ追加だ。

AddModule mod_php4.c

どうやらこの二つは PHP のインストール時に自動的に書き込まれるらしい
httpd.conf と httpd.conf.bak というファイルが、インストールと同時刻に更新されていた。

最後に、AddType ディレクティブを追加する。

AddType application/x-httpd-php .php

これで、拡張子が php のものが PHP4 のファイルであることを PHP4 のモジュールに教えることが出来る。

さてはて、ここまで設定が出来たので、Apache を再起動して PHP のモジュールを試してみよう。

/etc/init.d/httpd restart

今は Apache のドキュメントルートは /usr/local/apache/htdocs のままなので、このディレクトリに phpinfo.php と言う名前で以下の内容を書いたファイルを用意する。

<?php phpinfo(); ?>

そして Windows 端末から覗いてみると、見事に PHP 4.3.0 の情報画面が表示された。
されたのだが………
MySQL の MYSQL_INCLUDE という項目が、

-I/usr/local/mysql//include/mysql

となっている………
“//”ってなんじゃい………

はたくぞ、おひっ!?

その程度は吸収してくれそうな物だが、なんか気分が悪いので configure から再実行
PHP のソースディレクトリにある config.cache を削除してから、一連の操作を繰り返す。
そして再び確認。

ありゃ?
消えない………??

仕方ないから、動作確認のため、非常に簡単なソースを作ってみた。
んで、動作実験。

………動くじゃないくぁっ!?!?

………どうやら、表示だけがおかしいらしい………
ちょっと一安心。
ついでに MySQL と PHP4 の接続テストも出来たから良しとしようか(笑)

今回紹介している PHP 4.3.0 では、CGI 動作させた場合のセキュリティの脆弱性が発見された。
PHP 4.3.0 を CGI 動作させている場合には、2003/02/17 に公開された 4.3.1 へのアップグレードが推奨されている。
なお、4.3.0 から 4.3.1 への更新点はこのセキュリティの脆弱性に対する修正のみである。

Valid HTML 4.01 Strict Valid CSS!