How to start and stop PHP dev server with exec(

2020-05-01 23:46发布

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.

标签: php ubuntu
2条回答
在下西门庆
2楼-- · 2020-05-02 00:37

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.

查看更多
我命由我不由天
3楼-- · 2020-05-02 00:44

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);
    }
}
查看更多
登录 后发表回答