public static function start(WebServerConfig $config, string $pidFile = null): int
    {
        $pidFile = $pidFile ?? self::getDefaultPidFile();

        if (self::isRunning($pidFile)) {
            throw new RuntimeException(\sprintf('A process is already listening on http://%s.', $config->getAddress()));
        }

        $pid = pcntl_fork();

        if ($pid < 0) {
            throw new RuntimeException('Unable to start the server process.');
        }

        if ($pid > 0) {
            return self::STARTED;
        }

        if (posix_setsid() < 0) {
            throw new RuntimeException('Unable to set the child process as session leader.');
        }

        $process = self::createServerProcess($config);
        $process->disableOutput();
        $process->start();

        if (! $process->isRunning()) {
            throw new RuntimeException('Unable to start the server process.');
        }

        \file_put_contents($pidFile, $config->getAddress());

        // stop the web server when the lock file is removed
        while ($process->isRunning()) {
            if (! \file_exists($pidFile)) {
                $process->stop();
            }

            \sleep(1);
        }

        return self::STOPPED;
    }
public static function start(WebServerConfig $config, string $pidFile = null): int
    {
        $pidFile = $pidFile ?? self::getDefaultPidFile();

        if (self::isRunning($pidFile)) {
            throw new RuntimeException(\sprintf('A process is already listening on http://%s.', $config->getAddress()));
        }

        $pid = pcntl_fork();

        if ($pid < 0) {
            throw new RuntimeException('Unable to start the server process.');
        }

        if ($pid > 0) {
            return self::STARTED;
        }

        if (posix_setsid() < 0) {
            throw new RuntimeException('Unable to set the child process as session leader.');
        }

        $process = self::createServerProcess($config);
        $process->disableOutput();
        $process->start();

        if (! $process->isRunning()) {
            throw new RuntimeException('Unable to start the server process.');
        }

        \file_put_contents($pidFile, $config->getAddress());

        // stop the web server when the lock file is removed
        while ($process->isRunning()) {
            if (! \file_exists($pidFile)) {
                $process->stop();
            }

            \sleep(1);
        }

        return self::STOPPED;
    }
public static function start ( WebServerConfig $ config , string $ pidFile = null ) : int { $ pidFile = $ pidFile ?? self :: getDefaultPidFile ( ) ; if ( self :: isRunning ( $ pidFile ) ) { throw new RuntimeException ( \ sprintf ( 'A process is already listening on http://%s.' , $ config -> getAddress ( ) ) ) ; } $ pid = pcntl_fork ( ) ; if ( $ pid < 0 ) { throw new RuntimeException ( 'Unable to start the server process.' ) ; } if ( $ pid > 0 ) { return self :: STARTED ; } if ( posix_setsid ( ) < 0 ) { throw new RuntimeException ( 'Unable to set the child process as session leader.' ) ; } $ process = self :: createServerProcess ( $ config ) ; $ process -> disableOutput ( ) ; $ process -> start ( ) ; if ( ! $ process -> isRunning ( ) ) { throw new RuntimeException ( 'Unable to start the server process.' ) ; } \ file_put_contents ( $ pidFile , $ config -> getAddress ( ) ) ; // stop the web server when the lock file is removed while ( $ process -> isRunning ( ) ) { if ( ! \ file_exists ( $ pidFile ) ) { $ process -> stop ( ) ; } \ sleep ( 1 ) ; } return self :: STOPPED ; }
Starts a local web server in the background.

@param \Viserio\Component\WebServer\WebServerConfig $config
@param null|string                                  $pidFile

@return int
Starts a local web server in the background .