PHP 长 运行 脚本超时

PHP Long Running Script timeout

我正在创建一个页面,该页面在远程服务器上执行 shell 脚本以扫描网站并在屏幕上输出结果。输出有时可能需要一段时间才能获得,具体取决于所扫描站点的大小。目前该脚本可以正常工作并且可以正常工作,但问题是当我扫描较大的网站时它会停止运行,并且在托管该网站的平台上有 30 秒的超时时间,我无法更改。

我想知道保持连接的最佳方式是什么,无论是将点发送到屏幕还是其他东西只是为了保持连接。

这是我的脚本

$ssh = new Net_SSH2('hostname');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

$ansi = new File_ANSI();
$ssh->enablePTY();
$ssh->setTimeout(60);
$ssh->exec("./test.sh | awk 'NR >= 16 {print}'\n");
$ansi->appendString($ssh->read());
echo $ansi->getHistory();

非常感谢任何帮助或指导。

您提到的超时很可能是脚本执行时间限制[在共享主机上很常见]

可悲的是,您对此无能为力。

但是您可以做的是 [如果您可以控制调用脚本的服务器]

  1. 向远程服务器发送请求[包括一个 webhook 回调 url]
  2. 让脚本完成这件事
  3. 让脚本 运行 webhook 来处理结果

offcourse this also has implications on how the processing/displaying should be handled but i do not have enough information to go into specifics in this answer.

您应该让页面加载,例如运行 AJAX 请求将等待端口上的 reply/listen 而不是尝试保持连接。

所以在用户方面,它会 运行 向 php url 发送 ajax 请求(javascript),然后显示成功结果。

$.ajax({
  url: "/thescript.php":,
  type: "POST",
  datatype: "POST"
  success: function(){
    //do display stuff
  }

});

可能会添加一个合理的超时时间。

请勿尝试在网页中执行 long running scripts

如果您需要来自另一个系统的响应并且您具有 SSH 访问权限,则将任务的调用和结果的收集分成 2 个单独的步骤(参见上面的 link 和讨论 links 以获取有关如何进行调用的一些提示)。在第一页上放置一个定时重定向到第二页。