【问题标题】:Continue script execute after PHP execPHP exec 后继续执行脚本
【发布时间】:2017-02-27 12:04:14
【问题描述】:

我正在使用 PHPs exec() 函数来执行 .bat 文件,但我遇到了问题。整个站点挂起,等待 exec 命令的响应。我的.bat 文件包含以下内容...mstsc /v:192.168.1.1 IP 地址就是一个示例。

我的代码

我环顾四周并尝试将' > /dev/null &' 添加到我的脚本中,但添加这会阻止脚本一起执行。这是我的完整代码:(这是在我的 laravel 控制器中)

public function startRemoteDesktop(Request $request)
{
    $name = $request->input('name');
    $ip_address = $request->input('ip');
    $path = public_path() . '/files/bat_files/'. $name . '.bat';
    $contents = 'mstsc /v:' . $ip_address;

    if(File::exists($path))
    {
        return 'RDP Connection Currently In Use!';
    }

    File::put($path, $contents);
    exec($path);
    File::delete($path);

    exec($path . ' > /dev/null &'); //Alternative exec command that ive tried
}

注意

如果没有将' > /dev/null &' 添加到我的 exec 代码中,它可以正常工作,但显然它会挂起,这意味着在我关闭 RDP 连接之前我无法使用 PHP 做任何其他事情。

问题

如何从我的 exec 命令(或其他 php 命令)打开 RDP,而不使其暂停所有 PHP 脚本的执行?

【问题讨论】:

  • “添加它会阻止脚本一起执行”是什么意思。在命令末尾添加& 将使您在后台运行命令,执行命令后您期望什么?
  • @HassanAhmed 当远程桌面应用程序启动时我的网页在关闭之前不会执行任何进一步的 PHP 命令,
  • 你是如何使用> /dev/null & 编写命令的? ,您能否使用完整的命令代码更新示例
  • @HassanAhmed Ive 更新了我的问题
  • 请问您的服务器操作系统是什么?

标签: php shell


【解决方案1】:

我发现使用popen($path, 'r'); 可以让PHP 继续执行脚本,而无需等待当前的.bat 文件发送响应

【讨论】:

  • 很好,但请记住删除 .bat 文件和 .bat 文件中的代码。因为如果您不等到它结束,您将删除 php 中的 .bat 文件,并且在下次运行 php 时您不会检测到它是否正在运行。
  • 所以你修好了?如果 popen 为你解决了它,我将删除我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 2020-07-24
  • 2020-03-21
  • 2016-10-03
  • 2017-06-14
相关资源
最近更新 更多