gpt4 book ai didi

php - 在需要很长时间的服务器上处理 AJAX 文件的最佳过程

转载 作者:行者123 更新时间:2023-12-04 04:54:40 24 4
gpt4 key购买 nike

我有以下显示表单的代码。上传器 div 部分显示一个 gif 图像,告诉用户该文件正在由服务器处理,一旦文件被处理,div 'outdata' 将保存 ajax 调用的输出。我的文件需要很长时间在服务器上处理,因为它包含了很多信息。假设最后一个文件花费了大约 12.11 分钟。

我的问题是,当我上传一个小文件时,它工作得很好。响应显示在 outdata div 部分。但是,当文件大小较大时,服务器似乎输出文件,因为我通过电子邮件将其发送给我,但是浏览器页面并没有反射(reflect)相同的内容。它显示文件仍在处理中,图像保留在屏幕上。

1)。浏览器等待 ajax 返回响应文本需要多长时间
2)。有没有更好的方法来做到这一点?

echo "<form name=\"cre\" id=\"cre\" action=\"#\" method=\"post\" enctype=\"multipart/form-data\">";
echo "<label for=\"file\">Filename: </label>";
echo "<input type=\"file\" name=\"file\" id=\"file\" ><br><br>";
echo "<label for=\"email\">Email: </label>";
echo "<input id=\"email\" type=\"text\" name=\"email\" maxlength=\"40\"><br><br>";
echo "<input type=\"submit\" onclick=\"return validate();\" id=\"submit\" value=\"Submit\">&nbsp;&nbsp;";
echo "</form>";
echo "<BR>";
echo "<div id=\"uploader\"></div>";
echo "<BR>";
echo "<div id=\"outdata\">";
echo "</div>";

这是 ajax 调用
function validate() 
{
var file = $("#file").val();
if(!file || file == '' || file == null)
{
document.getElementById("outdata").innerHTML="Please select a file";
return false;
}
var options = {
target: '#outdata',
url:'process.php',
data:{
accesstype:"cre"
},
beforeSubmit: function() {
$('#uploader').html('<img src="/images/ajax-loader.gif" />');
$('input[type=submit]').attr('disabled', true);
},
success: function() {

$('#uploader').html('');
$('input[type=submit]').attr('disabled', false);
}
};
$('#cre').ajaxSubmit(options);
return false;
}

最佳答案

这是您遇到的服务器端超时,而不是客户端。您尚未在 Ajax 调用中实现 error 处理程序,因此它看不到 Apache(及其同类)在 30 或 60 秒(可在 apache2.conf 中配置)后自动终止请求。

增加最大请求时间是一种选择,但很糟糕,因为它会阻塞服务器资源。最好异步处理这个。

  • 成功上传文件后,向 Ajax 调用返回成功代码。这也允许您向最终用户提供有用的反馈,说他现在可以去喝杯咖啡并等待处理。
  • 生成后台作业,或让 cron 获取队列中的文件,并开始处理它。
  • 使用长轮询机制(或 websockets,如果你在滚动)打开与服务器的长期关系,请求有关进程的更新。这可以是“我是/未完成”,甚至是过程的百分位更新。当您开始在后台而不是内联做事时,一切皆有可能。

  • 您可以使用数据库(上传时插入作业,让该表中的处理作业更新状态)或使用普通文件夹队列系统(上传到 /incoming ,cron 扫描该文件夹并移动到 /processing 并删除完成后)。

    你的网络服务器和他的系统负载会感谢你;)

    关于php - 在需要很长时间的服务器上处理 AJAX 文件的最佳过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930028/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com