php - 如何在 php 中运行除非被杀死或停止才会停止的 shell_exec()?

标签 php windows laravel

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

在服务器仪表板中,有一个按钮可以“打开”服务器以允许客户端连接到服务器。引用 ( 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 并输入命令(这可能是我最后的选择)。

最佳答案

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

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

编辑

I'm using Windows.

如果是这样,首先,您之前的 $command 由于您尝试重定向 i/o 流的方式(以及因为使用 &). 尽管如此,要在 Windows 的后台运行内容,您还需要一个助手,例如 START ( docs here )。

查看有关 super 用户的相关问题:How can I execute a Windows command line in background? .

关于php - 如何在 php 中运行除非被杀死或停止才会停止的 shell_exec()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52438520/

相关文章:

php - 使用php访问多个网页的代码

c# - Visual Studio Code Dotnet Core C# : "The type or namespace name ' System' could not be found", 错误但构建成功

windows - 带有通用应用程序的系统托盘/任务栏图标/通知图标

php - Laravel 5 无需密码登录

php - 密码重置阻止访问 phpmyadmin

php - 用jQuery替换OnPage Text,然后提示文件下载

php - 无法使用自己的实现覆盖 Laravel Spark 身份验证

php - OctoberCMS 和 MySQL 的用户记录所有权

php - 实时服务器中的Mysql Select查询错误: Errcode: 28 - No space left on device

windows - IOCP 接收和发送