2012-10-30 85 views
0

如何使用exec()函数启动和停止PHP dev服务器?我需要这样做才能自动化我的BDD测试。如何使用exec()启动和停止PHP dev服务器

这会停止我的脚本的执行:

echo exec('php -S localhost:8000'); 

所以我需要一种方法来开始从PHP服务器,并能够继续执行我的测试。然后我也需要一种方法来阻止它从PHP。

+0

我有一个函数的名字,但:自杀() –

+0

这是因为EXEC是一个阻塞调用。你可以使用像'proc_open':http://php.net/proc_open或'popen':http://php.net/popen – igorw

回答

1

这工作:

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

这是因为你停止了Apache。它处理停止命令,但在此时服务器已停止,因此无法处理另一个命令,因为服务器不在此处解析它。编写一个shell脚本,停止并重新启动Apache,然后从您的PHP代码中调用该脚本。即使Apache停止,shell脚本也应该继续执行。

我假设你的服务器是Apache。

+0

没有。与apache完全没有关系。他正在使用PHP 5.4内置的开发Web服务器。但是,您所说的背后的基本建议 - 在PHP之外的批处理脚本中启动和停止服务器 - 可能是正确的解决方案。 – SDC

+3

没有,这与Apache无关,我正在谈论PHP 5.4中引入的内部开发Web服务器。检查我的答案,我已经明白了这一点。 –