AN HTTPDでPHP5を動かす

作成日:2005.04.10

 ここでは PHP5をインストールし、AN HTTPD上で簡単なPHPスクリプトを動かすまでを説明する。PHP4のインストールについては http://homepage1.nifty.com/yito/anhttpd/faq/php.htmlを参考に。
  1. ダウンロード
     PHP: Downloadsのページ から
    PHP 5.x.x
    Windows Binaries
    ・PHP 5.x.x zip package [size Kb] - Day Month Year
    (ファイル名が php-5.x.x-installer.exe というものもあるがこれではない方)をダウンロードする。2005/4 上旬現在、php-5.0.4-Win32.zip が最新版である。


  2. インストール
     ・ダウンロードした zipファイルを解凍し、トップのフォルダ名を phpに変更して C:\php にコピーする。
     ・C:\php\php5ts.dllを C:\Windows\system32 (Windows2000 では C:\winNT\system32) 下にコピーする。
     ・C:\php\php.ini-dist を C:\Windows (Windows2000 では C:\WinNT) にコピーし、ファイル名を php.ini に変更する。先にファイル名を変更して php.iniが C:\php と C:\Windows の2箇所にできるとトラブルの元なので C:\php\php.ini があれば必ず削除すること。
     ・PHPも Perl同様、コマンドラインからの実行が可能であり、スクリプトをテストするときに便利なので C:\phpにパスを通しておくとよい(環境変数 Pathの最後に ;C:\php を付加する)。


  3. AN HTTPDのオプション設定
     PHP5 では CGI 実行版のファイル名は php-cgi.exe であり、PHP4とは異なるので注意すること(php.exeも同じフォルダにあるが、こちらは Content-typeヘッダを出力しないので使用しないように)。
     AN HTTPDのオプション/一般の拡張子、実行プログラムの追加で下図のように入力し、OKする。



     (注) 拡張子の前のドットを忘れないこと。「PATH_TRANSLATEDを使う」のチェックは必須。

     PHPの実行プログラムとして ISAPIモジュール(php5isapi.dll) もあるが、動作が不安定なので AN HTTPDでは使用しないのがよいと思う。


  4. php.iniの設定
    cgi.force_redirect = 1 -> 0 と変更し、行頭の ; を削除してアンコメントする(以下同義)。
    	; cgi.force_redirect = 1
    	 ↓
    	cgi.force_redirect = 0
    
    上記の設定が正しくできていないと以下のメッセージが出て PHPは実行されない。
    	Security Alert! The PHP CGI cannot be accessed directly.
    
    register_globals がデフォルトの Off のままでは PHPスクリプトの中にはフォームから入力した文字列の受け渡しが正しく処理されないものがある(特に古いスクリプトで改版されないままのものは要注意)。その場合、スクリプトが正しければ register_globals = On に変更すれば動くかもしれないのでまず試してみるとよい。
     ただ On のままインターネット上で使うのはセキュリティ上問題があるようなので要注意である。PHP-users MLの以下で始まるスレッドを参考に。
     http://ns1.php.gr.jp/pipermail/php-users/2003-November/019639.html

    ・doc_root は設定しなくてもよい。PHP4では設定してはいけなかったが、PHP5では正しく設定すれば動作する。設定が間違っていると「No input file specified.」というエラーメッセージが出る。

    ・mbstring は日本語などマルチバイト文字列を処理する関数の設定である。mb で始まる関数が原因のエラーメッセージが出たり、文字化けするようなら以下を正しく設定すること。

    	extension_dir = C:\php\ext (PHP4では C:\php\extensions であった)
    	extension=php_mbstring.dll(アンコメント)
    	output_handler = mb_output_handler
    	magic_quotes_gpc = Off
    
    	[mbstring]
    	mbstring.language = Japanese
    	mbstring.internal_encoding = EUC-JP
    	mbstring.http_input = auto
    	mbstring.http_output = pass (SJIS では文字化けすることがある)
    	mbstring.encoding_translation = On (Off を On に. 文字化けするようなら Offに)
    	mbstring.detect_order = auto
    	mbstring.substitute_character = none;
    	mbstring.func_overload = 0
    
    もし mbstring 関連の個所を変更するのであれば以下を参考にするとよい。
     http://wiz.syscon.co.jp/winphp.html の php.iniの設定
     http://tsuttayo.sytes.net/php/install/win.html の PHP4の設定
     http://www.php.net/manual/ja/ref.mbstring.php の例3 SJISユーザ用のphp.iniの設定

    ・イメージ関数の GD2モジュールを使用する場合は以下を設定する。
    	extension=php_gd2.dll(アンコメント)
    
    ・PHPから MySQLや PostgreSQLにアクセスするときは以下を設定する。
    	extension=php_mysql.dll(アンコメント PHP4のphp.iniを使用するときはこの行を追加)
    	extension=php_pgsql.dll(アンコメント)
    
    MySQLではさらに、C:\php\libmysql.dllを C:\windows\system32 (Windows2000では C:\WinNT\system32)にコピーする。コピーしていないと
    PHP Startup: Unable to load dynamic library 'c:\php\ext\php_mysql.dll' - 指定されたモジュールが見つかりません。
    というアラートが表示される。


  5. phpinfo による動作確認
     以下の 1行からなる phpinfo.php ファイルを作成し、ドキュメントルート下に置く。
    	<?php phpinfo(); ?>
    
     ブラウザから http://127.0.0.1/phpinfo.php にアクセスし、頭の部分に以下のようなテーブルが表示されればインストールは成功である。このスクリプトは各種の設定を確認するときに重宝するので活用するとよい。

    PHP Logo

    PHP Version 5.0.4


    System Windows NT ComputerName 5.1 build 2600
    Build Date Month Day Year hh:mm:ss
    Configure Command cscript /nologo configure.js "--enable-snapshot-build" "--with-gd=shared"
    Server API CGI/FastCGI
    Virtual Directory Support enabled
    Configuration File (php.ini) Path C:\WINDOWS\php.ini
    PHP API 20031224
    PHP Extension 20041030
    Zend Extension 220040412
    Debug Build no
    Thread Safety enabled
    IPv6 Support enabled
    Registered PHP Streams php, file, http, ftp, compress.zlib
    Registered Stream Socket Transports tcp, udp

    Zend logo This program makes use of the Zend Scripting Language Engine:
    Zend Engine v2.0.4-dev, Copyright (c) 1998-2004 Zend Technologies


  6. 環境変数の設定
    PHP4と PHP5の環境変数を比べてみると、PHP5.0.4時点では
     $_SERVER["PATH_INFO"]、$_ENV["PATH_INFO"]、
     $_SERVER["PATH_TRANSLATED"]、$_ENV["PATH_TRANSLATED"]
    が設定されず、代わりに
     $_SERVER["ORIG_PATH_INFO"]、$_SERVER["ORIG_PATH_TRANSLATED"]
    が設定されるようである。
    そのため $_SERVER["PATH_INFO"]などを使うスクリプトが動作しない可能性がある。
    その場合にはスクリプトの該当箇所を変更すればよいが、スクリプトをいじりたくない、あるいは変更箇所が分からないというのであれば、以下のように prepend.phpを設定することによって解決する。

    (1)以下の内容のファイル prepend.phpを作成し、c:\php\includesに保存する。
    <?php
    $_SERVER["PATH_INFO"] =
    $_ENV["PATH_INFO"] =
    $_SERVER["ORIG_PATH_INFO"];
    
    $_SERVER["PATH_TRANSLATED"] =
    $_ENV["PATH_TRANSLATED"] =
    $_SERVER["ORIG_PATH_TRANSLATED"];
    ?>
    
    (2)php.iniファイルで以下の 2箇所を変更する。
    auto_prepend_file = "prepend.php"
    include_path = ".;c:\php\includes" (UNIXではなく Windowsの方。アンコメント)
    
    (注)PHP4では PHP_SELF関係の環境変数が取得できない不具合のために prepend.phpの設定をしたが、PHP5では修正されているので prepend.php で PHP_SELFの記述は不要である。


  7. PHP4とPHP5の切り替え
    PHP5に完全に移行するという人はいいのですが、もしものときの保険として PHP4も簡単に使えるように残しておきたいという人は以下のように設定すればよいであろう。

    (1) PHP4を C:\php4の下に、PHP5を C:\php5の下にインストールする。
    PHP4は http://homepage1.nifty.com/yito/anhttpd/faq/php.htmlで C:\php となっているところを全て C:\php4と読み変える。php.iniの中の記述も同様である。また、PHP5は本ページの上記の説明で、C:\phpと書かれた箇所を C:\php5と読み替える。ここでも php.iniの中の記述にも要注意。さらにこれまでは php.iniを C:\Windowsに置くように説明してきたが、PHP4用と PHP5用の 2つの異なる php.iniが同じファイル名で必要となるので PHP4用、PHP5用の pnp.iniをそれぞれ C:\php4とC:\php5に置き、もし C:\Windowsに php.iniがあれば削除する。
    (注) ISAPIの場合は php.iniは必ず C:\Windowsの下のにないといけないようである(すなわち、ISAPIの切り替えは簡単にはできない)。

    (2)AN HTTPDのオプションで以下のように設定する(dummy1,2は拡張子の並びを同一にしないため)。
       拡張子                     実行プログラム       般 #! PT EX
       .php,.php3,.phtml,.dummy1  C:\php4\php.exe      v     v
    v  .php,.php3,.phtml,.dummy2  C:\php5\php-cgi.exe  v     v
    
    このオプションのチェックを切り替えれば簡単に PHP4と PHP5を変更させて動作させることが可能である。
    もし切り替えではなく、同時に実行したいのであれば、AN HTTPDをポートを変えて 2つ実行させ、それぞれの phpの実行プログラムを PHP4用と PHP5用に設定すれば可能である。


  8. 関連情報へのリンク
     PHP日本語ページ
     日本PHPユーザ会
     PHPマニュアル(日本語版)
     PHP メーリングリストの全文検索


作成:いと,mailto:gfh05223@nifty.com