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.
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.
- 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)
// 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' ];
};You can integrate your application with SAPIResponder to support Apache2 php handler / 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\ContentNegotiationMiddlewareFunk\Middleware\CORSMiddlewareFunk\Middleware\GeocoderMiddlewareFunk\Middleware\HeadMiddlewareFunk\Middleware\TryCatchMiddlewareFunk\Middleware\XHProfMiddlewareFunk\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, [], []]);Define your XHPROF_ROOT in your phpunit.xml, you can copy phpunit.xml.dist to phpunit.xml,
for example:
<php>
<env name="XHPROF_ROOT" value="/Users/c9s/src/php/xhprof"/>
</php>