/bonvhp/webapp       [後へ]   [目次へ]   [次へ] ~ [] ~

環境の構築: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 だと、メールが送信されません。
/bonvhp/webapp       [後へ]   [目次へ]   [次へ]