PSR7

既存のBEAR.Sundayアプリケーションは特別な変更無しにPSR7ミドルウエアとして動作させることができます。

以下のコマンドでbear/middlewareを追加して、ミドルウエアとして動作させるためのbootstrapスクリプトに置き換えます。

composer require bear/middleware
cp vendor/bear/middleware/bootstrap/bootstrap.php bootstrap/bootstrap.php

スクリプトの__PACKAGE__\__VENDOR__をアプリケーションの名前に変更して、 通常のBEAR.Sundayアプリケーションと同様に公開Webディレクトリとしてvar/wwwを指定します。

php -S 127.0.0.1:8080 -t var/www

ストリーム

ミドルウエアに対応したBEAR.Sundayのリソースはストリームの出力に対応しています。

以下のスクリプトはimage.jpg画像ファイルをbase64エンコードしてHTTP出力します。

public function onGet($name = 'BEAR.Sunday')
{
    $fp = fopen(__DIR__ . '/image.jpg', 'r');
    stream_filter_append($fp, 'convert.base64-encode');
    $this['greeting'] = 'Hello ' . $name;
    $this['image'] = $fp; // image in base64 format

    return $this;
}

$this[‘image’]にはfopenのファイルポインタリソースがアサインされているだけですが、 他でアサインされた文字列($this[‘greeting’])を含めて全てストリームに変換されて出力されます。

HTTP出力がストリーム出力に完全に対応していればPHPのメモリ制限を受けないで巨大なファイルを出力することができます。 大きなサイズのファイルダウンロードに向いています。

新規プロジェクト

新規でPSR7のプロジェクトを始める場合のパッケージが用意されています。

composer create-project bear/project my-awesome-project
cd my-awesome-project/
php -S 127.0.0.1:8080 -t var/www/

必要に応じて他のPSR7ミドルウエアを追加したり、Rayのモジュールを追加します。