PHP4.4.1をWindowsにインストールしてApache2で使う

会社の自分のWindowsマシンに入っているPHPは、c:\windows 等に乱暴に ini ファイルやら何やらをぶち込んで使われております。ところが、今日例の共有マシンにphpを入れようと思い立ち、しっかり install.txt を読んだらこんなことが書いてある。

Upgrading from a previous PHP version:

Previous editions of the manual suggest moving various ini and DLL files into your SYSTEM(i.e. C:\WINDOWS) folder and while this simplifies the installation procedure it makes upgrading difficult.
これまでのマニュアルでは、iniファイルやDLLファイルといったものをSYSTEM(C:\WINDOWS等)にコピーするよう勧めてきたが、これはインストールを簡単にする分、アップグレードを難しくしてしまっていた

We advise you remove all of these files (like php.ini and PHP related DLLs from the Windows SYSTEM folder) before moving on with a new PHP installation.
新しいPHPに移行する前に、それら全てのファイル(php.iniやphpに関連するDLL)をWindowsのSYSTEMフォルダから削除するよう勧める

Be sure to backup these files as you might break the entire system. The old php.ini might be useful in setting up the new PHP as well.
ただし、全て削除してしまう前にバックアップを取ること。古い php.ini は新しい PHP をインストールする際に役に立つ

And as you'll soon learn, the preferred method for installing PHP is to keep all PHP related files in one directory and have this directory available to your systems PATH.
この後に書くが、全ての PHP 関連ファイルを一つのディレクトリに纏めておき、PATH を設定してそこにアクセスできるようにするのが、好ましい方法だ

ふーん。というわけでそれでやってみる。これっていつからだったんだろう…。が、この install.txt がまたただのテキストファイルだし、重要なことがさらっと書いてあるので変に時間がかかってしまった!。順番に追ってみよう。

(ちなみに、日本語マニュアルの存在に気づいたのはインストールが終わってからなのでとてものけぞる)

ファイルの設置

You may choose a different location but do not have spaces in the path (like C:\Program Files\PHP) as some web servers will crash if you do.
(ファイルの設置箇所について)他の場所を選ぶこともできるが、パスにはスペースを含んではいけない(C:\Program Files\PHP 等)。ウェブサーバによってはクラッシュしてしまうだろう。

とのことだったが、これは大丈夫だった。思いっきりC:\Program Files\php-4.4.1-Win32\に設置した。

DLL等

Note: In PHP 4, you should move all files located in the dll and sapi folders to the main folder (e.g. C:\php).
補足: PHP4では、dllフォルダとsapiフォルダにあるファイルを、全てメインフォルダ(C:\php等)に移動すること。

これを見落とした。うおー!。「移動すること」じゃねえ!。お高くとまってやがるぜ。なら最初っから移動しとけっ!

PATHの編集

The CGI and CLI binaries, and the web server modules all require the php4ts.dll (php5ts.dll) file to be available to them. You have to make sure that this file can be found by your PHP installation. The search order for this DLL is as follows:
CGIコマンドライン用バイナリ、ウェブサーバモジュール全てにおいて、 php4ts.dll または php5ts.dll が利用できなければならない。このファイルが、インストールされたPHPから見つかるようにすること。このDLLファイルの探索順は…、

  • The same directory from where php.exe is called, or in case you use a SAPI module, the web server's directory (e.g. C:\Program Files\Apache Group\Apache2\bin).
    php.exeが実行されるディレクトリと同じディレクトリ。または SAPI モジュールを使う場合、ウェブサーバのディレクトリ(例えば、C:\Program Files\Apache Group\Apache2\bin)
  • Any directory in your Windows PATH environment variable.
    PATHが通っているディレクトリ。

To make php4ts.dll / php5ts.dll available you have three options:
つまり、php4ts.dll または php5ts.dll が利用できるようにするには、次の3つの方法がある。

  • copy the file to the Windows system directory,
    Windowsのシステムディレクトリにコピーするか、
  • copy the file to the web server's directory,
    ウェブサーバのディレクトリにコピーするか、
  • or add your PHP directory, C:\php to the PATH.
    PHPディレクトリにPATHを通す。

For better maintenance, we advise you to follow the last option, add C:\php to the PATH, because it will be simpler to upgrade PHP in the future. Read more about how to add your PHP directory to PATH in the corresponding FAQ entry.
よりよいメンテナンスのためには、C:\php等にPATHを通すという最後の方法が適切だろう。PHPディレクトリにPATHを通す詳しい方法は、FAQを参照して欲しい。

了解したのでしこしこパスを通す。

php.iniの置き場所を決める

PHP searches for php.ini in the following locations (in order):
PHPは、php.ini ファイルを次の場所から順に探す。

  • PHPIniDir directive (Apache 2 module only)
    PHIniDirディレクティブ(Apache2のモジュールとして利用した場合のみ)
  • HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath
    レジストリ
  • The PHPRC environment variable
    環境変数"PHPRC"
  • Directory of PHP (for CLI), or the web server's directory (for SAPI modules)
    コマンドラインの場合、PHPのディレクトリ。SAPIモジュールの場合、ウェブサーバのディレクトリ
  • Windows directory (C:\windows or C:\winnt)
    Windowsディレクトリ

If you are running Apache 2, the simpler option is to use the PHPIniDir directive (read the installation on Apache 2 page), otherwise your best option is to set the PHPRC environment variable. This process is explained in the following FAQ entry.
Apache2で利用する場合、PHPIniDirディレクティブを使うのが簡単な方法だ(Apache2の場合のインストール方法で詳しく説明する)。そうでなければ、環境変数"PHPRC"を設定する。この方法はFAQで説明されている。

ふーんと思って、PHPIniDirディレクティブを利用する。ディレクティブ…。ふふふ、もしや<Directory>ディレクティブの中とかでディレクトリ毎に別の php.ini が使えたりして…?ふふふ…。と思って書いたが当然のごとく失敗したので、反省して httpd.conf の入れ子になっていないところに書いた。

httpd.confを編集

なので、httpd.conf に追加したのは3行。

  • LoadModule php4_module "C:/Program Files/php-4.4.1-Win32/php4apache2.dll"
  • PHPIniDir "C:/Program Files/php-4.4.1-Win32/ini/20051208_gattaman"
  • AddType application/x-httpd-php .php (これは、お好きな<Directory>の中なんかに)

php.iniを編集

php.iniに書いてある説明をじっとり読んで、とりあえず以下だけ変更。

  • output_handler = mb_output_handler
  • extension_dir = "C:\Program Files\php-4.4.1-Win32\extensions"
  • extension=php_mbstring.dll

あと何か必要になったら、httpd.conf や .htaccess からやろうかな。

Apache起動時のエラーは?

しばらく失敗ぶっこいていた時、起動時のエラーはどこに出るのかな?。と今更気づいてぼんやりしたので、Apacheerror.log に出てるのかな〜と思ったら、イベントビューアに出ていた。また反省する。反省しきり。