7. FreeBSD 11.1 RELEASE - apache24 - PHP 設定

 
7.1 概要
7.2 ports
7.3 コンフィグレーションファイルの設定
7.4 httpd.conf の編集
7.5 動作確認
7.6 ディレクトリごとの設定

7.1 概要

 PHP の詳細については「ウィキペディア - PHP」をご参照ください。  ここでは、ウェブサーバ上でデータベースを動作させるのを主目的としますので、先に apache や使用しようとするデータベースをインストールしてください。

7.2 ports

 PHP6 は頓挫して、いったん PHP5 に戻って、次のプロジェクトになったせいで最新は PHP7 になっているようですが。  PHP7 をいれる勇気がまだなくて、PHP5 をいれることにします。

プロンプト略
cd /usr/ports/lang/php56
make
make install
 例によって依存関係があり、自動的にインストールされるものについては記述しません。

プロンプト略
cd /usr/ports/lang/php56-extensions
make
make install
 php5-extensions のオプションのうち、MB-STRING のチェックは日本語を扱う上で必須です。  使用予定のデータベースにより、MYSQL や PGSQL のチェックをしておきます。  先にデータベースをインストールしていないと、php のインストール時に意図しないバージョンのクライアントがインストールされることがあります。  使用予定のバージョンがあれば php より先にデータベースをインストールしておきます。  mbstring について今後、ports のインストール時に設定を反映するように

/etc/make.conf
 に以下の1行を追加しておきます。

OPTIONS_SET=MBSTRING

プロンプト略
cd /usr/ports/www/mod_php56
make
make install
 mod_php5 は、以前 php5 に含まれていたのですが、別途インストールするようになりました。  Apache 2.X を使用している場合は、そのオプションを有効とするようにチェックをいれます。

7.3 コンフィグレーションファイルの設定

 インストールが終わると

/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 = ← ③
 ①異常発生時にブラウザにエラーを表示するかどうかのオプションです。   デフォルトは Off になっていますが、動作確認を行い際は On にしておいた方がよいでしょう。  ②設定しておかないと後述する phpinfo で WARNING が出力されます。   サーバの設置場所が日本国内であれば "Asia/Tokyo" と記述します。  ③php5 の記述は、<?php ... ?> というのが正式な書式ですが、php4 の形式で   <? ~ ?>という書き方が許されていました。   旧来の形式のままのソースがまだ残されています。これを有効にするにはデフォルトで Off になって   いるものを On に変更します。

7.4 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 を忘れないように。

7.5 動作確認

 実際に php が動作しているかを確認します。  WEB サーバのドキュメントルートに phpinfo.php (拡張子さえ php であればファイル名はなんでもかまいません)を作成して

<?php
phpinfo();
?>
 と記述します。  ブラウザで http://ドメイン/phpinfo.php を表示して php のバージョン情報や設定状態が表示されれば設定は完了です。

7.6 ディレクトリごとの設定

 日本語というのは厄介なもので、代表的な文字コードとして、Shift-JIS、EUC-JP、UTF-8 があり、実際にはもっとたくさんのコードがあります。他国の状況はよくわかりませんが、英語が Native なひとはその分楽だろうなと思います。  実際、以前は、このサイトの html のソースは3つが混在していました。  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/">
    ...
    AllowOverride All
    ↑ これを [All] にすることでこのディレクトリ以下の [.htaccess] の設定が有効になります
    ...
</Directory>
 文字コードを変更する場合 /usr/local/www/hogehoge/.htaccess を以下のように記述します。

php_value mbstring.internal_encoding UTF-8 ← 使用する文字コードに合わせます
php_flag mbstring.encoding_translation Off ← サーバ内で文字コードの変換を行うか行わないかの設定
                                              [Off] の場合文字コード変換を行いません
 これで、Apache を configtest、restart で設定が反映されます。(.htaccess の記述のみ変更の場合は、Apache の restart は不要です)  設定内容がうまく反映されているかどうかは、phpinfo() で確認します。  本当はこれより優れた方法として suphp というモジュールをインストールして、ディレクトリごとに php.ini を配置するというやり方があるのですが、まだ、うまくやれていないので、うまくできたときにはそちらの記述を行います。