首页 > 解决方案 > 如何在 php 中运行 shell_exec(),除非被杀死或停止,否则不会停止?

问题描述

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

在服务器仪表板中,有一个按钮可以“打开”服务器以允许客户端连接到服务器。参考(如何从另一台电脑访问我的 laravel 应用程序?

我的代码不起作用。

// 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 并输入命令(这可能是我最后的手段)。

标签: phpwindowslaravel

解决方案


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

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

编辑

我正在使用 Windows。

$command如果是这样,首先,由于您尝试重定向 i/o 流的方式(以及使用) ,您的前者在 Windows 平台上无效&。尽管如此,要在 Windows 后台运行东西,您还需要一个帮助程序,例如START此处的文档)。

请参阅有关超级用户的相关问题:如何在后台执行 Windows 命令行?.


推荐阅读