protected function  start(
        $interface    = self::INTERFACE_LOCALHOST,
        $port         = self::DEFAULT_PORT,
        $documentRoot = self::DEFAULT_DOCUMENT_ROOT,
        $router       = self::DEFAULT_ROOTER
    ) {
        // The command to execute
        $command = sprintf('php -S %s:%s -t %s%s 2>&1', $interface, $port, $documentRoot, $router);

        // The descriptor specs / pipe definition
        $descriptorspec = array(
            0 => array('pipe', 'r'),         // STDIN  => Pipe
            1 => array('pipe', 'w'),         // STDOUT => Pipe
            2 => array('pipe', 'w', 'a'),    // STDERR => Pipe
        );

        // Start our built-in web server
        $this->server = proc_open(
            $command,
            $descriptorspec,
            $this->pipes,
            $documentRoot
        );

        // Check for running server ...
        if ($this->isRunning($this->server) === false) {
            $this->showError('Failed to start test web server!');

        } else {
            $status = proc_get_status($this->server);
            echo $this->colorize('Server running ', '%g').
                 sprintf('[PID: %s] ', $status['pid']).
                 $this->colorize(
                    sprintf(
                        '%s:%s %s %s',
                        $interface,
                        $port,
                        $documentRoot,
                        $router
                    ).' ',
                    '%y'
                 ).PHP_EOL;
            echo 'Press Ctrl + C to stop ...'.PHP_EOL;
            #file_put_contents(sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'doozr-webserver.pid', $status['pid']);

            // Check if running in a loop
            while ($this->isRunning($this->server) !== false) {
                echo $this->fetchStreams($this->pipes);
            }
        }
    }