У меня есть вход, который принимает несколько файлов:
<input id="propertyImages" type="file" name="submission_img[]" multiple accept=".jpg, .jpeg, .png, .gif"/>
Затем я POST эти данные в файл PHP через JS / Ajax:
//Compiling the data which will be POSTed using AJAX. Note that the input above with id of propertyImages is not part of the form with id accommodationForm and is therefore appended to the formData.
var form = $("#accommodationForm")[0];
var formData = new FormData(form);
var propertyImages = document.getElementById("propertyImages");
for(var i=0; i<propertyImages.files.length; i++){
formData.append('propImages[]', propertyImages.files[i]);
}
//Printing to console the formData entries to confirm the formData data:
for (var d of formData.entries()) {
console.log(d);
}
//The partial code for the ajax call:
$.ajax({
url: "includes/handlers/ajax_submit_accommodation.php",
method: "POST",
data: formData,
...
PHP-код, к которомуданные размещены:
$errorstatus = 0; //Used as an error flag
$maximagesize = 10485760; // Max file size allowed = 10MB
$acceptableimage = array( //The allowed mime types
'image/jpeg',
'image/jpg',
'image/png',
);
$submission_images_array = array();
$output = ""; //Used for debugging purposes
for($x=0; $x<30; $x++){ //30 is the upper limit for the amount of images POSTed
if($_FILES['propImages']['size'][$x] != 0){
if( $_FILES['propImages']['size'][$x] >= $maximagesize || (!in_array($_FILES['propImages']['type'][$x], $acceptableimage))) {
$errorstatus = 1;
} else {
$submission_img = $_FILES['propImages']['name'][$x];
$submission_img = pathinfo($submission_img, PATHINFO_FILENAME);
$submission_img = $submission_img.'-'.$user_id.'-'.rand().'.jpeg';
array_push($submission_images_array, $submission_img);
$submission_img_tmp = $_FILES['propImages']['tmp_name'][$x];
compressImage($submission_img_tmp, '../../submitted_media/accommodation/'.$submission_img, 50);
$output .= "$x:"." ".$submission_img."\n";
}
} else {
$output .= "$x: Empty image\n";
$submission_img = "";
array_push($submission_images_array, $submission_img);
}
}
file_put_contents('../../filenames.txt', $output ); // DEBUG
Я хочу, чтобы пользователь прикрепил максимум 30 изображений. Я удостоверился, что передний и задний конец проверяют это. У меня проблема в том, что я могу прикрепить 30 изображений - отладка подтверждает это с помощью печати на консоли formData
... т.е. formData
содержит все данные изображения. Однако, когда я смотрю на filenames.txt
, который я вошел в PHP, он содержит только первые 20 имен файлов, а последние 10 записей записываются как «Пустое изображение» (как я указывал в коде, если размер изображения равен 0).
Примечания:
Я убедился (используя другой код JS), что propertyImages.files.length
в цикле for
не может быть больше 30 и что приЯ прилагаю 30 изображений, длина которых действительно равна 30.
Я убедился, что max_input_vars
в файле PHP.ini не является проблемой.
Размеры изображений последних 10 файлов НЕ равны 0. Это было подтверждено регистрацией formData