
はじめに
XAMPPを使っていると、こんな欲が出てくる。
- Xdebugあり環境と、なし環境を一瞬で切り替えたい
- PHP 8.1 と 8.2 を同時に触りたい
- php.ini を毎回いじるのは正直めんどい
そこでやったのが、XAMPPを2系統(8.1 / 8.2)入れて、Apacheをポート違いで同時起動する構成だった。
最初は快適。
しかし、ある日突然、片方のApacheが起動しなくなった。
やっていた構成
- XAMPP 8.1
- Apache + PHP 8.1
- Xdebug 有効
- XAMPP 8.2
- Apache + PHP 8.2
- Xdebug 無効
- MySQLは片方だけ使用
Apacheはポートを分けて同時起動。
ショートカットで即切り替え。
思想としてはかなり美しい。
起きた問題
ある日、XAMPP 8.1 の Apache が起動しない。
XAMPPコントロールパネルでは
Apache shutdown unexpectedly
おなじみの、あの曖昧すぎるメッセージ。
しかも厄介だったのは、
- Apacheが起動しない
- なのに error.log が更新されない
- 去年の日付のまま止まっている
「ログすら吐けないレベルで死んでいる」状態。
原因の正体
httpd.exe を直接起動して、ようやく正体が見えた。
Cannot load modules/mod_dav_svn.so into server
つまり、
- Apache設定で mod_dav_svn.so を読み込もうとしている
- しかし、そのファイルは存在しない
mod_dav_svn.so は Subversion(SVN)用のApacheモジュール。
XAMPPの標準構成では、だいたい入っていない。
過去に設定ファイルだけが残り、
モジュール本体が無い状態になっていた、というオチ。
解決方法
httpd-xampp.conf にある以下をコメントアウト。
LoadModule dav_svn_module modules/mod_dav_svn.so
これだけでApacheは復活。
ログが出なかった理由もこれで説明がつく。
Apacheは設定ファイルを読み込む段階で死んでいたため、
error.logに到達する前だった。
その結果どうなったか
- XAMPP 8.1 の Apache → 起動成功
- XAMPP 8.2 の Apache → もともと起動可能
- 両方同時に起動できる状態に
ポートを変えていたため、
Apacheは「普通に正しく」2つ同時起動していた。
Apache同時起動のメリット
- Xdebug有無を即切り替えできる
- PHPのバージョン違いを同時検証できる
- 設定実験が安全(片方が壊れても片方は生きている)
開発用途なら、これはかなり強い。
Apache同時起動のデメリット
- ポート管理がややこしい
- ログの見間違いが起きやすい
- MySQLを誤って2重起動すると事故る
- 「昔の設定の亡霊」が残りやすい
今回の mod_dav_svn.so は、まさにそれ。
結論
Apacheは本来「1台1インスタンス」で使うもの。
しかし、ローカル開発環境では例外的に複数起動はアリ。
ただし条件がある。
- 何のために分けているか自分で説明できる
- ポートと役割が明確
- 使っていないモジュールは切る
この3つが守れないなら、
おとなしく1つにまとめた方が平和。
おわりに
今回のトラブルは「失敗」ではなく、
Apacheがどう起動し、どこで死ぬのかを理解できた成功体験だった。
サーバは黙って動くが、
壊れるときは雄弁だ。
ただし、ちゃんと耳を澄ませた人にだけ。
コメント