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();
非常感谢任何帮助或指导。
您提到的超时很可能是脚本执行时间限制[在共享主机上很常见]
可悲的是,您对此无能为力。
但是您可以做的是 [如果您可以控制调用脚本的服务器]
- 向远程服务器发送请求[包括一个 webhook 回调 url]
- 让脚本完成这件事
- 让脚本 运行 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 以获取有关如何进行调用的一些提示)。在第一页上放置一个定时重定向到第二页。
我正在创建一个页面,该页面在远程服务器上执行 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();
非常感谢任何帮助或指导。
您提到的超时很可能是脚本执行时间限制[在共享主机上很常见]
可悲的是,您对此无能为力。
但是您可以做的是 [如果您可以控制调用脚本的服务器]
- 向远程服务器发送请求[包括一个 webhook 回调 url]
- 让脚本完成这件事
- 让脚本 运行 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 以获取有关如何进行调用的一些提示)。在第一页上放置一个定时重定向到第二页。