我正在创建一个页面,该页面在远程服务器上执行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();
任何帮助或指导都深表感谢。
答案 0 :(得分:0)
您所指的超时很可能是脚本执行时间限制[在共享主机上非常普遍]
可悲的是,您对此无能为力。
但是您可以做的是[如果您可以控制从中调用脚本的服务器]
当然,这也影响到应该如何处理/显示,但是我没有足够的信息来详细说明此答案。
答案 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访问权限,则将任务的调用和结果的收集分为两个单独的步骤(请参见上面的链接及其链接的讨论,以获取有关如何操作的一些提示)调用)。在第一页上放置定时重定向到第二页。