Richard Knop
Richard Knop

Reputation: 83745

How to start and stop PHP dev server with exec()

How can I start and stop PHP dev server with exec() function? I need to do this in order to automate my BDD tests.

This stops execution of my script:

echo exec('php -S localhost:8000');

So I need a way to start the server from PHP and be able to continue executing my test. And then I also need a way to stop it from PHP.

Upvotes: 0

Views: 2025

Answers (2)

Richard Knop
Richard Knop

Reputation: 83745

This works:

private function _startDevelopmentServer($pidfile)
{
    $cmd = 'cd ../../public && php -S 127.0.0.1:8027 index.php';
    $outputfile = '/dev/null';
    shell_exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
    sleep(1);
}

private function _killDevelopmentServer($pidfile)
{
    if (file_exists($pidfile)) {
        $pids = file($pidfile);
        foreach ($pids as $pid) {
            shell_exec('kill -9 ' . $pid);
        }
        unlink($pidfile);
    }
}

Upvotes: 1

Abhishek Saha
Abhishek Saha

Reputation: 2564

It's because you're stopping Apache. It processes the stop command, but at that point of time the server has stopped, so there's no way it can process another command because the server is not there to parse it. Write a shell script that stops and restarts Apache, then call that from your PHP code. The shell script should continue executing even when Apache has stopped.

I am assuming your server is Apache.

Upvotes: 0

Related Questions