XAMPP Apacheが起動できないときのメモ

XAMPPでイントールしたApacheが起動できないときのメモを残しておきます。

原因はポートの80番が他で使われてしまっていること。80番を使うアプリケーションとしては、SkypeとかTermViewerとかありますが、今回は違いました。

netstat -aon で80番を使っているプロセスを調べると、アプリケーションではなくてPID4のNT Kernel & systemが使っていました。

これは止めてはいけませんので、調べていくと、WinRMというサービスが80番を使っているので停止。他のところでは、違うサービスを停止と書いてあります。ユーザーによっては違うみたい。

取りあえず、現在は無事にApacheが起動できるようになりました。使用OSはWindows7です。

XAMPPの昔のバージョンに再インストール

開発でロカールのPCにはXAMPP(Apache+MySQL+PHP、後はPerlだっけ?)をインストールしてお手軽に開発環境を作っています。

お客様の依頼で、ずいぶん昔に作ったサイトのメンテナンスをやることになりました。しかし、今の開発環境では動かない。おそらくPHP4で動いているのでPHP5では動かないのは当たり前。

そこで、PHP4に戻してみます。XAMPPのページには、「PHP5とPHP4と切り替えが可能だぜ。」と書いていますが、これは真っ赤なウソ。PHP4とPHP5を切り替えるphp-switch.batというバッチファイルが見当たりません。今のXAMPP1.7.xではPHP5のみになっています。

おかげでXAMPP1.6.8まで戻さなくていけません。戻すときには、MySQLと、Apacheのhttpd.confのバックアップを忘れずに。MySQLのデータベースは、\mysql\data以下のディレクトリをコピーすれば、そのままテーブルがインポートできました。XAMPP1.6.8はセットアッププログラムではなくて、解凍したディレクトリ以下のファイルをコピーするだけなので、インストールは簡単かもしれません。本来は本番サーバーの環境とバージョンを合わせなければいけませんが。

無事にテスト環境で動くようになりました。PHP5への対応は大変そうだな。

Cake PHPでファイルのアップロードができないことの解決。

自分で解決したことの忘れないうちのメモ。

Cake PHPのビューで$html->file()のヘルパーを使って、Wavファイルを指定してそのファイルをアップロードしたとき、アクション側でファイル名が$this->dataで渡らないことではまりました。

フォームをシンプルにしてもダメ。WindowsのXAMPPではOKだか、LinuxのApache+PHPだとダメ。WavファイルではないJpegファイルだとOK。ファイル名に空白が入っているのではないかとか、いろいろ試しましたがわからず。半日つぶしました。

結果は、単純。CakePHPには関係ない原因でした。原因はアップロードサイズが大きいこと。ファイルサイズが大きいWavファイルなら当たり前のこと。今までは、ファイルサイズが大きいとエラーを表示したと思っていましたので見逃していました。

php.iniに

upload_max_filesize = 100M

post_max_size = 100M

のように大きい値(後で調整しましょう)を設定して、Apacheを再起動したらうまくアップロードできるようになりました。

基本に戻ることが大切。考えていることが間違った方向ではまる典型的なミスでした。

XAMPPでpearをセットアップしようとするとエラーになる。

XAMPPをインストールしているPCに、pear経由でphpDocumentorをインストールしようと、まずはpearをセットアップする。go-pear.batを実行すると、

ERROR:manifest length read was “3562676” should be “678716787”

とエラーが出る。これはXAMPPでの周知の障害らしい。例えばここでも報告されている。

http://pear.php.net/go-pear.pharからgo-pear.pharをダウンロードして書き換えればいい。

以上、覚え書き。

XAMPPのバーチャルホストを設定してCakePHPのテストサイトを構築する。

CakePHPで開発していて、ローカルのサーバーにテストサイトで動かしたいとき、まともにlocalhost直下に置ければいいのですが、いろいろとプロジェクトを抱えていると、たくさんのテストサイトを同時に動かしたいときがあります。サブディレクトリごとに設定してあげてもいいのですが、これだと.htaccessの設定が面倒であったり、絶対アドレスでリンクを指定できないとか制限があります。

ドメイン直下にドキュメントルートを配置できればいいのですが、一つ考えられるのはサブドメインを指定するというのがあります。しかし、これではlocalhostでは指定できないととか、わざわざローカルのPCにサブドメインを指定するのもやっかいであるとなります。

次に考えられるのはポート番号で分けてしまう方法があります。例えば

  • Aプロジェクトは、http://localhost:8080/
  • Bプロジェクトは、http://localhost:8082/

などでアクセスすることになります。これですと、ポート番号を適当に追加していけばプロジェクトを分けてアクセスすることが可能にになります。

簡単にローカルのPCにCakePHPのテスト環境を構築するにはXAMPPをインストールしてしまうのが一番簡単です、XAMPPを一つインストールしてしまえば、CakePHPのテスト環境で必要なApacheや、PHP、MySQLも動かすことがことができます。

ポート番号で分けてCakePHPの環境で動かすには、Apacheのhttpd.confにバーチャルホストの設定を追加してしまいます(ここからが本題)。上記のAプロジェクトの場合はApacheのhttpd.confに以下のバーチャルホストの設定を追加します。

Listen <span style="color: #ff0000;">8080</span>

8080>

DocumentRoot "<span style="color: #ff0000;">C:/workspace/TestProject/app/webroot</span>"
DirectoryIndex index.html index.php
ServerName localhost

<Directory "<span style="color: #ff0000;">C:/workspace/TestProject/app/webroot</span>">
Options Indexes FollowSymLinks MultiViews Includes ExecCGI
AllowOverride All
Order deny,allow
Allow from all

この場合、ダウンロードしたCakePHPは、c:\workspace\TestProjectにコピーしてしますと(EclipseのPDTで開発しているためこんなディレクトリにプロジェクトを入れています)、ドキュメントルートはその下の\app\webrootになります。プロジェクトを増やす場合は、赤字の部分を変更すればいいでしょう。

Optionsは、適当に動作させる環境に合わせて設定してください。これは、テスト環境を自分のローカルPC以外からアクセスできないようにしたり、ましてインターネットからアクセスできないようにしたり(もちろん当たり前ですが)してしまえば、あまり気にしなくてもよいかもしれません。

以上、いつもhttpd.confの設定でつまずく覚え書きです。

追記

せっかくこの記事にたどり着いて読んでくれたところ申し訳ありませんが、現在(2014/04/28)のところ、この方法は使っていません。今はVirtual Box+Vagrant+Chefでローカルのテストサイトを構築しています。