Я использую ajax файл загрузки из этого ответа Отправка multipart / formdata с jQuery. ajax и JavaScript код выглядит следующим образом:
function addAiFile(order_id) {
var data = new FormData();
data.append('order_id', order_id);
jQuery.each(jQuery('.ai-file_upload')[0].files, function(i, file) {
data.append('file-'+i, file);
});
var url='<?php echo $addAiFile; ?>';
url=url.replace(/amp;/g, '');
console.log(...data)
jQuery.ajax({
url: url,
data: data,
cache: false,
processData: false,
method: 'POST',
type: 'POST', // For jQuery < 1.9
success: function(answer){
$('#ai-modal .modal-body').html(answer);
}
});
}
На FrontEnd, когда я запускаю эту функцию, я получаю правильный результат журнала. Но в BackEnd мой массив $ _FILES пуст. Это происходит только для некоторых файлов, и я не могу найти, что вызывает это.
Вот мой код:
public function addAiFile(){
$target_dir = "./";
$target_file = $target_dir . basename($_FILES["file-0"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
echo $target_file;
print_r($_FILES);
echo "<br>" . $_SERVER['CONTENT_LENGTH']/1000000 ;
echo "<br>" . ini_get('post_max_size');
echo "<br>" . ini_get('upload_max_filesize');
print_r(pathinfo($target_file));
die();
}
Если есть ошибка, php печатает это:
. / - 0.Array ()
34.860443
80M
80M Array ([dirname] => ./ [basename] => - 0. [расширение] => [имя файла] => -0)
Если в файле нет ошибок, я получаю
. / Oaid. png Array ([file-0] => Array ([name] => oaid.png [type] => image / png [tmp_name] => / tmp / php57HOx7 [error] => 0 [size] => 16554) )
0.016836
80M
80M Array ([dirname] => ./ [basename] => oaid.png [extension] => png [filename] => oaid)
Я бы выложил здесь файл в качестве примера, но это 30 МБ. Также важно отметить, что это происходит только для некоторых файлов. Как я могу это исправить?