How to start and stop PHP dev server with exec(

2020-05-02 00:13发布

问题:

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.

回答1:

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);
    }
}


回答2:

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.



标签: php ubuntu