doudongfu8006
doudongfu8006
2012-10-30 09:44

如何使用exec()启动和停止PHP dev服务器

已采纳

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.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • doutan5798 doutan5798 9年前

    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);
        }
    }
    
    点赞 评论 复制链接分享
  • duanhuizhe6767 duanhuizhe6767 9年前

    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.

    点赞 评论 复制链接分享