PHP5.2 のインストールおよび設定方法
FreeBSD8.0において、PHP5.2 のインストールおよび設定方法についてご紹介します。
PHP とは
PHP(Hypertext Preprocessor)は、動的にWebページを生成するWebサーバ構築用のオープンソース スクリプト言語です。
C言語に類似しているため学習しやすく、またデータベースとの連携にも優れていることから、
ウェブサイトの構築に用いるソフトウェア環境である LAMP(Linux, Apache, MySQL, PHP)の一角として普及してきています。
無料ですので、当然ながらサポートはありませんが、
日本語のマニュアルが充実しており、
また、ネット上には非常に多くの情報量があるため、入門から応用まで、まず困ることは無いでしょう。
PHP5.2 のインストール(php-5.2.13)
他モジュールとの整合性を保つため、portsからインストールします。
portsのインストール準備まで完了していると、表1、表2の通りインストールは至って簡単ですが、
使用するモジュールを適切に選択する必要があります。
表1 PHP5.2 のコンパイル
# cd /usr/ports/lang/php52-extensions
# make ← Makefile にしたがってコンパイルします。
ここでは、私の利便性のため、私が選択した選択肢を記録しておきます。
この設定で大抵のことは可能になりますが、
PHPの特殊な機能を利用したい場合には、適宜選択肢を変更する必要があります。
例えば、私の場合は以下のようにオプションを設定しています。
- "Options for php52-extensions 1.3_1"の画面: デフォルト設定 + BZ2, CALENDER, CURL, FTP, GD, GETTEXT, GMP, IMAP, MBSTRING, MCRYPT,
MHASH, MYSQL, MYSQLI, OPENSSL, PDF, SOAP, SOCKETS, ZIP, ZLIB
- "Options for php52 5.2.13"の画面: デフォルト設定 + APACHE, DEBUG, MULTIBYTE, MAILHEAD, REDIRECT
- "Options for curl 7.20.0"の画面: デフォルト設定 + CURL_DEBUG, LIBIDN, LIBSSH2, TRACKMEMORY
- "Options for libssh2 1.2.5,2"の画面: デフォルト設定のまま
- "Options for ca_root_nss 3.12.4"の画面: デフォルト設定のまま
- "Options for php52-pcre 5.2.13"の画面: デフォルト設定 + BUNDLED_PCRE
- "Options for php52-gd 5.2.13"の画面: デフォルト設定 + JIS
- "Options for libxslt 1.1.26"の画面: デフォルト設定のまま
- "Options for png 1.4.1_1"の画面: デフォルト設定 + APNG
- "Options for gmp 5.0.1"の画面: デフォルト設定 + CPU_OPTS
- "Options for cclient 2007e,1"の画面: デフォルト設定のまま
- "Options for php52-mbstring 5.2.13"の画面: デフォルト設定のまま
- "Options for php52-sqlite 5.2.13"の画面: デフォルト設定 + UTF8
以上の make でエラーが発生してないことを確認後、表2のコマンドでインストールします。
表2 PHP5.2 のインストール
# make install clean ← インストール後不要ファイルを削除します。
PHP 動作環境設定ファイル php.ini の準備
php5.2 の動作は、/usr/local/etc/php.ini ファイルにより制御できますので、セキュリティを考慮した設定が必要です。
ports から php5.2 をインストールすると、/usr/local/etc/php.ini-dist および /usr/local/etc/php.ini-recommended というファイルが作成されます。
/usr/local/etc/php.ini-dist は phpのデフォルト設定であり、/usr/local/etc/php.ini ファイルが無い場合の動作と同じです。
このため、開発用には使用できますが、セキュリティを考慮した運用には適しません。
一方、/usr/local/etc/php.ini-recommended は、セキュリティを確保しつつ、効率的に php を動作させるために用意されたファイルですので、
こちらをコピーして使用しましょう。
表3 /usr/local/etc/php.ini の準備
# cd /usr/local/etc
# cp php.ini-recommended php.ini
PHP 動作環境設定ファイル php.ini の設定
ここでは、php5.2 の運用上、推奨されるいくつかの php.ini の設定(php.ini-recommended からの変更点)をご紹介します。
php5.2 エラー/警告 出力レベルの変更
php のエラーログ は Apacheのエラーログ同様、/var/log/httpd-error.log に出力されます。
しかし、FreeBSDのデフォルト設定では /var 領域は4.5GB程度しかないため、WEBサイトのアクセス数が多い場合には、
全てのログを出力するとディスク領域を圧迫します。
ここでは、[notice]レベルの php のログが出力されないよう表4 のように設定します。
表4 /usr/local/etc/php.ini の設定:エラー/警告 出力レベルの変更
error_reporting = E_ALL & ˜E_NOTICE
php で日本語メールを送るための設定
php で日本語WEBメールを送りたい場合には、表5 のように設定します。
内部文字コードは、必ずしも UTF-8 である必要はありませんが、UTF-8 のサイトが増えていますので、UTF-8 にしておくと便利です。
表5 /usr/local/etc/php.ini の設定:日本語WEBメールを送るための設定
mbstring.language = Japanese ← 行頭の";"を除去する
mbstring.internal_encoding = UTF-8 ← 行頭の";"を除去し、文字コードを設定(必ずしもUTF-8である必要は無い)
表5のように設定しておけば、UTF-8 のサイトからメールを送る場合には文字変換の必要はありません。
携帯サイトなど、SJIS のサイトから php で日本語メールを送る場合には、表6のようにプログラムを書けば文字化けすることなくメールを送ることができます
(SMTPとしてSendMailを利用する場合)。
表6 SJIS のサイトから php で日本語メールを送る場合のphpプログラム
<?php
・・・
$Title = mb_convert_encoding($Title, "UTF-8", "SJIS"); ← メールタイトルの文字コード変換
$Contents = mb_convert_encoding($Contents, "UTF-8", "SJIS"); ← メール本文の文字コード変換
mb_send_mail($To, $Title, $Contents, "From:$From"); ← エンコード変換を行ってメールを送信する
・・・
?>
セッションファイルの管理
php のセッションを管理するファイルは /var/tmp フォルダに生成される。
生成されたファイルは一定時間が経過すると GC(ガーベッジコレクター:ごみ収集係)により消去されることになる。
/var ディレクトリには様々なログが吐き出される上、それ程大きな領域が割り当てられていないため、
アクセス数が多いサイトではデフォルトでは満杯になる可能性がある。
php のセッションを管理するファイルは、php.iniの"session.save_path"で変更することも可能であるが、
これを変更するとGCが機能しなくなる。
ここでは、セッションを保持する時間を短くすることにより対処する。
セッションを保持する時間と GC によるファイルの管理は以下の変数で行う。
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 3600
ここでは、/php.ini として /usr/local/etc/php.ini-recommended を使用していますので、上記のように設定されています。
セッションの初期化過程でGCプロセスが始動する確率は session.gc_probability/session.gc_divisor となりますので、
上記設定では0.1%の確率でGCプロセスが始動することになります。
また、session.gc_maxlifetime は、セッションファイルがゴミとみなされるまでの時間(秒数)ですので、1時間後にゴミとみなされるようになります。
前述の通り、アクセス数が多いサイトでセッションを使用すると /var ディレクトリが満杯になることがありますので、
/var ディレクトリの使用状態を見ながら、例えば以下のように変更して使用してみましょう。
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1800
PHP5.2 のエラー情報(php-5.2.17)
久しぶりにサーバーを増設しようと思いPHPをインストールしましたが、PHPが動きません。
Apache のエラーログに、
"PHP Fatal error: Unknown: apc_fcntl_unlock failed: in Unknown on line 0"というメッセージがありました。
Googleで検索した所、"apc_lock.h"の157行目が、以下のように変更になったようです。
# define apc_lck_rdunlock(a) apc_fcntl_unlock(&a TSRMLS_CC) → # define apc_lck_rdunlock(a) apc_fcntl_unlock(a TSRMLS_CC)
そこで "/usr/local/include/php/ext/apc/apc_lock.h" を変更しましたが、解決できていません。
一年前にインストールした php-5.2.13 では、デフォルトで"apc.so"というエクステンションは使用されていませんでしたので、
とりあえず、"/usr/local/etc/php/extensions.ini"の中の"extension=apc.so"という行をコメント化することにより動くようになりました。
"apc.so"はPHPの高速化という機能があるようですが、現時点で正常に動かす方法はわかっていません。
最終更新日:2011年5月23日