環境の構築:PHP のセットアップ
PHP (PHP:Hypertext Preprocessor) は、
主に、WEB アプリを作成するのに用いられるスクリプト言語です。
・コンパイルが必要なく、そのまま動作させられる
・C 言語に似ていて馴染みやすい
・オブジェクト指向のプログラミングも可能
といった特徴を持っていて、
WEB アプリの初心者に向いていると思います。
本稿の主役の一つです。
PHP を動かすには、
「Microsoft Visual C++ 2008 再頒布可能パッケージ」が必要です。
入っていない場合は、先にインストールしておいてください。
# 入っているかどうかは、
# 以下の方法で確認できます。
# 「コントロールパネル」「プログラム」「プログラムと機能」
# で表示される一覧に
# 「Microsoft Visual C++ 2008 Redistributable」
# があれば、入っています。
# ない場合は、ココで入手できます。
PHP 自体は、ココで入手できます。
本稿では、5.4 系の最新版を使用します。
# このドキュメントを書いている時点では、5.4.17 です。
PHP のモジュールが何種類も用意されていますが、
本稿で使用するのは、
VC9 x86 Thread Safe 版です。
その中の Zip を選びます。
落とした zip を c:\php に解凍します。
# c:\php\php.exe になるようにします。
# これは、昔からの私の習慣で、
# この後もそのつもりで説明するのでご了承ください。
c:\php に PATH を通しておきます。
# Windows7 の場合は、
# 「コントロールパネル」「システム」「システムの詳細設定」「環境変数」
# 「システム環境変数」の一覧から「Path」を選んで「編集」
# 変数値の末尾に、「;c:\php」を追記します。
# 元々ある文字列を消さないように注意してください。
# 「OK」、「OK」、「OK」で閉じます。
念のため、Windows を再起動しておきましょう。
次に、
本稿用に、PHP の設定を変更します。
c:\php\php.ini-development をファイル・エクスプローラ上でコピーし
c:\php\php.ini として貼り付けます。
c:\php\php.ini を編集します。
・以下にある = の左側の文字を見つけ、
設定を = の右側の文字列に置き換えます。
# 記載個所はバージョンによって異なり、
# 以下の順番だとは限りません。
・元々、コメントアウトされている場合は、
そのコメントを外し、設定が有効になるようにします。
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED & ~E_STRICT
default_charset = "UTF-8"
include_path = ".;c:\php\includes;c:\php\pear"
extension_dir = "ext"
date.timezone = Asia/Tokyo
extension=php_mbstring.dll
extension=php_pgsql.dll
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.detect_order = auto
mbstring.substitute_character = none
以上です。
コメントアウトを外すのを忘れていませんか?
php.ini を保存します。
次に、
c:\Apache24\conf\httpd.conf をエディタで開き、
ファイルの末尾に
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php/"
の3行を追加します。
設定は、以上です。
では、動作を試しましょう。
エディタで新規ファイルを開き、
<?php phpinfo() ?>
とだけ書いたファイル phpinfo.php を作って、
c:\Apache24\htdocs
にセーブします。
Apache アイコン
で Start します。
# 既にスタートしている場合は、Restart です。
http://localhost:8080/phpinfo.phpをブラウザで開いてみます。
PHP の各種設定が表で表示されます。
表示されない場合は、下記の
を参照してください。
mbstring と pgsql の項目があれば、とりあえず OK です。
詳細な動作確認は、ずっと後になります。
インターネットの設定によっては、
phpinfo.php の内容が表示されない
(= ずーっと接続中のままだったり、エラーで止まったりする)
場合は、下記の操作をしてください。
IE の「ツール」タブ、「インターネットオプション」
「セキュリティ」タブ、「信頼済みサイト」「サイト」
「この Web サイトをゾーンに追加する」欄に、
127.0.0.1
と入力し、[追加] ボタンを押します。
[閉じる] [OK] でオプションを閉じます。
また、
表示できた phpinfo.php の一覧の中に、
mbstring と pgsql の項目が見当たらなかったら、
php.ini の
extension=php_mbstring.dll
extension=php_pgsql.dll
の行を一旦コメントアウトして、Apache を Restart し、
コメントアウトを外して、再度、Apache を Restart してみます。
php.ini の各設定の意味を説明しておきます。
本番のサーバーで環境が異なる場合の参考にしてください。
基本的に、開発・デバッグに向いた設定にしてあります。
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED & ~E_STRICT
PHP の実行時に不具合が発生した時に、
どの種類のメッセージを画面に表示するか、です。
E_ALL は、全てのメッセージを表示。
&~ で、その指定したメッセージだけを非表示に変えます。
それぞれの意味は、php.ini ファイル中のコメントにあるとおりです。
E_NOTICE や E_WARNING を外すのは、
そのほうが fatal なエラーを判別しやすいからで、
慣れないうちは、このほうがラクです。
より厳密なコードを書くためには、
E_ALL
になります。
しかし、
(本稿のサンプル・プログラムのように) PEAR ライブラリを使用する場合、
本稿を書いている時点では、
E_DEPRECATED と E_STRICT を外さざるを得ないでしょう。
でないと、PEAR 内部で、下記のようなメッセージが大量に出ます。
Deprecated: Assigning the return value of new by reference is deprecated in (ファイル名)
Strict Standards: (エラー内容: PHP5.4 以降、厳密にチェックされるようになった)
display_errors = On
上記のメッセージを出力する、設定です。
Off にすると、上記エラーが表示されません。
php.ini 内の説明にもあるとおり、
本番で不用意にエラーメッセージを出すと、
悪意のある第三者に、攻撃のヒントを与えることになります。
本番では、Off にしておく事をお勧めします。
html_errors = On
上記のメッセージを HTML で出力する、設定です。
ブラウザの画面に出すのなら、On がお勧めです。
default_charset = "UTF-8"
文字のエンコーディングが問題になる際、
ここでの指定が、デフォルトで選ばれます。
本稿では、全部、UTF-8 なので、ここもそうなります。
include_path = ".;c:\php\includes;c:\php\pear"
インクルードファイルを探すディレクトリを指定します。
. は、PHP のルート (c:\php) です。
c:\php\includes には、後で、Smarty ライブラリを配置します。
# PHP のインストールの際、c:\php 以外を選んでいる場合は、
# 適宜、書き換えてください。
extension_dir = "ext"
extension= を有効にする際に必要な設定です。
PHP 標準の extention (dll) は、
c:\php\ext 以下に配置されているので、
上記のような設定になります。
date.timezone = Asia/Tokyo
日付関連の関数で デフォルトのタイムゾーンを設定します。
これを設定しないと、warning メッセージが大量に出てしまいます。
extension=php_mbstring.dll
素の PHP は、日本語 Shift-JIS のような
マルチバイト文字列に対応していません。
コード内は、UTF-8 で通しているので問題ないですが、
Shift-JIS で書かれたテキストファイルを
データとして読み込んで処理するような場合に、
この mbstring の登場となります。
extension=php_pgsql.dll
データベース PostgreSQL を使用する際に必要です。
mbstring.language = Japanese
この設定は、全体のデフォルト値を決めます。
ここでは、何はさておき、「日本語」。
mbstring.internal_encoding = UTF-8
ソースコードを記述するエンコーディングを指定します。
本稿では、全部、UTF-8 なので、ここもそうなります。
mbstring.http_input = auto
HTTP で受け取る文字列のエンコーディングを指定します。
auto は、「ASCII,JIS,UTF-8,EUC-JP,SJIS」を指定したのと同様です。
mbstring.http_output = UTF-8
HTTP を出力する際のエンコーディングを指定します。
本稿では、全部、UTF-8 なので、ここもそうなります。
mbstring.detect_order = auto
文字列を検出する際に、
一致するエンコーディングを調べる順番を指定します。
auto は、「ASCII,JIS,UTF-8,EUC-JP,SJIS」を指定したのと同様です。
mbstring.substitute_character = none
出力する文字列のエンコーディングに、
該当する文字が無い場合の処理です。
特に何もしません。
その他、今回は設定を変えないものの、
気にすべきものも挙げておきます。
;mbstring.encoding_translation = Off
internal_encoding と http_output が異なる場合、
これを On にすることで、
PHP が自動的にエンコーディング変換を行ってくれます。
今回は、UTF-8 で通しているので問題ないですが、
この設定は、php.ini でしか変更できないので、
場合によっては、非常に困る場合もあります。
# この設定は、デフォルト、コメントアウトなので、
# 必要なら、プログラムでエンコーディング変換する前提です。
# 面倒だからといって、この設定を勝手に On してしまうと、
# 他のプログラムに迷惑が掛かる可能性が高いです。
# サーバーの設定に依存して困らないように、
# 本稿では、全て UTF-8 で通しているわけです。
なお、
変換を行うためには、
output_handler = mb_output_handler
を指定する必要があります。
# handler は独自に作る事も可能なようです。
# 編者は作った事はありませんが...
short_open_tag = Off
PHP のコードを HTML コード内に埋め込む時、
"<?php" で始まって、"?>" で終わります。
# <?php echo "test"; ?> とった感じです。
ここの設定を On にすると、
"<? ?>" 形式も使えるようになります。
# <? echo "test"; ?> とった感じです。
これは、PHP の古いバージョンでは一般的だったので、
未だにこの形式のコードを見る事があります。
しかし、On だと、
XML 宣言 (<?xml ?>) が解釈できないので、
XML が一般化した現在では、とても不便です。
そこで、
現在は、デフォルト Off になっています。
expose_php = On
On にすると、
HTTP レスポンスヘッダーに、
X-Powered-By: PHP/5.4.13
といった情報が付加されます。
だから何?という話はありますが...
max_execution_time = 30
スクリプトを継続して実行できる上限を秒で指定します。
この設定なら、30秒を超えると、スクリプトが強制終了するわけです。
バグったコードが無限ループしたりして、
サーバーに負担を掛けたりしないように配慮しているわけですが、
この設定は、PHP 実行時に変更できます。
初めから重たい処理をする事が分かっている場合は、
値を大きくすることもできます。
# どの状況で設定変更できるかは、設定項目毎に決まっているので、
# PHP のマニュアルを参照してください。
memory_limit = 128M
スクリプトが使用できるメモリーの上限を設定します。
この設定も、PHP 実行時に変更できます。
magic_quotes_gpc = Off
この設定を On にすると、
GET, POST, COOKIE の中の文字列データを、
予めデータベース用に escape してくれます。
# '(シングルクオート)、" (ダブルクオート)、\(バックスラッシュ) 、NULL
# の前に、自動的に バックスラッシュが入ります。
悪意のあるアクセスからデータベースを守るのが意図ですが、
勝手に文字列を変えてしまうわけで、何かと問題があるため、
PHP5.3.0 以降は、非推奨になりました。
つまり、そのうち、この機能自体が無くなるかもしれない、という事です。
データベースに関わらず、escape 処理は、
自分で面倒見ましょう。
しかし、ここが On のサーバーも残っているかもしれません。
もしそうなら、.htaccess で Off に上書きして回避しましょう。
# php_flag magic_quotes_gpc off
ただ、本番サーバーが、
.htaccess の書き換え自体を禁止していたり、
そもそも Apache で無い場合などは、別の方法を探してください。
doc_root =
本稿では、PHP を WEB モジュールとして使用するので関係ないです。
PHP を、Apache の CGI で使用する際には、
スクリプトを置くディレクトリの記載が必要です。
ただ、IIS で使用する際には、記載してはいけません。
どちらも、設定を間違えると、スクリプトが動作しません。
# Apache と IIS で設定が真逆なので、注意。
SMTP = localhost
smtp_port = 25
スクリプトから、電子メールを発信する場合に、設定が必要です。
それぞれ、サーバーの IPアドレスと、SMTP のポートを記載します。
localhost だと、メールが送信されません。