あーかいぶすハイディフィニション

ここはもう更新しとらんのじゃ

Nginx で Silex を動かすまで

今月号の WEB+DB Press を買ったら Silex なる聞き覚えのない単語があったので調べる君したところ、Symfony2 の作者さんがメンテしてる PHP の軽量フレームワーク ( Sinatra 風? ) じゃないですかやったー!という訳で、公式には Apache ならこうしろよ!ってコンフィグ載せてくれてたけど、Nginx は書いてなかったので、試してみた。

Nginx で PHP を実行しましょう

割愛。あとで別途書こうと思いますが、Nginx に FastCGI サポートのコンパイルオプションつけてインストールしてください。FastCGI 経由で php を起動できるようにしておきます。
起動できましたか?できたら下記の記事を参考にコンフィグファイルにリダイレクトの設定とかをぶち込みましょう。
nginx vhost conf silex & symfony · GitHub
めんどくさい人のために、僕が試した時の Nginx の設定ファイルもここにおいときますね(スッ)。

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    gzip  on;
    gzip_http_version 1.0;
    gzip_vary         on;
    gzip_comp_level   6;
    gzip_types        text/xml text/css application/xhtml+xml application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php;
    gzip_disable      "MSIE [1-6]\.";

    server {
        listen       80;
        server_name  YOURSERVERNAME;
        charset UTF-8;
        access_log  /var/log/nginx/YOURSERVERNAME_access.log combined;
        error_log   /var/log/nginx/YOURSERVERNAME_error.log;

        location / {
            #root   /var/www/html/silex;
            index  index.php index.html index.htm;

            if (-f $request_filename) {
              expires max;
              break;
            }

            if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
              rewrite ^(.*) /index.php last;
            }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:8080
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:8080;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/silex/$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}
Silex をインストールする

※以下ドキュメントルートを /var/www/html/silex とします。

php.ini の設定から、phar ブロックを確認します。ムッ。

今回のロケ地では、インストール後動作確認で Wordpress を動かしただけだったので、以下のようになっていました。

[Phar]
; http://www.php.net/manual/en/phar.configuration.php#ini.phar.readonly
;phar.readonly = On

; http://www.php.net/manual/en/phar.configuration.php#ini.phar.require-hash
;phar.require_hash = On

;phar.cache_list =

つーことで、ドキュメントに従い下記のように修正します。

[Phar]
; http://www.php.net/manual/en/phar.configuration.php#ini.phar.readonly
phar.readonly = Off

; http://www.php.net/manual/en/phar.configuration.php#ini.phar.require-hash
phar.require_hash = Off

detect_unicode = Off
Silex をダウンロードしてドキュメントルートに配置します。ムッ。

wget してくるだけでおk、必要ならばファイルの所有者は nginx の実行ユーザにあわせておきましょう。ロケ地の Nginx は、nginx ユーザの nginx グループで動作しています。

$ cd /var/www/html/silex
$ wget http://silex.sensiolabs.org/get/silex.phar
$ chown nginx:nginx silex.phar
コントローラの準備

コントローラというかルーティングというか、とにかく silex.phar を呼び出すファイルを作成しましょう。ここでは動作確認程度の予定なので、公式ドキュメントの通り hello/XXXX へのルーティングを記述したファイルを用意します。ホァイ!

$ cd /var/www/html/silex
$ vi index.php
$ chown nginx:nginx index.php

内容は公式ドキュメントにも記載されているイカのコードでゲソ。

<?php
require_once __DIR__.'/silex.phar';

$app = new Silex\Application();

$app->get('/hello/{name}', function ($name) use ($app) {
    return 'Hello '.$app->escape($name);
});

$app->run();
?>
キシン流奥義

ヴォー。これで準備は整いましたね。じゃあ Nginx と FastCGI を起動して、http://YOURSERVERNAME/hello/world へアクセスしてみてください。これで「hello world」と表示されたら無事動作してますね、お疲れ様でした。

Silex しゅごい

素直に Sinatra 使えよ!って感じですが、Ruby 実行できないけど PHP 5.3 以上はインストールされてるよ!とかいう PHP Love!! な環境のサーバを用意された場合は、非常に良い選択肢となりえるのではないでしょうか、規模にもよりますが。あとは規模はそれなりだけど、SymfonyCakePHP 持ち出すのはおもすぎんよ〜、という場合は、PHPer にとっては非常に気軽にコードが書けそうな雰囲気です。
まあ、上記のように、PHP 5.3 以上が必要だったり、rewrite しないといけないので、htaccess 用意するなりしないとだめっぽそうですが、選択肢としては有用かと思いますyp!流行れ!