我有一个php脚本来处理用户上传的XML文件。文件很大(如50MB)时可能需要几分钟。在小文件上,它的工作方式如预期。但是我遇到了一个大问题。
所以,我的文件看起来像:
if(file_exist($filename)) {
return array(false, "File with this name already exist");
} else {
/*
Processing of file
*/
return array(true, "")
}
当用户使用javascript上传程序上传文件时,我向此脚本发出ajax请求。事实是,对于大文件,它执行两次。它第一次进入“处理”部分,第二次返回错误,该文件名已经存在(实际上是真的)。
我在脚本的开头添加了日志记录功能
$logger = Zend_Registry::get('logger');
$logger->log('assign file function called', 7);
我看到该脚本已被调用两次。
但是在Firebug中,我只看到脚本有1个ajax请求。在Apache access.log中,我只看到一个请求。 Apache error.log为空。
知道它可以是什么吗?可能是长时间执行脚本的任何配置?
用于调用脚本的UPD Javascript
$("#save_file_btn").click(function(){
var filename = $("input#selected_file").val();
if(!filename.length) {
customAlert("Choose file at first");
return false;
}
$.ajax({
url: '/otms/publisher/assign-file-to-publisher',
beforeSend: function(xhr){
$("#add_form").html('<div class="loader"></div>');
},
dataType: 'json',
data: {filename: filename},
success: function(data) {
if(data.success) {
//Process added ONIX file
processOnixFile(data.fileId, function(){
getFileList();
$("#add_form").html('<div class="text-center">File has been successfully uploaded</div>');
setTimeout('$("#add_file_modal").modal("hide")', 2500);
});
} else {
var output = '';
$.each(data.error, function(index,value){
output += '<div class="bold">'+value.title+'</div>';
output += '<ul>';
$.each(value.errorList, function(i, errorMsg){
output += '<li>'+errorMsg+'</li>';
});
output += '</ul>';
});
$("#add_form").html('<div class="red">'+output+'</div>');
}
}
});
});
我检查过,这是唯一一个请求脚本'assign-file-to-publisher'(我有问题)的地方。
UPD 2.
我发现脚本只在Firefox浏览器中调用了两次。在Safari请求中不返回任何内容。在Chrome中,它会返回以下状态:
(failed) net::ERR_EMPTY_RESPONSE
我仍然没有在应用程序日志或apache日志中看到任何错误消息。 正如我所提到的,脚本适用于大文件,处理它可能需要几分钟。
在我的配置中:
max_execution_time = 300
Chrome浏览器在1:40时返回错误。