2007-07-13(Fri) [長年日記]
_ WindowsにApache2.2とPHP5をインストールする手順
用意したファイル
- apache_2.2.4-win32-x86-no_ssl.msi
- php-5.2.3-Win32.zip
- pecl-5.2.3-Win32.zip
peclは必須ではなく、別途拡張ライブラリが欲しい場合に用意する。今回はphp_ssh2.dllを使用する為用意。
Apacheのインストール
apache_2.2.4-win32-x86-no_ssl.msiはインストーラなので手順通り。
IEでhttp://localhostにアクセスして正常に起動していることを確認する。
PHPのインストール
php-5.2.3-Win32.zipを展開。今回はc:\usr\local\phpに展開。
この時点でApacheに組み込んでみて正常に連携することを確認する。まずはhttpd.confを編集。
httpd.confはデフォルトでは「Apacheのインストールフォルダ\conf」にある。
# 下記を追加 LoadModule php5_module E:/usr/local/php/php5apache2_2.dll AddType application/x-httpd-php .php
「Apacheのインストールフォルダ\htdocs\phpinfo.php」を作成。
<?php phpinfo();
「http://localhost/phpinfo.php」にアクセスしてみてphpinfo()が表示されれば正常に連携している。Apacheの起動に失敗する場合、イベントログを確認する。
PEARをインストールするため「go-pear.bat」を実行。
「%Systemroot%」フォルダにc:\usr\local\phpから以下のファイルをコピー
- php.ini(元ファイル名はphp.ini-distもしくはphp.ini-recommended)
- ssleay32.dllとlibeay32.dll(php_ldap.dll/php_ssh2.dll等で必要)
次にphp.iniを編集。
extension_dir = "E:\usr\local\php\ext" extension=php_ldap.dll extension=php_mbstring.dll extension=php_ssh2.dll
ちなみに通例として、magic_quotes_gpcをOffにしたり昔はregister_globalsをOffにしたり(現在はデフォルトでOff)にする。ただし自分の場合「.htaccessで設定できる項目は.htaccessでやる」というポリシーなのでphp.iniは極力編集しない。
.htaccessで設定する場合、こんな感じ。
php_value session.gc_probability 30 php_value session.use_trans_sid 0 php_flag magic_quotes_gpc Off php_flag register_globals Off php_flag mbstring.encoding_translation Off php_value mbstring.internal_encoding "UTF-8" php_value mbstring.http_input "UTF-8" php_flag short_open_tag Off php_value pcre.backtrack_limit 300000
最後にApacheをリスタートして設定を反映。
_ Apache2.2とPHP5がログに出力するエラーが文字化け
Apache2.2とPHP5のエラーが文字化けする。
httpd.exe: Syntax error on line 115 of C:/Program Files/Apache Software Foundation/Apache2.2/conf/httpd.conf: Cannot load E:/usr/local/php/php5apache2.dll into server: \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83\x82\x83W\x83\x85\x81[\x83\x8b\x82\xaa\x8c\xa9
上記エラーはイベントログに残されたApache2.2のログ。実際は一行。
エラーが出力された原因はhttpd.confの記述ミスで、115行目にこう書いていた。
LoadModule php5_module E:/usr/local/php/php5apache2.dll
今回使っているのはApache2.2なのでphp5apache2_2.dllと記述すべき。
見ればわかるとおり(?)Shift-JISのコードが16進で出力されているので、バイナリエディタなどで変換してやれば内容がわかる。
今回だと「指定されたファイルが見つかりません」だったと思う。
それからもうひとつ、PHP5がApache2.2経由で出力するerror_logにも同じように文字化けが。
PHP Warning: PHP Startup: Unable to load dynamic library 'E:\\usr\\local\\php\\ext\\php_ldap.dll' - \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83\x82\x83W\x83\x85\x81[ \x83\x8b\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9 \x82\xf1\x81B\r\n in Unknown on line 0
こちらも実際は一行。
ちなみにエラーが出力された原因はphp_ldap.dllに必要なssleay32.dllとlibeay32.dllを%SystemRoot%にコピーし忘れたため上記DLLがロードできなかったことによるエラー。
なんだけど、出力されているエラーは「指定されたファイルが見つかりません」。このエラーだけ見ると「'E:\\usr\\local\\php\\ext\\php_ldap.dll'が見つからなかった」と間違えて読み取ってしまいそう。
余談ではあるけど、上記エラーはphp_ssh2.dllについても同様のエラーが出力されていたし、libmysql.dllを%SystemRoot%にコピーせずにphp_mysql.dllをロードしようとした場合にも発生するらしい。
WindowsのPHPで拡張モジュールのエラーが出てる場合は、依存するDLLが%SystemRoot%等に存在するかどうか確認すべき。

ツッコミを含む
ありがとうございました。<br><br>>、出力されているエラーは「指定されたファイルが見つかりません」。このエラーだけ見ると「'E:\\usr\\local\\php\\ext\\php_ldap.dll'が見つからなかった」と間違えて読み取ってしまいそう<br><br>が解決のヒントになりました。依存関係のエラーも見つからなかったになってしまうんですね。。分かりづらい。。
>うみさん<br><br>コメントありがとうございます。<br>確かにこのエラーはわかりづらいんですよね。<br>お役に立てたみたいで嬉しいです。