如何使用exec()函数启动和停止PHP dev服务器?我需要这样做才能自动化我的BDD测试。如何使用exec()启动和停止PHP dev服务器
这会停止我的脚本的执行:
echo exec('php -S localhost:8000');
所以我需要一种方法来开始从PHP服务器,并能够继续执行我的测试。然后我也需要一种方法来阻止它从PHP。
如何使用exec()函数启动和停止PHP dev服务器?我需要这样做才能自动化我的BDD测试。如何使用exec()启动和停止PHP dev服务器
这会停止我的脚本的执行:
echo exec('php -S localhost:8000');
所以我需要一种方法来开始从PHP服务器,并能够继续执行我的测试。然后我也需要一种方法来阻止它从PHP。
这工作:
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);
}
}
这是因为你停止了Apache。它处理停止命令,但在此时服务器已停止,因此无法处理另一个命令,因为服务器不在此处解析它。编写一个shell脚本,停止并重新启动Apache,然后从您的PHP代码中调用该脚本。即使Apache停止,shell脚本也应该继续执行。
我假设你的服务器是Apache。
没有。与apache完全没有关系。他正在使用PHP 5.4内置的开发Web服务器。但是,您所说的背后的基本建议 - 在PHP之外的批处理脚本中启动和停止服务器 - 可能是正确的解决方案。 – SDC
没有,这与Apache无关,我正在谈论PHP 5.4中引入的内部开发Web服务器。检查我的答案,我已经明白了这一点。 –
我有一个函数的名字,但:自杀() –
这是因为EXEC是一个阻塞调用。你可以使用像'proc_open':http://php.net/proc_open或'popen':http://php.net/popen – igorw