debian gnu/linuxにはstable(安定稼動のパッケージ)にphp4とphp5がある。
php5はオブジェクト指向にも対応しており、次第にphp5がメインになるだろう。
今回はWEBサーバapache2上からphp5を使えるようにする。
今回のゴール:
test1.phpをテキストエディタで作成し
<?
phpinfo();
?>
上記の内容で保存。(<>は半角にしてくださいね)apache2で公開しているディレクトリならばどこにおいても上記test1.phpにアクセスできphp情報画面を閲覧できるようにする。
1) まずはパッケージを選択。
#aptitude
/
で検索。
php
と打ち込むとたくさんヒットするので、nキーで探索。
libapache2-mod-php5
これがねらいのパッケージ。gを押してインストール。
さて設定だが、
2) apache2.conf中の以下の二行のコメントアウトの#を取り去る。
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
以下のコマンドでモジュールを有効にする。
#a2enmod php5
3) /etc/php5/apache2/php.ini を編集する。
;がコメントアウトなので注意しつつ、以下の行を有効/無効にする。
php.iniは行数が多いファイルなので、変数の値を検索しながら編集しましょう。
output_buffering = On
output_handler = mb_output_handler
error_reporting = E_ALL & ~E_NOTIC
;error_reporting = E_ALL
magic_quotes_gpc = Off
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
3)に関しては文字コード、日本語出力の設定なので、とりあえず動作を確認した後で行ってもいいだろう。
(加筆:上記太字の行に注目してほしい。一般的にここはEUC-JPまたはUTF-8にするような意味合いで語られているのだが、私の環境ではなぜか文字化けが起こった。途方にくれている中でSJISに設定したところなぜか日本語をきちんと出力してくれるようになったので、ここに付け加えておく。もしこのページを呼んで設定ファイルをいじる場合は、上記の行の値をまずはUTF-8で行ってほしい。)
以上で動作するはずなのだが、なぜか私の環境では internal servaer error がでた。
error.log を見ても
SoftException in Apllication 〜 resolving to 〜 not within configured docroot
というログで、推測がつき辛かった。
4) apache2.conf に以下の一行を加える。
AddHandler php5-script .php
これが決め手となって稼動いたしました。どなたかのお役に立てれば幸いです。
追記です。
警告
Apache2 の MPM マルチスレッドモードを実運用環境で使用することは推奨されません。代わりに prefork MPM または Apache1 を使用してください。その理由については、 マルチスレッド版 MPM の Apache2の FAQ エントリを参照してください。
と公式の文書で出ていますのでpreforkで使用しましょう。
PHP5
mbstring設定状況
稼動中のphp.iniの中身の一部を追記。
output_bufferingをOffにしても日本語の表示に問題が無かった。Shift-JISでの出力はapache2の方で処理してくれるようなので、余計なことはしないのが最善であろうか。
output_buffering = Off
output_handler = mb_output_handler
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbtring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = SJIS,EUC-JP,JIS-UTF-8,ASCII;
output_bufferingをOffにしても日本語の表示に問題が無かった。Shift-JISでの出力はapache2の方で処理してくれるようなので、余計なことはしないのが最善であろうか。
output_buffering = Off
output_handler = mb_output_handler
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbtring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = SJIS,EUC-JP,JIS-UTF-8,ASCII;
debianにおけるPHP5拡張モジュール
例えば統計関数等は、PHP拡張モジュールという形で提供されている。
PHPマニュアルに関数の紹介があるので参考にされたい。
ここでは、PEAR パッケージシステムを経由しPECL 拡張モジュールを導入する。前提条件として、php5がdebian上で既に稼動中とする。
まず、debian 上で
#aptitude
→ / (パッケージのサーチ)
等をして、php-pearが導入されているか確認する。導入されていない場合は、
#aptitude
→ +(パッケージ選択)→ g(操作実行)または
#aptitude -install php-pear
を実行しphp-pearを導入。
その後は、PECLにて対象パッケージネームを確認した後、
#pecl install パッケージネーム
を行う。完了後、
php.iniに
extension=パッケージ名.so行を追加する。
PECLにて各パッケージの説明欄にも、php.iniにextension行を追加せよとあると思われるので参考に。
最後にapache2をrestartさせる。
これだけでソースのダウンロード、展開、コンパイルを含め、拡張パッケージの導入が完了する。
PHPマニュアルに関数の紹介があるので参考にされたい。
ここでは、PEAR パッケージシステムを経由しPECL 拡張モジュールを導入する。前提条件として、php5がdebian上で既に稼動中とする。
まず、debian 上で
#aptitude
→ / (パッケージのサーチ)
等をして、php-pearが導入されているか確認する。導入されていない場合は、
#aptitude
→ +(パッケージ選択)→ g(操作実行)または
#aptitude -install php-pear
を実行しphp-pearを導入。
その後は、PECLにて対象パッケージネームを確認した後、
#pecl install パッケージネーム
を行う。完了後、
php.iniに
extension=パッケージ名.so行を追加する。
PECLにて各パッケージの説明欄にも、php.iniにextension行を追加せよとあると思われるので参考に。
最後にapache2をrestartさせる。
これだけでソースのダウンロード、展開、コンパイルを含め、拡張パッケージの導入が完了する。