XAMPP Tips for Windows

XAMPPのちょっと困ったときに役立つTips。

  • 2012/02/25: Perl部分追記.
  • 2012/02/15: 文章見直し.
  • 2012/02/14: 項目追加.
  • 2012/02/12: 公開.

好きなバージョンのXAMPPをダウンロードする

XAMPPにはXAMPP BasicパッケージとXAMPP Liteパッケージが存在します。現在の基本パッケージにはPerlとTomcatが最初から含まれています。正確には、Perlはv1.7.2以降、Tomcatはv1.7.4以降、基本パッケージに含まれるようになりました。それより前はアドオンを用いて別途インストールする必要がありました。
XAMPP - Browse Files at SourceForge.net
[URL] http://sourceforge.net/projects/xampp/files/
上記Webサイトから好きなバージョンのXAMPPを入手することができます。ダウンロード可能なXAMPP for Windows v1.7.7のファイル一覧は次のとおりです。

xampp-win32-1.7.7-VC9-installer
#FF0000;">.exe:基本パッケージのインストーラ版です。レジストリを使用します。
ファイルの展開から"install.php"の実行までを自動で行います。
xampp-win32-1.7.7-VC9-installer
#0000FF;">.exe.md5:MD5: 4500884a3bd21343fc69fcef2f4577be
xampp-win32-1.7.7-VC9
#FF0000;">.zip:基本パッケージのZIP形式版です。
xampp-win32-1.7.7-VC9
#0000FF;">.zip.md5:MD5: 19c858c350f79a19f049d85128367f0c
xampp-win32-1.7.7-VC9
#FF0000;">.7z:基本パッケージの7z形式版です。ZIP形式よりもファイルサイズが小さいです。
xampp-win32-1.7.7-VC9
#0000FF;">.7z.md5:MD5: f8c3ce82a34a408115de552c4686a098
xampp-win32-1.7.7-usb-lite
#FF0000;">.exe:ライトパッケージのインストーラ版です。レジストリは使用しません。
ファイルの展開から"install.php"の実行までを自動で行います。
xampp-win32-1.7.7-usb-lite
#0000FF;">.exe.md5:MD5: 7dc46ca4432c1f75f04975630515c136
xampp-win32-1.7.7-usb-lite
#FF0000;">.zip:ライトパッケージのZIP形式版です。
xampp-win32-1.7.7-usb-lite
#0000FF;">.zip.md5:MD5: 8751aa606d7a2951bff5064657b9fb94
xampp-win32-1.7.7-usb-lite
#FF0000;">.7z:ライトパッケージの7z形式版です。ZIP形式よりもファイルサイズが小さいです。
xampp-win32-1.7.7-usb-lite
#0000FF;">.7z.md5:MD5: 4d506c707fac3422b3cf05ce511f91b3

MD5(Message Digest Algorithm 5)ファイルにはハッシュ値が書かれています。MD5値はファイルを正しく落とせたかどうかの確認に使います。MD5の計算にはFastHashを使うといいかもです。


<<大きい画像はこちら>>

XAMPPをアップグレードする

新しいXAMPPがリリースされているのを見つけるとついバージョンをあげたくなります。インストーラ版でインストールを行った場合は、新しいバージョンのインストーラ版をそのまま実行してあげれば自動的に新しいファイルに更新してくれます。ただし、これはインストーラの仕様に変更のあったv1.7.4以降の話であることに注意してください。それより前のバージョンでは自動では更新してくれません。
zip派の人は特定のディレクトリの上書きを避けてファイルの更新をすればアップグレードできます。やり方としては、新しいバージョンのXAMPPを展開して、古い方の特定のディレクトリをまるごと新しいほうにコピーして移行すると、古いのも残っていて安心できるし、いろいろ捗ると思います。特定のディレクトリを以下に示します。この2つをコピーすれば必要最小限に抑えられます。

  • \xampp\mysql\data\
    • MySQLのデータが入っています。
  • \xampp\htdocs\
    • Apacheの公開ファイルが入っています。

以下を参考に各自で必要なディレクトリやファイルのバックアップを取り復元のために残しておくこともできます。

  • \xampp\mysql\bin\my.ini
    • MySQLの設定ファイルです。
  • \xampp\apache\conf\
    • Apacheの設定ファイルが入っています。
  • \xampp\tomcat\webapps\
    • Tomcatの公開ファイルが入っています。
  • \xampp\tomcat\conf\
    • Tomcatの設定ファイルが入っています。
  • \xampp\FileZillaFTP\FileZilla Server Interface.xml
    • FileZilla Serverの接続に用いる設定ファイルです。
  • \xampp\FileZillaFTP\FileZilla Server.xml
    • FileZilla Serverの公開設定ファイルです。
  • \xampp\MercuryMail\MERCURY.INI
    • MercuryMailの設定ファイルです。

ログファイルが欲しい場合は次のディレクトリのバックアップを取ります。

  • \xampp\apache\logs\
  • \xampp\tomcat\logs\
  • \xampp\FileZillaFTP\Logs\
    • FileZilla Serverのログ (ログ出力の設定が必要)
  • \xampp\MercuryMail\LOGS\
    • MercuryMailのログ

XAMPPに含まれるPHPをアップグレードする

XAMPPを使っていると、PHPのバージョンが古くて困ることがあります。そこで、XAMPPに含まれるPHPを最新版にアップグレードしてみましょう。まずは次のサイトにアクセスして、PHPのWindows用のバイナリファイルをダウンロードします。
http://www.php.net/
[URL] http://www.php.net/

ダウンロードするファイルは、VC9 x86 Non Thread Safeではなく、VC9 x86 Thread SafeのZIP形式です。Windowsバイナリファイルをダウンロードできる場所は迷いやすいので注意してください。


<<大きい画像はこちら>>


ダウンロードしたファイルを展開して、それをそのままXAMPPのPHPディレクトリ(\xampp\php\)に上書きしてあげればPHPのアップグレードは完了です。なお、ファイルを上書きする前にApacheは停止させておきましょう。そうしないと上書きしようとしても、ファイル使用中だよって怒られてできません。その場合は、あせらず落ち着いてApacheを停止させてからファイルの上書きを再開しましょう。


<<大きい画像はこちら>>


PHP5.2.xからPHP5.3.x、PHP5.3.xからPHP5.4.xへのアップグレードといった場合には(\xampp\php\にある)php.iniファイルの変更が必要です。自分で変更するのがめんどくさい場合は、それ系列のPHPが含まれるXAMPPからphp.iniを抜き取って上書きするのが楽です。

XAMPPに含まれるTomcatを動かす

XAMPPをインストールしたのにTomcatが立ち上がらない...なんてことはありませんか?それはXAMPPに付属するTomcatの起動に用いられるバッチファイルを実行しても、JDK(Java Development Kit)へのパスが見つけられなかったために、Tomcatの起動に失敗しているからです。

[XAMPP]: Searching JDK HOME with reg query ...

エラー:  指定されたレジストリ キーまたは値が見つかりませんでした
. [XAMPP]: Cannot find current JDK installation!
. [XAMPP]: Cannot set JAVA_HOME. Aborting ...
done.

Tomcat自体はJRE(Java Runtime Environment)でも動作します。普通はJDKをインストールしていないことがほとんどのはずなので、ここではJDKを新たにインストールするのではなく、XAMPP付属のバッチファイルを編集してJDKからJREへのパスに変更しちゃう方法を紹介します。なお、XAMPP v1.8.0以降はJDKが見つからない場合はJREを参照する処理が加えられたため、わざわざ編集する必要はありません。

XAMPPをインストールした場所(デフォルトならC:\xampp\)にあるcatalina_start.bat、catalina_stop.batの2つがXAMPP側で用意されたTomcatを起動・停止させるバッチファイルになります。このファイルをメモ帳などで開き、次の内容に書き換えてください。

catalina_start.bat、catalina_stop.bat

set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit
↑を↓に書き換える
set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment

これでXAMPPのコントロールパネルからもTomcatの起動と停止ができるようになりました。そう、実はXAMPPのコントロールパネルは同じディレクトリにあるバッチファイルを実行しているだけなのです。変更箇所は単純でJDK側のレジストリからJavaHomeキーを探そうとしている部分を、JRE側のレジストリからJavaHomeキーを探すように変更しただけです。これだけの変更で、JREをインストールしてさえいれば、Tomcatが動作するようになります。また、XAMPP v1.7.7ではTomcat 7.0とApacheとの連携がmod_proxy.so、mod_proxy_ajp.soモジュールにより行われており、Apacheを起動すれば次のURLからもTomcatにアクセスすることができます。
http://localhost/examples

ちなみに、レジストリからキーを探索されるのがいやな場合はJavaHomeキーを探そうとしている部分をごっそりと削除して、JRE_HOMEとCATALINA_HOMEの2つの変数を追加する方法でも問題なく動作します。たとえばcatalina_start.batの場合は次のようになります。

@echo off

IF EXIST tomcat\logs\catalina.pid (
  del /F/Q tomcat\logs\catalina.pid
)

set "JRE_HOME=C:\Program Files\Java\jre6"
set "CATALINA_HOME=\xampp\tomcat"

if %ERRORLEVEL% == 0 (
echo run > tomcat\logs\catalina.pid
)

"%CATALINA_HOME%\bin\catalina.bat" run

:END
echo done.
pause

XAMPPへのパスはルートディレクトリ直下にインストールしたもの、JREへのパスはインストールパスに変更のあったJava 6 Update 10以降を標準でインストールしたものを想定しています。

XAMPPのアドオン

Windows用のXAMPPアドオンは次のURLから入手することができます。

XAMPP - Browse /Windows add-ons at SourceForge.net
[URL] http://sourceforge.net/projects/xampp/files/Windows%20add-ons/

Perlはv1.7.2以降、Tomcatはv1.7.4以降、基本パッケージに含まれるようになり、それらのアドオンは不要になりました。でもなんとなくXAMPP USB Liteにアドオンの機能を追加したい日もあると思います。そんな思いをかなえちゃいましょう。
どうでもいいことですが、XAMPP USB Lite v1.7.5では、Webalizerが使用できます。XAMPP USB Lite v1.7.7には含まれていません。アクセスするには次のURLをたたきます。
http://localhost/webalizer/webalizer.php

XAMPP USB LiteでPerlを動かす

Windows用のXAMPP Perlアドオンは次のURLから入手することができます。

XAMPP - Browse /Windows add-ons/Perl at SourceForge.net
[URL] http://sourceforge.net/projects/xampp/files/Windows%20add-ons/Perl/

Perlアドオンの現在の最新バージョンは次のとおりです。

  • xampp-win32-perl-addon-5.10.0-2.2.11-pl2-installer.exe
  • xampp-win32-perl-addon-5.10.0-2.2.11-pl2.exe
    • 自己展開形式。
  • xampp-win32-perl-addon-5.10.0-2.2.11-pl2.zip
    • ZIP形式。

XAMPPのv1.7.2以降では、Apacheを起動すればPerlが動作するように設定されています。しかし、CGI(Common Gateway Interface)と、mod_perlモジュールが有効にされている基本パッケージ版と違い、ライトパッケージ版ではCGIのみのため、Perlの実行パスを変更しないと正しく動作しません。パッケージ版では拡張子が*.cgiのファイルはCGIでPerlが、拡張子が*.plの場合はmod_perlモジュールが使用されます。

#!/usr/bin/perl
↑を↓に書き換える
#!"/xampp/perl/bin/perl.exe"

ライトパッケージ版でもPerlの実行パスを変更しないで実行できるようにするには、シンボリックリンク(symbolic link)を作成する方法やmod_perlモジュールを有効にする方法があります。シンボリックリンクを作っても削除するときに忘れている可能性があることと、そもそもCGIからだと動作が遅くてうんざりするので、ここでは後者のmod_perlモジュールを有効にする方法を紹介します。ライトパッケージ版でもmod_perlモジュールを用いることで快適なPerlライフを送りましょう。

たとえば次のようなPerlスクリプトを書いてhtdocsにtest.plとして保存したとします。

#!/usr/local/bin/perl

print "Content-Type: text/html\r\n";	# レスポンスヘッダ
print "\r\n";	# レスポンスヘッダの終了
print "Hello, world";	# レスポンスボディ

HTTPレスポンスヘッダの改行コードはCRLFであることに注意してください。CRはCarriage Returnで行頭復帰を表し、LFはLine Feedで改行を表します。なお、レスポンスヘッダ部分を省略した場合、mod_perlで動作していると何も表示されませんが、CGIで動作していると次のエラーメッセージが表示されます。

Server error!

サーバ内部で障害が発生し、 リクエストに応えることができませんでした。

Error message:
Premature end of script headers: test.pl 

PerlはPHPのように自動的にHTTPレスポンスヘッダを生成しないので、自分で出力する必要があります。おまじないなんかではありません。たまに見かけるLF(\n)だけを書いている人は残念ながら間違っているので、この記事を見た後はCRLF(\r\n)の正しい書き方に改めましょう。このことはRFC 2616にしっかり書かれているのでよく読んでおきましょう。

studyinghttp.net - このウェブサイトは販売用です! - 解説 仕様書 利用 技術 である 手法 日本語訳 プログラミング リソースおよび情報
[URL] http://www.studyinghttp.net/body#Abstract

リクエスト (section 5) と レスポンス (section 6) 各メッセージは、エンティティ (メッセージの付加物) を転送するために RFC 822 の一般的なメッセージフォーマットを使用する。両タイプとも、開始行、0 以上のヘッダフィールド ("headers"として知られているもの)、ヘッダフィールドの終了を示す (CRLF の前に何もない行のような) 空行、そして任意のメッセージボディからなる。

基本パッケージ版でhtdocsにおいたtest.plスクリプトファイルをWebブラウザから実行すると何の問題もなく表示できますが、ライトパッケージ版では実行しようとすると次のようなエラーが表示されます。

Server error!

サーバ内部で障害が発生し、 リクエストに応えることができませんでした。

Error message:
couldn't create child process: 720003: test.pl

このエラーを解決するために、mod_perlモジュールを有効にします。Perlアドオンxampp-win32-perl-addon-5.10.0-2.2.11-pl2.zipを展開して、その中身をすべてXAMPPのインストール先ディレクトリに上書きしてください。上書き完了後は次のファイルを置き換えてください。

\xampp\apache\conf\extra\perl.conf.new
↑のファイルを↓のファイルに名前を変えて置き換える。
\xampp\apache\conf\extra\httpd-perl.conf

以上で完了です。Apacheを再起動してから、先ほどエラーとなっていたページを再度読み込みしてみてください。今度はしっかりと実行できるはずです。また、拡張子が*.cgiのファイルもmod_perlモジュールで動作させるには、.htaccessファイルに次の内容を記述してください。


    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    PerlOptions +ParseHeaders

ここまでやってみたけどなぜかうまく動作しない、といった場合は\xampp\apache\logs\error.logを確認してみてください。きっと原因がわかるはずです。

XAMPP USB LiteでTomcatを動かす

Windows用のXAMPP Tomcatアドオンは次のURLから入手することができます。

XAMPP - Browse /Windows add-ons/Tomcat at SourceForge.net
[URL] http://sourceforge.net/projects/xampp/files/Windows%20add-ons/Tomcat/

Tomcatアドオンの現在の最新バージョンは次のとおりです。

  • xampp-tomcat-addon-win32-6.0.20.exe
    • 自己展開形式。
  • xampp-tomcat-addon-win32-6.0.20.zip
    • ZIP形式

基本パッケージのv1.7.4ではじめてTomcat 6.0が含まれ、その後のv1.7.5以降はTomcat 7.0が含まれるようになりました。ライトパッケージではTomcatが含まれていないため、Tomcatを動かすには、アドオンを入手してそれをXAMPPのインストール先ディレクトリに上書きする必要があります。
Tomcatアドオンxampp-tomcat-addon-win32-6.0.20.zipを展開して、その中身をすべてXAMPPのインストール先ディレクトリに上書きしてください。上書き完了後は、バッチファイルの内容を編集する必要があります。バッチファイルの内容はかなり省略されているため、JRE_HOMEとCATALINA_HOMEの2つの変数を追加する方法でcatalina_start.batとcatalina_stop.batバッチファイルを書き換えてください。なお、Tomcatアドオンxampp-tomcat-addon-win32-6.0.20はTomcat 6.0でApacheとの連携にmod_jk.soモジュールを使用しており、ライトパッケージに存在するxampp-control.exeにはTomcatを管理する項目はないことに注意してください。

XAMPPを持ち運ぶ

XAMPP USB LiteはUSBという名前がついていますが、USBメモリ専用という意味ではありません。必要最小限のパッケージにまとめたライトバージョンという認識が正しいです。ライトパッケージがライトバージョンなら、基本パッケージはフルバージョンということもできます。ライトパッケージは、v1.7.3まではXAMPP Liteという名前で、絶対パス自体も\xampplite\となっていました。しかし、v1.7.5からはXAMPP USB Liteとなり、基本パッケージと同じく、絶対パスが\xampp\となりました。
インストーラ版を実行すると"install.php"が実行されます。これは設定ファイル内に存在する\xampp\パスの変更を行っているだけです。なので、XAMPP USB LiteでPerl/Tomcatを動かすという作業するのがめんどくさい、と思ったら基本パッケージ版の圧縮ファイル(ZIP形式または7z形式)がお勧めです。圧縮ファイルを展開してルートディレクトリ直下に設置すればすぐに使えます。もちろんUSBメモリにそのまま入れてもしっかり動きます。いまどきのUSBメモリは大容量なので、基本パッケージ版をそのまま突っ込んでおけばいいのです。たとえばUSBメモリのドライブレターがE:の場合は、E:\xampp\にしておけば、コントロールパネルのE:\xampp\xampp-controle.exeも動き、もしドライブレターが変わったとしても問題なく使えます。ただし、基本パッケージ版ではUSBメモリ上でsetup_xampp.batをそのまま実行しないでください。絶対パスがドライブレターを含むのものに書き換わってしまいます。詳細はsetup_xampp.batの役割を知るを参考にしてください。また、当然のことながら、サービスへの登録は行わないでください。

setup_xampp.batの役割を知る

XAMPPのインストーラ版では、setup_xampp.bat内に書かれているように、\xampp\install\install.phpの実行を行い、Apacheのconfファイル内のパスやPHPの実行パス、MercuryMailのパスなど、設定ファイル内に存在する\xampp\パスを、インストール先のディレクトリに合うように書き換えています。install.phpを実行しなくても、XAMPPはデフォルトで絶対パスが\xampp\となっています。そのため、ルートドライブ直下においた場合はパスを変更する必要がなく、setup_xampp.batをわざわざ実行する必要はありません。
また、基本パッケージ版では、setup_xampp.batを実行するとドライブレターを含む絶対パス(C:が頭につくもの)に書き換わります。この場合は、ドライブの移動(ディレクトリの階層は同じにしてC:\からD:\など)を行ってしまうと再度setup_xampp.batを実行するまで、動作しなくなってしまいます。この問題を解決するため、USBメモリを想定したライトパッケージ版ではsetup_xampp.batを実行しても、ドライブレターを含まないようになっています。

基本パッケージ版もライトパッケージ版と同様に動作させたい場合はsetup_xampp.bat内のPHP実行文に次のようにusbを付け足してください。この変更を行うことで余分なドライブレターを含めないようにできます。usbがあるのとないのとでは、単にドライブレターがつくかつかないかだけの違いです。それ以外はまったく同じように動作します。

:Normal
set PHP_BIN=php\php.exe
set CONFIG_PHP=install\install.php
%PHP_BIN% -n -d output_buffering=0 %CONFIG_PHP% usb
GOTO END

インストーラ版の動作を知る

インストーラ版の動作は\xampp\src\xampp-nsi-installer\scripts\で確認することができます。拡張子がnsiのファイルはNSIS(Nullsoft Scriptable Install System)を用いて作成されています。

基本パッケージのインストーラ版が使用するレジストリは次のとおりです。

DeleteRegKey HKLM "Software\xampp"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\xampp"

Mercury Mail Transport Systemを起動した場合は次のレジストリが書き込まれます。

HKEY_CLASSES_ROOT\Software\Mercury32
(HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SOFTWARE\Mercury32)
HKEY_CURRENT_USER\Software\Mercury32
(HKEY_USERS\[SID]\Software\Mercury32)

レジストリの項目については次を参考にしてください。


[URL] http://support.microsoft.com/kb/256986/ja

サービスの登録を解除する

サービスに登録したのを忘れていてXAMPPをアンインストールしてしまい、登録されっぱなしの状態になっていることがあります。そんなときは次のコマンドでサービスの登録を解除しましょう。

sc.exe query apache2.2
sc.exe delete apache2.2

sc.exe query mysql
sc.exe delete mysql

sc.exe query "FileZilla Server"
sc.exe delete "FileZilla Server"

queryでサービスがあるかどうか確認し、deleteでサービスの登録解除を行っています。

Skypeのポートを変更する

Skypeはデフォルトで80番ポート(http通信用)と443番ポート(https通信用)を使用します。このため、Skypeが先に起動している場合、同じポートを使用するApacheを立ち上げることができなくなってしまいます。「上記のポートに代わり、ポート80を使用」のチェックを外して設定を変更しましょう。


<<大きい画像はこちら>>


説明だけではポート80しか利用していないように思えますが、ポート443もしっかりと入っています。詳しい内容については、検証:ネットワーク管理者のためのSkype入門 第2回 Skypeの通信メカニズム 1.Skypeの通信開始処理 - @IT 2005/07/15を読むといいです。


<<大きい画像はこちら>>


ちなみに、0から1023まではウェルノウンポート(Well-Known Ports)番号、1024から49151までは登録済みポート(Registered ports)番号と呼ばれており、IANA(Internet Assigned Numbers Authority)が公開しているService Name and Transport Protocol Port Number Registryで、それらのポートを使用するアプリケーションを確認することができます。List of TCP and UDP port numbers - Wikipediaも便利です。

おわりに

XAMPPのちょっとした疑問があればコメント欄などでお知らせください。XAMPPを極めるような解説記事を書いていきたいと思います。ネタは随時受け付けています。