Phalconという最速のPHPフレームワークがあると聞いて、いてもたってもいられず、ちょっと動かしてみました。
環境:
Ubuntu Server 13.04 (お名前.com VPS)
まずはPHPの準備
Phalcon is an open source, full stack framework for PHP 5 written as a C-extension , optimized for high performance.
ってことなので、Phalconのためにphpenvとphp-build使ってまるまる一つPHPを用意してあげることにします。
phpenvのインストールとかはこのへん見て適当にやってください。内容ちょっと古いですけど。
phpenvの準備が出来たら、さっそくインストールします。
$ cd ~/.phpenv/plugins/php-build/share/php-build/definitions
$ cp 5.5.8 5.5.8-phalcon
$ phpenv install 5.5.8-phalcon
$ phpenv global 5.5.8-phalcon
$ phpenv version
5.5.8-phalcon (set by /home/agen/.phpenv/version)
Phalconをビルド、インストール
$ cd
$ git clone https://github.com/phalcon/cphalcon
$ cd cphalcon/build
$ ./install
$ echo "extension=phalcon.so" >> /home/agen/.phpenv/versions/5.5.8-phalcon/etc/php.ini
確認します。
$ php -r "print_r(get_loaded_extensions());" | grep phalcon
[50] => phalcon
ちゃんと入ったみたいです。
あとは、まあphpenv local 5.5.8-phalcon
とかしておけば、プロジェクト単位でphalcon入りPHPが使えるようになります。
動かしてみる
簡単にHelloWorldしてみます。
$ mkdir phalcon-test
$ cd phalcon-test
$ phpenv local 5.5.8-phalcon
$ vi index.php
$ php -S localhost:3000
<?php
$app = new Phalcon\Mvc\Micro();
$app->get('/', function() {
echo "<h1>Welcome</h1>";
});
$app->handle();
これだけ。http://localhost:3000/ にアクセスすると、Welcome
と表示されると思います。
・・・すげえ! 単純すぎてスピードとか全然分からないけど!
じゃあ次はルーティングを足してみます。
<?php
$app = new Phalcon\Mvc\Micro();
$app->get('/', function() {
echo "<h1>Welcome</h1>";
});
$app->get('/hello', function() {
echo "<h1>Hello</h1>";
});
$app->handle();
http://localhost:3000/hello にアクセスすると、Hello
が表示され・・・ない? 代わりにWelcome
が表示される。
これ、ApacheなりNginxなりでRewriteしてたら発生しないんですよね。
今回は開発用のビルトインサーバで実験してるので、うまくルーティングされないようです。
じゃあどうするかっていうと方法は三つあって、
- 素直にアプリケーションサーバ用意する
- ちゃんとパラメータを渡してあげる
- ルーティング担当のPHPファイルを介す(後述)
1は実験で動くにはちょっと重すぎるので、2から順にやってみます。
2. ちゃんとパラメータを渡してあげる
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
これ、Apacheで利用するRewriteRuleです。
見ると、パラメータとして_url
に渡してやればちゃんとルーティングしてくれるみたい。
というわけで、http://localhost:3000/index.php?_url=/hello にアクセスしてみます。すると、ちゃんとHello
が表示されました。
3. ルーティング担当のPHPファイルを介す
PHPのドキュメントを見ると、こう書いてあります。
ウェブサーバーの開始時にコマンドラインで PHP ファイルを指定すると、
そのファイルをウェブサーバーの "ルーター" スクリプトとして使います。
このスクリプトは、各 HTTP リクエストの開始時に動きます。
このスクリプトが FALSE を返すと、リクエストされたリソースをそのままの形式で返します。
それ以外の場合はスクリプトの出力をブラウザに返します。
はい、というわけで以下のファイルを作成します。
<?php
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
$_GET['_url'] = $_SERVER['REQUEST_URI'];
}
return false;
公式のドキュメントからまるまる持ってきました。
$ php -S localhost:3000 .htrouter.php
すると、/
ならWelcome
、/hello
ならHello
と表示されるようになりました。
といった辺りで、今回はおしまい。