WebMatrixにPHP 5.3を入れてSymfony2を入れる

昨日のイベントに影響されて、早速Symfony2を触ってみることに。

PHP5.3といえばまだまだ最新。僕がメインで使っているLinux環境に入れるのは互換性とかあれこれあってめんどくさい。そこでAzureのセッションで紹介されていたWebMatrixを使ってさくっと環境作ってやってみることにしました。

WebMatrixを入れる

まずはすべてが手っ取り早く整うWeb Platform Installer(Web PI)をダウンロードしてきます。

Web PIをインストールして起動し、プロダクト>ツール>Microsoft WebMatrix>追加>インストール。あとはしばらく待っているとWebMatrixがインストールされます。

Symfony2をダウンロードする

Symfonyの公式サイトからSymfony2をダウンロードします。僕がダウンロードしたときは 2.0.0 PR9 でした。

このとき、zipを選択してください。

WebMatrixを起動してサイトを作る

WebMatrixを起動するとこんな画面になるので個人用サイトを選びます。最初からWebSite1というのがあるので、それを開きます。*1

左のツリーから設定を選ぶと、PHP設定というのがあるのでチェックを入れます。

どのバージョンのPHPを使うか聞いてきます。Symfony2はPHP5.3でないと動かないので、迷わず5.3を選択。

初回はインストールが必要になるので少し時間がかかります。

Symfonyをサイトに組み込む

WebMatrix左下の選択リストから、「ファイル」を選択し、ツリーのルートを右クリックして、「Windowsエクスプローラを表示」をクリックします。

開いたフォルダに、ダウンロードしてきたSymfony2を展開してきて出てきたファイル類をSymfonyフォルダを入れます。

その後、WebMatrixに戻って再度ツリーのルートを右クリックして、「最新の情報を更新」とします。こんな感じになります。

その後、実際のエントリポイントとなる Symfony/web をドキュメントルートにしたくなりますが、WebMatrixにはどうもその機能がない模様。

ASP.NETはわからないのですが、PHPだとドキュメントルート外の公開されない場所に実際のプログラムを置くのが常套手段で、それにあわせて画像とかのパスを合わせたりするのでこれは結構致命的なんじゃないかなあって思うのですが…。

ひとまず、マニュアル読んだところパスは合わせずともひとまず動作できそうな感じなので、開発用でどうせ最終的にはLinux+Apacheで運用するんだし、と割り切ってこれでいきます。

Symfonyの設定確認をする

というわけで設定確認です。この状態で http://localhost:8080/Symfony/web/config.php へアクセスできるようになっているはずです。これはサーバーの設定を確認するためのスクリプトです。基本的には問題はないが、3つ推奨事項を指摘されます。

このうち1つはAPCとかのキャッシュ機構を入れた方がいいよといいますが、面倒なのでスルー、2つめのphp_posixはWindowsなので使えない。3つめのintlモジュールはphp.iniのExtensionListに追加するだけなのでやってしまいましょう。php.iniは以下の場所にあります。

  • 64bit OS
  • 32bit OS
    • C:\Program Files\IIS Express\PHP\v5.3\php.ini

Program Files下のファイルなので、管理者権限のあるテキストエディタで編集する必要があることに注意しましょう。
ExtensionListは末尾にありますので、以下の行を追加して完了です。

extension=php_intl.dll

WebMatrixの裏で動いているIIS Expressはphp.iniの設定の変更を監視していて、変更を検知すると自動的再起動してくれます。親切。

Symfonyのスタートページを見る

というわけで、一通り整ったはず。config.phpの「Bypass configuration and go to the Welcome page」を押してみます。

が、最初エラーでうまくいかず。

Fatal error: Interface 'Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface' not found in C:\Users\<>\Documents\My Web Sites\WebSite1\Symfony\vendor\symfony\src\Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.php on line 19

なんかパスが合わないのかな、っておもったんですがどこなのかよくわからず。

これはtgzを落としてたからで、zipを落としてやってみたところうまくいきました。

2011/04/11(Mon) 12:00 追記

エラーでうまく動かなかった件、Twitter上で @hidenorigoto さんにアドバイスいただいてうまく動いたので記事を修正しました。ありがとうございました!

*1:すでにWebSite1をほかに使ったり削除しているようであれば、テンプレートからサイトを作成を選んで、空のサイトを作れば良さそうです。