1. ports
下記の「ports」をインストールします。
/usr/ports/lang/php5
/usr/ports/lang/php5-extensions
/usr/ports/www/mod_php5
例によって依存関係があり、自動的にインストールされるものについては記述しません。
「php5-extensions」 のオプションでデフォルトでチェックがはいっていますが、「MB-STRING」のチェックがはいっていないと日本語化できないものがあります。
使用予定のデータベースにより、「MYSQL」や「PGSQL(PostgreSQL用)」のチェックをしておきます。
以前は、「mod_php5」は「php5」か「mod_php5」に含まれていたのですが、何故か(「php」をウェブサーバと切り離して使うことがあるだろうか?)、別途インストールするようになりました。
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/apache22/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」が動作しているかを確認します。
ウェブサーバのドキュメントルートに「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/">
・・・
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」を配置するというやり方があるらしいのですが。
うまくやれていないので、うまくできたときにはそちらの記述を行います。
6. ブラウザの情報を得る
大変な世の中になったもので、ウェブを表示するのは、パソコンだけに限らなくなりました。
以前は、パソコン以外は携帯電話位でしたが、タブレットPCやスマートフォンなど表示先は増える一方です。
ものによって画面の大きさが極端に異なるので、ある程度相手にあわせて表示させる必要があります。
クライアントのブラウザを知ることも必要になってきたということです。
「PHP」にはありがたいことに、ブラウザの情報を知る仕掛けがあります。
「get_browser」という関数ですが、これを知るには、ブラウザの情報を記した「browscap.ini」というファイルとそれがどこに存在するかを「php.ini」に記述してあげる必要があります。
「browscap.ini」は。
「http://browscap.org/」
からダウンロードできます。「PHP Version」という中から使いたいもの (詳細な情報を記した重いものと簡単な情報のみを記した軽いものとがあります) を選んでダウンロードします。
これをどこに置くのが一番適切なのか?まだ指針を見つけていないので仮に「/hogehoge」に置くとします。
そうすると「/usr/local/etc/php.ini」に
[browscap]
; http://php.net/browscap
browscap = /hogehoge/browscap.ini
という記述を行います(「browscap」は既にあるはずですので、そこを更新することになります)。
「/usr/local/etc/php.ini」を更新したら、「apache」を「restart」します。
そうすると「get_browser」で情報を得ることができるようになります。
醜いソースですが
<?php
print '<!DOCTYPE html>';
print '<html>';
print '<head>';
print '<meta charset="UTF-8">';
print '<title>browser config</title>';
print '</head>';
print '<body>';
print '<pre style="margin : 0px; padding: 0px; line-height: 120%; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">';
print $_SERVER['HTTP_USER_AGENT'] . "\n\n";
$browser = get_browser(null, true);
print_r($browser);
print '</pre>';
print '</body>';
print '</html>';
?>
のような php のファイルを書いてやれば中身を見ることができます。
これを実行してみるならば
「https://www.sing.ne.jp/browser/」
にアクセスしてみてください。
7. タイマを変更する
「PHP」には無限ループ防止のためのタイマがあります。
デフォルトは 30 秒。タイムアウトした場合はブラウザに。
Fatal error: Maximum execution time of 30 seconds exceeded in 実行中のファイル名と行番号
と表示され、サーバ上の「PHP」の処理は停止します。
30 秒以上ユーザを待たせるのはどうかとも思いますが、どうしても伸ばしたい場合は以下の方法があります。
①「php.ini」を編集する。
max_execution_time = 30 ← これを大きい値に変更する
②「httpd.conf」または「.htaccess」を編集する
php_value max_execution_time 30 ← こういう行を追加して 30 を大きい値に変更する
③「php」のソースファイルの先頭に1行追加する。
set_time_limit(30); ← こういう行を追加して 30 を大きい値に変更する
①はサーバ全体に影響しますし、②でもサーバまたはディレクトリ全体に影響を与えるので、③が一番影響がないかなと思います。