1. ports
/usr/ports/lang/php56
/usr/ports/lang/php56-extensions
/usr/ports/www/mod_php56
例によって依存関係があり、自動的にインストールされるものについては記述しません。
php5-extensions のオプションでデフォルトでチェックがはいっていますが、MB-STRING のチェックがはいっていないと日本語化できないものがあります。使用予定のデータベースにより、MYSQL や PGSQL(postgreSQL用)のチェックをしておきます。
mbstring について今後、ports のインストール時に設定を反映するように /etc/make.conf に以下の1行を追加しておきます。
わたしは、先に php をインストールしてしまいましたが、php で postgreSQL を有効にすると postgreSQL の 9.3 の client がインストールされてしまいますので、それ以外のバージョンをインストールしたい場合は、先に postgreSQL をインストールするべきです。
そうでないと、deinstall をしてから入れなおすことになります。
OPTIONS_SET=MBSTRING
以前は mod_php5 は php5 に含まれていたのですが、何故か(php を WEBサーバと切り離して使うことがあるだろうか?)、別途インストールするようになりました。
php でなく php56 をいれることにしました。
2016年6月8日現在、php5、php5-extensions の順でインストールしようとしたときに以下のようなエラーになったからです。
make: "/usr/ports/Mk/bsd.php.mk" line 348: Malformed conditional (${_USE_PHP_VER${PHP_VER}:M${:Uyes}} != "")
make: "/usr/ports/Mk/bsd.php.mk" line 348: Malformed conditional (${_USE_PHP_VER${PHP_VER}:M${:Uctype}} != "")
・・・
make: "/usr/ports/Mk/bsd.php.mk" line 348: Malformed conditional (${_USE_PHP_VER${PHP_VER}:M${:Uxmlreader}} != "")
make: "/usr/ports/Mk/bsd.php.mk" line 348: Malformed conditional (${_USE_PHP_VER${PHP_VER}:M${:Uxmlwriter}} != "")
make: Fatal errors encountered -- cannot continue
make: stopped in /usr/ports/lang/php5-extensions
2. コンフィグレーションファイルの設定
インストールが終わると
/usr/local/etc
/usr/local/etc/php
にいくつかの php 用のコンフィグレーションファイルが作成されています。
最低限必要なものとして /usr/local/etc/php.ini が必要になりますので以下の手順を実行します。
> cd /usr/local/etc/
> cp php.ini-production php.ini
php.ini の中身でいくつか修正を行います。
display_errors =
date.timezone =
short_open_tag =
1行目
異常発生時にブラウザにエラーを表示するかどうかのオプションです。
デフォルトは Off になっていますが、動作確認を行い際は On にしておいた方がよいでしょう。
2行目
設定しておかないと後述する phpinfo で WARNING が出力されます。
サーバの設置場所が日本国内であれば "Asia/Tokyo" と記述します。
3行目
本来 php5 の記述は <?php ではじまって ?> で終わるのが正式な書式ですが、php4 の形式で、<? ではじまって ?> で終わることが許されていました。
旧来の形式のままのソースがまだ残されています。これを有効にするにはデフォルトで Off になっているものを On に変更します。
3. httpd.conf の編集
php のファイルを表示させるために /usr/local/etc/apache24/httpd.conf を編集します。
ディレクトリのインデックスとして index.php を使うために
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
の箇所を
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
とします。
<IfModule mime_module>
</IfModule>
の間に
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
という行を加えます。
変更したら configtest と restart を忘れないように。
4. 動作確認
実際に php が動作しているかを確認します。
WEBサーバのドキュメントルートに phpinfo.php (拡張子さえ php であればファイル名はなんでもかまいません)を作成して
<?php
phpinfo();
?>
と記述します。
ブラウザで http://ドメイン
/phpinfo.php を表示して php のバージョン情報や設定状態が表示されれば設定は完了です。
5. ディレクトリごとの設定
日本語というのは厄介なもので、代表的な文字コードとして、Shift-JIS、EUC-JP、UTF-8 があり、実際にはもっとたくさんのコードがあります。他国の状況はよくわかりませんが、英語が Native なひとはその分楽だろうなと思います。
実際、このサイトの html のソースは3つが混在している状況です(いずれ UTF-8 に統一していこうと思ってはいるのですが…)。
php のソースを混在させるとき、表示させるまでは、ソースの文字コードを合わせておくだけで済むのですが、ブラウザからの入力やデータベースへのアクセスを行うと、うまく動作しません。少なくとも、ユーザごとあるいはディレクトリごとに統一はしているでしょうから、ディレクトリごとに文字コードを設定して動作させねばなりません。
これを可能にするのが .htaccess というファイルを作成してその中に設定を記述することです。
まず、.htaccess の設定を有効にするために Apache の記述を変更します。
ここで紹介しているやり方であれば /usr/local/etc/apache22/Include/ 配下にディレクトリごとのコンフィグレーションファイルを用意しているはずです。
/usr/local/etc/apache22/Include/hogehoge.conf ← コンフィグレーションファイル
/usr/local/www/hogehoge/ ← 設定対象とするディレクトリ
上記の構成であれば hogehoge.conf の記述で以下の記述を確認し、記述がないか別の設定になっている場合は変更します。
<Directory "/usr/local/www/hogehoge/">
↓ これを All にすることでこのディレクトリ以下の .htaccess の設定が有効になります
AllowOverride All
・・・
</Directory>
文字コードを変更する場合 /usr/local/www/hogehoge/.htaccess を以下のように記述します。
php_value mbstring.internal_encoding UTF-8 ← 使用する文字コードに合わせます
↓ サーバ内で文字コードの変換を行うか行わないかの設定
↓ Off の場合文字コード変換を行いません
php_flag mbstring.encoding_translation Off
これで、Apache を configtest、restart で設定が反映されます。(.htaccess の記述のみ変更の場合は、Apache の restart は不要です)
設定内容がうまく反映されているかどうかは、phpinfo() で確認します。
本当はこれより優れた方法として suphp というモジュールをインストールして、ディレクトリごとに php.ini を配置するというやり方があるのですが、まだ、うまくやれていないので、うまくできたときにはそちらの記述を行います。