如何使用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