phpsgi/funk

PHPSGI 中间件规范的实现

dev-master / 1.0.x-dev 2017-06-03 14:09 UTC

This package is not auto-updated.

Last update: 2024-09-12 15:03:31 UTC


README

Build Status Coverage Status Latest Stable Version Total Downloads Monthly Downloads Daily Downloads Latest Unstable Version License Join the chat at https://gitter.im/phpsgi/funk Made in Taiwan

Funk 是 PHPSGI 的一个实现。它支持使用 PHP SAPI(Apache2 mod_phpphp-fpmfastcgi)实现的 HTTP 服务器,因此您可以将您的应用程序与 Funk 集成并切换到不同的 HTTP 服务器实现。

PHPSGI 和 Funk 致力于提供轻量级的 HTTP 接口和用于 Web 框架的中间件。它与 PSR-7 规范略有不同。PHPSGI 专注于核心数据结构,而不是强制组件实现接口要求。

组件

  • HTTP 服务器(带事件扩展或 socket_select
  • SAPI 支持(php-fpm、Apache2 PHP 处理器服务器)
  • 中间件
  • 中间件组合器
  • 一个简单的多路复用构建器(与 Pux 集成)

环境

// This creates $env array from $_SERVER, $_REQUEST, $_POST, $_GET ... 
$env = Environment::createFromGlobals();

应用程序

$app = function(array & $environment, array $response) {
    return [ 200, [ 'Content-Type' => 'text/plain' ], 'Hello World' ];
};

响应器

SAPI 响应器

您可以将您的应用程序与 SAPI 响应器集成以支持 Apache2 PHP 处理器 / php-fpm / fastcgi。

use Funk\Responder\SAPIResponder;

$fd = fopen('php://output', 'w');
$responder = new SAPIResponder($fd);
$responder->respond([ 200, [ 'Content-Type: text/plain' ], 'Hello World' ]);
fclose($fd);
use Funk\Responder\SAPIResponder;

$env = Environment::createFromGlobals();
$app = function(array & $environment, array $response) {
    return [ 200, [ 'Content-Type' => 'text/plain' ], 'Hello World' ];
};
$fd = fopen('php://output', 'w');
$responder = new SAPIResponder($fd);
$responder->respond($app($env, []));
fclose($fd);

中间件

  • Funk\Middleware\ContentNegotiationMiddleware
  • Funk\Middleware\CORSMiddleware
  • Funk\Middleware\GeocoderMiddleware
  • Funk\Middleware\HeadMiddleware
  • Funk\Middleware\TryCatchMiddleware
  • Funk\Middleware\XHProfMiddleware
  • Funk\Middleware\XHTTPMiddleware
use Funk\Environment;
use Funk\Middleware\TryCacheMiddleware;

$app = function(array $environment, array $response) {
    return [ 200,  ['Content-Type' => 'text/html' ], 'Hello World' ];
};
$middleware = new TryCatchMiddleware($app);


$env = Environment::createFromGlobals();
$response = $middleware($env, [200, [], []]);

贡献

测试 XHProf 中间件

在您的 phpunit.xml 中定义您的 XHPROF_ROOT,您可以复制 phpunit.xml.distphpunit.xml,例如

  <php>
    <env name="XHPROF_ROOT" value="/Users/c9s/src/php/xhprof"/>
  </php>