A simple HTTP server for PHP
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
tests
.gitignore
.travis.yml
LICENSE
README.md
composer.json
example.php
httpkernel_example.php
phpunit.xml.dist

README.md

A simple HTTP server for PHP

HttpServer is a simple HTTP server powerd REACT.

Build Status

Installation

Use Composer to install Yosyfmony HttpServer package:

Add the following to your composer.json and run composer update.

"require": {
    "yosymfony/httpserver": "1.3.x"
}

More information about the package on Packagist.

How to use?

It's simple. The RequestHandler need a function for managing each connection:

$requestHandler = new RequestHandler(function($request) {
    return 'Hi Yo! Symfony';
});

$server = new HttpServer($requestHandler);
$server->start();

// go to http://localhost:8080

How to configure the RequestHandler?

You can configure port and host for listening requests:

$requestHandler = new RequestHandler( function($request) {
    return 'Hi Yo! Symfony';
});

$requestHandler->listen(8081, '127.0.0.1');

The defatult values:

  • port: 8080
  • host: 0.0.0.0

The handler function

The handler function receives a unique parameter to describe the resquest. By default, this argument is a object type React\Http\Request. If you want to receive a Symfony HttpFoundation Request you need active this mode:

$requestHandler = new RequestHandler( function($request) {
    return 'Hi Yo! Symfony';
});

$requestHandler
    ->listen(8081, '127.0.0.1')
    ->enableHttpFoundationRequest(); // $requestHandler uses fluent interface

In case you want to use a HttpKernelInterface like Symfony, Silex or Laravel, simple use the HttpKernelRequestHandler handler like this:

// Create our kernel.
$httpKernel = new ExampleHttpKernel();
$options = array(
    'host' => '127.0.0.1',
    'port' => 8081,
);

// Wrap it with the RequestHandler.
$handler = new \Yosymfony\HttpServer\HttpKernelRequestHandler($httpKernel, $options);

// Start the server using the RequestHandler.
$server = new \Yosymfony\HttpServer\HttpServer($handler);
$server->start();

The response

The most simple use-case is return a string. By default the Content-Type value is text/plain at the response header:

$requestHandler = new RequestHandler( function($request) {
    return 'Hi Yo! Symfony';
});

If you want customize the status code and the response header you can return a array like this:

requestHandler = new RequestHandler( function($request) {
    return [
        'content' => '<?xml version="1.0" encoding="UTF-8"?><root>Hi Yo! Symfony</root>',
        'headers' => ['Content-Type' => 'text/xml'],
        'status_code' => 200
    ];
});

The best way to make a response is using Response from Symfony HttpFoundation:

use Symfony\Component\HttpFoundation\Response;

requestHandler = new RequestHandler( function($request) {
    return new Response(
        'Hi Yo! Symfony',
        Response::HTTP_OK,
        array('content-type' => 'text/html')
    );
});

Unit tests

You can run the unit tests with the following command:

$ cd your-path/vendor/yosymfony/httpserver
$ composer.phar install --dev
$ phpunit