Caution: You are browsing the legacy symfony 1.x part of this website.

IIS上でsymfonyをインストールする

1.2
Symfony version Language

もちろん、Webサーバーに関してApache以外の選択肢があります。 それがIIS上にsymfonyをインストールする方法のチュートリアルを見る理由です。

何が必要でしょうか?

  • Windowsサーバー(絶対)
  • IISサーバー(明らか)
  • PHP5がIISにインストールされisapiモジュールとして設定されている(PHP5のインストール方法の手引きを参照)
  • isapi/rewrite/ www.isapirewrite.com、Apacheのmod_rewriteを置き換えるために使うURL操作エンジン。なぜこの製品なのでしょうか?これは主にIIS上で利用されフリーなLiteバージョンはsymfonyに対して機能するからです。何か他の製品に慣れていたら、読み続ければ、このチュートリアルの最後の見出しのみに1つの違いがあるだけです。

symfonyをインストールする

最初に、PEARパッケージを更新してください。 チャンネルを扱うためにバージョン1.4.0以降が必要だからです:

$ pear upgrade PEAR

それからsymfonyのチャンネルを追加してください:

$ pear channel-discover pear.symfony-project.com

ベータバージョン0.5.73以降のsymfonyをインストールしてください:

$ pear install symfony/symfony-beta

note

phingパッケージがない場合、同じようにインストールする必要があります:

$ pear install http://phing.info/pear/phing-current.tgz

詳細な内容はsymfonyのインストール方法の章を調べてください。

プロジェクトを初期化する

プロジェクトのディレクトリ(c:\myprojectを使う場合)とmyappと呼ばれるアプリケーションのための基本的なツリー構造を作るために、コマンドコンソールを開き次の内容を入力してください:

$ cd c:\myproject
$ symfony init-project myproject
$ symfony init-app myapp

IISを設定する

これから2つの設定オプションを考えます:

  • 最初の場合、Webサーバーはsymfonyのプロジェクトのみに使われ、URLはhttp://myproject/のようなものだけです。myappディレクトリを作成したディレクトリがc:\myproject\であることを前提として、(IISの管理コンソール内で)Webサーバーのrootディレクトリをc:\myproject\webに設定します。

  • 他のオプションはサーバーの1つの(おそらくはバーチャルの)ディレクトリのsymfonyプロジェクトをインストールすることで、URLはhttp://myserver/myproject/のようなものになります。IISの管理コンソール内で、c:\myproject\webディレクトリに対してWebサイトのroot上に新しいバーチャルディレクトリを作ります。

バーチャルディレクトリをサーバーのメインディレクトリに追加します。これをsfと名づけpearディレクトリのdata\symfony\web\sfに設定します。デフォルトの設定でPHP5をc:\php5にインストールした場合、フルパスはc:\php5\PEAR\pear\data\symfony\web\sfです。

URLの書き換えを設定する

isapi/rewriteがサーバーにインストールされ機能していることを前提とします。 まだISAPIを購入していないので、設定するのは1つのhttpd.iniファイルのみです。 設定は以前定義したオプションに依存します:

  • 我々が必要なhttp://myproject/のようなURLに対して:

    # ワーム攻撃からコンピュータを守る
    RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]
     
    # .html以外の.something拡張子を持つファイルをすべてスキップする
    RewriteCond URL .*\..+$
    RewriteCond URL (?!.*\.html$).*
    RewriteRule (.*) $1 [L]
     
    # .phpファイルはそのままにする
    RewriteRule (.*\.php)(.*) $1$2 [L]
     
    # 最後にWebフロントコントローラにリダイレクトする
    RewriteRule (.*) /index.php [L]
  • 我々が必要なhttp://myserver/myproject/のようなURLに対して:

    # ワーム攻撃からコンピュータを守る
    RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]
     
    # .html以外の.something拡張子を持つファイルをすべてスキップする
    RewriteCond URL /myproject/.*\..+$
    RewriteCond URL (?!/myproject/.*\.html$).*
    RewriteRule /myproject/(.*) /myproject/$1 [L]
     
    # .phpファイルはそのままにする
    RewriteRule /myproject/(.*\.php)(.*) /myproject/$1$2 [L]
     
    # 最後にWebフロントコントローラにリダイレクトする
    RewriteRule /myproject/(.*) /myproject/index.php [L]

IISを再起動します

symfonyを設定する

最後のステップはsymfonyプロジェクトのconfigディレクトリ内に設置されたsettings.ymlファイルを編集することです(我々の例ではc:\myproject\apps\myapp\config\です)。 2つのオプションが少々異なっていることを発見しても驚かないでしょう:

  • http://mproject/のようなURLに対しては、下記の行が必要です:

    all:
     .settings:
       path_info_key:          HTTP_X_REWRITE_URL
    
  • http://myserver/myprojectのようなURLに対しては、下記の行が必要です:

    all:
     .settings:
       path_info_key:          HTTP_X_REWRITE_URL
    

Important note: isapi/rewrite/を使わない場合、HTTP_X_REWRITE_URLは間違っている可能性があります。 symfonyの設定方法を知るために詳細なテストを作らなければなりません。 プロジェクトのwebディレクトリ内のmyapp_dev.phpファイル(もしくはwhatever you named your application_dev.php)を開き、次の2行を追加します:

print phpinfo();
die();

では次のURL: http://myproject/myapp_dev.php/test/rewrite(もしくは設定に依存するhttp://myserver/myproject/myapp_dev.php/test/rewrite)を開き、PHP変数を見ます。_SERVER["PATH_INFO"]が/test/rewriteと等しい場合、settings.ymlファイルからpath_info_key行を削除するか、この値(isapi/rewriteに対するHTTP_X_REWRITE_URL)を含む変数の名前を探さなければなりません。以前の2行を除去すれば、symfonyの準備が整います。

独自のディレクトリ内でsymfonyアプリケーションを設定する

symfonyプロジェクトはいくつかのアプリケーションを含みます。 デフォルトの設定において、すべてのアプリケーションは同じCSSとアップロードディレクトリを共有します。 これを変更し、myappアプリケーションに対して個別のディレクトリを作ります。 以前のオプションを考慮して、次のURL: http://myproject/myapphttp://myserver/myappを実現することにします。 今回、これらのオプション間の設定に違いはありません。

symfonyプロジェクトのwebサブディレクトリ内にmyappサブディレクトリを作ります(私たちの場合c:\myproject\web\myappです)。

index.phpmyapp_dev.phpファイルをこのディレクトリにコピーし、cssuploadsという名前の2つのディレクトリを作ります。

IISの管理コンソール内で、myappという名前のサーバーのroot上に新しいバーチャルディレクトリを作ります。 このバーチャルディレクトリをc:\myproject\myappに設定します。

httpd.iniファイルの最後で次の行を追加してください:

  #[myappに直接アクセスするための設定]
  # .html以外の.something拡張子を持つファイルをすべてスキップする
  RewriteCond URL /myapp/.*\..+$
  RewriteCond URL (?!/myapp/.*\.html$).*
  RewriteRule /myapp/(.*) /myapp/$1 [L]

  # .phpファイルはそのままにする
  RewriteRule /myapp/(.*\.php)(.*) /myapp/$1$2 [L]

  # 最後にWebフロントコントローラにリダイレクトする
  RewriteRule /myapp/(.*) /myapp/index.php [L]

myappアプリケーションのsettings.ymlファイル(c:\myproject\apps\myapp\config\settings.yml)を編集し次の行を追加します:

  all:
   .settings:
     path_info_key:          HTTP_X_REWRITE_URL

(HTTP_X_REWRITE_URLに関する前回のノートを参照)

最後に、フロントコントローラー(c:\myproject\web\myapp内のindex.phpmyapp_dev.php)の両方を編集し変更します:

define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));

上記のコードを以下のようにします:

define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/../..'));

これでお終いです。 うまくゆきました。