LoginSignup
18
16

More than 5 years have passed since last update.

Phalconことはじめ

Posted at

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のためにphpenvphp-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
index.php
<?php

$app = new Phalcon\Mvc\Micro();

$app->get('/', function() {
  echo "<h1>Welcome</h1>";
});

$app->handle();

これだけ。http://localhost:3000/ にアクセスすると、Welcomeと表示されると思います。

・・・すげえ! 単純すぎてスピードとか全然分からないけど!

じゃあ次はルーティングを足してみます。

index.php
<?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してたら発生しないんですよね。
今回は開発用のビルトインサーバで実験してるので、うまくルーティングされないようです。

じゃあどうするかっていうと方法は三つあって、

  1. 素直にアプリケーションサーバ用意する
  2. ちゃんとパラメータを渡してあげる
  3. ルーティング担当の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 を返すと、リクエストされたリソースをそのままの形式で返します。
それ以外の場合はスクリプトの出力をブラウザに返します。

はい、というわけで以下のファイルを作成します。

.htrouter.php
<?php
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
    $_GET['_url'] = $_SERVER['REQUEST_URI'];
}
return false;

公式のドキュメントからまるまる持ってきました。

$ php -S localhost:3000 .htrouter.php

すると、/ならWelcome/helloならHelloと表示されるようになりました。

といった辺りで、今回はおしまい。

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16