如何在后台运行PHP的内置Web服务器?

Hou*_*sni 9 php daemon php-5.4 protractor

我编写了一个在持续集成环境中执行的PHP CLI脚本.它所做的一件事就是运行Protractor测试.

我的计划是让内置的PHP 5.4的内置Web服务器在后台运行:

php -S localhost:9000 -t foo/ bar.php &
Run Code Online (Sandbox Code Playgroud)

然后运行将使用的量角器测试localhost:9000:

protractor ./test/protractor.config.js
Run Code Online (Sandbox Code Playgroud)

但是,PHP的内置Web服务器不作为后台服务运行.我似乎无法找到任何可以让我用PHP做到这一点的东西.

可以这样做吗?如果是这样,怎么样?如果这绝对不可能,我愿意接受其他解决方案.

Dev*_*von 21

你可以像在后台运行任何应用程序一样.

nohup php -S localhost:9000 -t foo/ bar.php > phpd.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

在这里,nohup用于防止终端锁定.然后,您需要重定向stdout(>)和stderr(2>).


Ant*_*ykh 8

还有一种方法可以阻止在后台运行的内置php服务器:

# Run in the background as Devon advised
nohup php -S localhost:9000 -t foo/ bar.php > phpd.log 2>&1 &
# Get last background process PID
PHP_SERVER_PID=$!

# rinning tests and everything...
protractor ./test/protractor.config.js

# Send SIGQUIT to php built-in server running in background to stop it
kill -3 $PHP_SERVER_PID
Run Code Online (Sandbox Code Playgroud)

当您需要在CI等的某个阶段运行测试时,这非常有用.