【问题标题】:Force stop a php page from loading强制停止加载 php 页面
【发布时间】:2018-01-05 09:21:04
【问题描述】:

我是第一次使用 HTML 和 PHP。我有一个 php 页面,它有一个调用 shell 脚本的提交按钮。这个 shell 脚本执行一些需要大约 10-15 分钟的任务。 单击提交按钮时,会打开一个新页面,该页面会立即打印一些信息,然后在后台运行该脚本。

但是,浏览器选项卡显示的页面仍在加载中。无论如何我可以停止加载栏。 php 代码 sn-p 看起来像这样:

if($_POST['action'] == 'Test') {
    $result = liveExecuteCommand("/usr/bin/test.sh &");
}

【问题讨论】:

  • 在页面加载后立即调用脚本,或者您可以使用 die() 函数停止该页面
  • 没找到你吗?你能详细说明一下吗?
  • liveExecuteCommand 应该做什么?
  • $proc = popen("$cmd 2>&1 ;", 'r'); $live_output = ""; $complete_output = ""; while (!feof($proc)) { $live_output = fread($proc, 4096); $complete_output = $complete_output 。 $live_output;回声“$live_output”; @flush(); }

标签: php html


【解决方案1】:

使用 exec 命令并将输出重定向到 null:

if ($_POST['action'] == 'Test') {
    exec("/usr/bin/test.sh > /dev/null &");
}

这不应等待进程完成。

【讨论】:

  • 我需要包含一些东西才能使用 exec 命令吗?如果我直接使用它似乎会抛出一些错误
  • @VedangGutgutia no - 执行是并内置功能。如果你在某些共享主机上运行它,它可能会被阻止(但在这种情况下,其他人也不应该工作)
  • @Philipp 它似乎对我不起作用。我还有其他方法可以解决这个问题吗?
  • 如果 SELinux 在您的机器上运行,您应该将其置于许可模式。或者想办法让php用SELinux执行命令。
【解决方案2】:

即使脚本使用die()exit() 终止,也会执行析构函数。

更多详情:
exit
how to stop

【讨论】:

  • 看来,解释器卡在liveExecuteCommand。在它前面放一个出口,根本不会执行脚本,把它放在后面不会让它变得更好
  • 是的;)
猜你喜欢
  • 1970-01-01
  • 2018-03-03
  • 2023-04-10
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
相关资源
最近更新 更多