PHP长时间运行的脚本超时

时间:2018-10-19 22:26:08

标签: php ssh2-exec

我正在创建一个页面,该页面在远程服务器上执行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();

任何帮助或指导都深表感谢。

3 个答案:

答案 0 :(得分:0)

您所指的超时很可能是脚本执行时间限制[在共享主机上非常普遍]

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

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

  1. 将请求发送到远程服务器(包括Webhook回调URL)
  2. 让脚本完成任务吧
  3. 让脚本运行webhook来处理结果
  

当然,这也影响到应该如何处理/显示,但是我没有足够的信息来详细说明此答案。

答案 1 :(得分:0)

您宁愿让页面加载,例如运行一个AJAX请求,该请求将等待端口上的答复/侦听,而不是尝试保持连接状态。

因此,在用户方面,它将向php网址运行ajax请求(javascript),然后在成功后显示结果。

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

});

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

答案 2 :(得分:0)

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

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

相关问题