Funk
, (*1)
Funk is an implementation of PHPSGI. It supports HTTP servers implemented with PHP SAPI (Apache2 mod_php
, php-fpm
, fastcgi
), therefore you can integrate your application with Funk and switch to different HTTP server implementation., (*2)
PHPSGI and Funk aims to provide lightweight HTTP interfaces, middlewares for
web frameworks. It's a bit different from the PSR-7 spec. PHPSGI focuses on the core data structure instead of
forcing components to implement the interface requirements., (*3)
Components
- HTTP server (with event extension or
socket_select
)
- SAPI support (php-fpm, apache2 php handler servers)
- Middlewares
- Middleware Compositor
- A Simple Mux Builder (integrated with Pux)
Environment
// This creates $env array from $_SERVER, $_REQUEST, $_POST, $_GET ...
$env = Environment::createFromGlobals();
Application
$app = function(array & $environment, array $response) {
return [ 200, [ 'Content-Type' => 'text/plain' ], 'Hello World' ];
};
Responder
SAPIResponder
You can integrate your application with SAPIResponder to support Apache2 php handler / php-fpm / fastcgi., (*4)
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);
Middleware
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, [], []]);
Contributing
Testing XHProf Middleware
Define your XHPROF_ROOT in your phpunit.xml
, you can copy phpunit.xml.dist
to phpunit.xml
,
for example:, (*5)
<php>
<env name="XHPROF_ROOT" value="/Users/c9s/src/php/xhprof"/>
</php>