如何在PHP中运行shell_exec()除非被杀死或停止,否则不会停止?

时间:2018-09-21 07:18:00

标签: php windows laravel

我正在构建仅用于离线模式的Laravel应用程序(仅适用于Windows OS)。有一个客户端和服务器设置。

在服务器仪表板中,有一个“打开”服务器按钮,以允许客户端连接到服务器。参考(how can i access my laravel app from another pc?

我的代码不起作用。

// Route
Route::post('server-on', 'ServerController@powerOn')->name('server-on'); 

// ServerController
public function powerOn(){
    $ip = getHostByName(getHostName()); // IPv4 Address (192.168.254.120)
    $command = 'php artisan serve --host ' . $ip . '  --port 1807 2>&1 &';
    shell_exec($command);
}

之所以这样,是因为假定最终用户不是技术人员。我不希望他们打开cmd并输入命令(这可能是我的最后选择)。

1 个答案:

答案 0 :(得分:2)

shell_exec()与它无关。如果您的应用程序在Linux上运行,则要使已执行的程序在后台运行,而调用立即返回,则必须使用助手,例如nohup(并删除尾随的&):

$command = "nohup php artisan serve --host {$ip} --port 1807 2>&1";
...

编辑

  

我正在使用Windows。

如果是这样,首先,由于您尝试重定向I / O流(也由于使用了$command),您以前的&在Windows平台上无效。 尽管如此,要在Windows上在后台运行内容,您还需要一个辅助程序,例如STARTdocs here)。

请参阅有关超级用户的相关问题:How can I execute a Windows command line in background?