トップ > Tech > PHP > CakePHP を IIS7.5 で動かす

CakePHP を IIS7.5 で動かす

CakePHP は Apache で動作することが前提なため、IIS へのインストールは情報も少なく面倒である。Server 2008 R2 の IIS7.5 へ CakePHP をインストールしたので、メモとして記録しておく。

動作条件

CPUCore i7 920
RAMDDR3 12GB
HDD1TB(RAID1)×2
OSWindows Server 2008 R2 Datacenter
Web daemonInternet Information Server 7.5
PHPPHP 5.3.0

CakePHP のダウンロード・インストール

公式サイト http://cakephp.jp/ から安定版(Stable)の zip ファイルをダウンロードする。2010/1/21 現在の安定版は cake_1.2.5.zip。

適当なフォルダに解凍する。なお、既存の Web サイトがある場合、CakePHP は新しい Web サイトを構築するため、フォルダの位置は現在のサイトがあるフォルダ下でなくともよい。

cake_X.X.X というフォルダ名を適当に変更する。ここでは cakephp とする。 フォルダ構成が下記のようになることを確認する(太文字が重要)。

  • cakephp
    • app
      • config
      • もろもろ
      • webroot
    • cake
    • vendors

URL Rewrite のインストール

IIS7.5 では mod_rewrite が利用できないらしく、MS が提供する URL Rewrite 1.1 を使用する。

URL Rewrite 1.1 のインストールには Web Platform Installer(Web PI) と呼ばれる管理ソフトが必要である。このへん から落としてインストールする。現時点でのバージョンは 2.0。

webpi.png

Web PI のインストールが完了して起動すると、URL Rewrite がインストールできる。スクリーンショットを取り忘れたが、ウィザードの指示に従うだけなので簡単だ。

ちなみに私の環境では、このインストール後になぜかブルースクリーンになってサーバーが落ちた。再起動後、正常に URL Rewrite がインストールできていたようなのでよしとしたが、原因は不明である。

IIS Web サイトの追加

IIS マネージャーの [Web サイトの追加] で Web サイトを追加する。

add_site1.png

サイトの基本情報を入力する。

add_site2.png
  • サイト名:わかりやすい名前
  • 物理パス:<cakephpのフォルダ>\app\webroot
  • ポート:適当なポート

ポートは既にサイトが存在している場合、80 番以外のポートにするか、80 番にしてホスト名で判別させる必要がある。ここでは 50000 番のポートとした。

URL 書き換えの設定

新しく作った Web サイト cakephp を選択する。IIS の項目に [URL 書き換え] があるので、これをダブルクリックする。

url_rewrite1.png

画面右メニューにある [規則のインポート] をクリックする。

url_rewrite2.png

[書き換え規則]に下記を貼り付けする。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

[変換済みの規則] に問題がなさそうなら、右メニューの [適用] をクリックする。

PHP(FastCGI) の設定

これは CakePHP とは直接関係ないが、新しいサイトを作っているので設定しなければならない。 IIS マネージャで cakephp サイトを開き、[ハンドラーマッピング] を開く。

php_via_fastcgi1.png

[モジュールマップの追加]で下記のようにして、マッピングを追加する。

php_via_fastcgi2.png
  • 要求パス:*.php
  • モジュール:FastCgiModule
  • 実行可能ファイル:<PHP のインストールパス>\php-cgi.exe
  • 名前:適当に

ファイアウォールの設定

ポートを 80 番以外にした場合、ファイアウォールを開けなければ「このwebページは表示できません」となってしまう。Windows ファイアウォールの設定で受信の規則にポート許可を追加する。

CakePHP の設定

ここまでの状態でサイトにアクセスするとおそらく下記のようにエラーがでる(黄色のメッセージ)。バージョンは 1.2.5 なのになぜか 1.2.4 と表示されている。。。

config1.png

一つずつつぶしていく。

Security.salt ほにゃらら

1 つ目のエラーはハッシュに用いる文字列が既定のときの Notice。app/config/core.php を開き "salt" を検索して、下記の行のランダムな文字列を適当に書き換えればよい。文字列は適当にキーボードを叩くとかして入力する。要は簡単でなければなんでもいい。

Configure::write('Security.salt', 'mf138$q0env84%hqtidjgaoid');

これで更新すれば 1 つ目は緑になるはずだ。

Your tmp directory is NOT writable.

2 つ目は app/tmp フォルダに IIS の匿名ユーザー "IUSR" の書き込み権限がないと出るエラー。app/tmp フォルダのプロパティ→セキュリティで IUSR を追加し、書き込み権限を付加する。

Your database configuration file ほにゃらら

データベース設定ができていないよ!というエラー。app/config/database.php.default を database.php にリネームする。 ファイルを開き、下記の設定部分を適宜変更する。ただし、データベースを使用しない場合はたぶん設定しなくともよい。

var $default = array(
 'driver' => 'mysql',
 'persistent' => false,
 'host' => 'ホスト名',
 'login' => 'ユーザー名',
 'password' => 'パスワード',
 'database' => 'データベース名',
 'prefix' => '',
);

正常動作

エラーを消していくとすべて緑になる。

config2.png

URL Rewrite 2.0 へのアップデート

URL Rewrite は概ね順調に動いていたのだが、パラメータを含む次のような URL でエラーがでた。

/books/index/page:1

エラー内容はサーバー上のブラウザでアクセスするとこんな感じ。

HTTP Error 500.50 - URL Rewrite Module Error.
The URI scheme is not valid.
(URI のスキームが無効です。)

なんのこっちゃわからんエラーだが、どうやら URI にコロン(:)が含まれているのが、気に入らないらしい。

これは URL Rewrite 1.1 の不具合らしく、URL Rewrite 2.0 をインストールすることで解決した。 っていうか、直接インストーラ落とせんのかい!って感じですが。

ちなみにインストール時に再起動を要求されるが、しなくても特に問題なく動作した。

参考

(2012/02/03 15:44:12)
28236
プロフィール

Kenz Yamada(山田研二)。1984年生。大阪。ちょっとずつ好きなプログラム作ってます。 好きなものはカメラと旅行。ガジェットや身の回り、ちょっとこだわります。 詳しくは Web mixi で。

Bookmark and Share