Php 在服务器上处理AJAX文件处理的最佳过程,这需要很长时间
我有下面显示表单的代码。uploader div部分显示一个gif图像,告诉用户服务器正在处理该文件,处理完该文件后,div“outdata”保存ajax调用的输出。我的文件在服务器上处理需要很长时间,因为它携带了大量信息。假设最后一个文件花了大约12.11分钟 我的问题是,当我上传一个小文件时,它工作得非常好。响应显示在outdata div部分。但是,当文件大小较大时,服务器似乎会输出文件,因为我收到了电子邮件,但浏览器页面并不反映相同的内容。它显示文件仍在处理中,图像仍保留在屏幕上 1) 。浏览器等待ajax发送回responsetext需要多长时间 2). 有更好的方法吗Php 在服务器上处理AJAX文件处理的最佳过程,这需要很长时间,php,ajax,browser,Php,Ajax,Browser,我有下面显示表单的代码。uploader div部分显示一个gif图像,告诉用户服务器正在处理该文件,处理完该文件后,div“outdata”保存ajax调用的输出。我的文件在服务器上处理需要很长时间,因为它携带了大量信息。假设最后一个文件花了大约12.11分钟 我的问题是,当我上传一个小文件时,它工作得非常好。响应显示在outdata div部分。但是,当文件大小较大时,服务器似乎会输出文件,因为我收到了电子邮件,但浏览器页面并不反映相同的内容。它显示文件仍在处理中,图像仍保留在屏幕上 1)
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\"> ";
echo "</form>";
echo "<BR>";
echo "<div id=\"uploader\"></div>";
echo "<BR>";
echo "<div id=\"outdata\">";
echo "</div>";
echo”“;
echo“文件名:”;
回声“
”;
回声“电子邮件:”;
回声“
”;
回声“;
回声“;
回声“
”;
回声“;
回声“
”;
回声“;
回声“;
这是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;
}
函数验证()
{
var file=$(“#file”).val();
如果(!file | | file=''| | file==null)
{
document.getElementById(“outdata”).innerHTML=“请选择一个文件”;
返回false;
}
变量选项={
目标:“#outdata”,
url:'process.php',
数据:{
访问类型:“cre”
},
提交之前:函数(){
$('#uploader').html('');
$('input[type=submit]').attr('disabled',true);
},
成功:函数(){
$('#uploader').html('');
$('input[type=submit]').attr('disabled',false);
}
};
$('#cre')。ajaxSubmit(选项);
返回false;
}
这是您正在经历的服务器端超时,而不是客户端超时。您没有在Ajax调用中实现错误处理程序
,因此它没有看到Apache(及其同类)在30秒或60秒后自动终止请求(可在apache2.conf
中配置)
提高最大请求时间是一个选项,但这是一个坏选项,因为它会阻塞服务器资源。最好异步处理这个问题
/incoming
,cron扫描该文件夹并移动到/processing
,完成后删除)来实现该系统
您的Web服务器及其系统负载将感谢您;) 对不起,我以前从未在服务器上实现过如此繁重的处理。请您再解释一下长轮询,以及如何实现该解决方案。也许一些指南或代码示例会很有帮助。我该怎么做?我对JQuery相当陌生。该文件将上载到我的apache服务器,但它会将其发送到另一台服务器进行处理。如何在处理文件时使用jQuery每10秒发送一次请求,并在生成输出并发送回浏览器后告诉它停止。