Я использую сценарий для загрузки нескольких изображений в каталог, который отлично работает, если будет загружено только одно изображение.
Если я хочу загрузить два изображения или более и иметь расширение, которое не принято, сценарий будет загружать тот, у которого есть расширение, которое разрешено загружать, и выводит сообщение об ошибке для того, кто не принят, но загрузка происходит , это моя первая проблема.
Вторая проблема: в случае сообщения об ошибке я хотел бы отобразить сообщение, в котором сказано, какое из изображений будет запрещено. Я не знаю, как получить этот, который имеет непринятое окончание в переменную, которую я могу повторить в сообщении об ошибке.
Вот код, который я использую:
<?php if(!empty($_FILES['image']['tmp_name'])){ $allowed_extension = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif'); foreach($_FILES['image']['name'] as $key => $array_value){ $file_name = $_FILES['image']['name'][$key]; $file_size = $_FILES['image']['size'][$key]; $file_tmp = $_FILES['image']['tmp_name'][$key]; $file_extension = strtolower(end(explode('.', $file_name))); if (in_array($file_extension, $allowed_extension) === false){ $errors[] = 'its an unaccepted format in picture $variable_that_count'; continue; } if ($file_size > 2097152){ $errors[] = 'reached maxsize of 2MB per file in picture $variable_that_count'; } if (count($errors) == 0){ $path = "a/b/c/"; $uploadfile = $path."/".basename($_FILES['image']['name'][$key]); if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $uploadfile)){ echo "success."; } } } } ?>
Надеюсь, будет ясно, к чему я хотел бы приблизиться. Если есть кто-то, кто мог бы помочь, я действительно был бы признателен. Большое спасибо.
Это сработает для вас
Пример HTML
<form action="" enctype="multipart/form-data" method="post"> <p> Please specify a file, or a set of files:<br> <input type="file" name="image[]" size="40"> </p> <p> Please specify a file, or a set of files:<br> <input type="file" name="image[]" size="40"> </p> <p> Please specify a file, or a set of files:<br> <input type="file" name="image[]" size="40"> </p> <p> Please specify a file, or a set of files:<br> <input type="file" name="image[]" size="40"> </p> <p> Please specify a file, or a set of files:<br> <input type="file" name="image[]" size="40"> </p> <div> <input type="submit" value="Send"> </div> </form>
PHP-код
$allowedExtention = array ( 'jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif' ); $errors = array (); $output = array (); if (! empty ( $_FILES ['image'] ['tmp_name'] )) { foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) { $fileName = $_FILES ['image'] ['name'] [$key]; $fileSize = $_FILES ['image'] ['size'] [$key]; $fileTemp = $_FILES ['image'] ['tmp_name'] [$key]; $fileExtention = pathinfo ( $fileName, PATHINFO_EXTENSION ); $fileExtention = strtolower ( $fileExtention ); if (! in_array ( $fileExtention, $allowedExtention )) { $errors [$fileName] [] = "File format $fileExtention not accepted for $fileName"; continue; } if ($fileSize > 2097152) { $errors [$fileName] [] = 'reached maxsize of 2MB per file in picture $variable_that_count'; continue ; } if (count ( $errors ) == 0) { $path = "temp"; $prifix = basename ( $fileName, "." . $fileExtention ); var_dump ( $prifix ); $uploadfile = $path . "/" . $fileName; $x = 0; while ( file_exists ( $uploadfile ) ) { $x ++; $uploadfile = "{$path}/{$prifix}-{$x}.{$fileExtention}"; } if (move_uploaded_file ( $fileTemp, $uploadfile )) { $fileName = basename ( $uploadfile ); $output [$fileName] = "OK"; } else { $output [$fileName] = "ERORR"; $errors [$fileName] [] = "Can Move uploaded file to destination"; } } } } var_dump ( $errors ); var_dump ( $output );
Образец вывода
string '79534296' (length=8) string '89773706' (length=8) array 'download (1)' => array 0 => string 'File format not accepted for download (1)' (length=42) 'brief.docx' => array 0 => string 'File format docx not accepted for brief.docx' (length=44) '' => array 0 => string 'File format not accepted for ' (length=30) array '79534296-2.jpg' => string 'OK' (length=2) '89773706-2.jpg' => string 'OK' (length=2)
Редактировать 1
если все файлы должны быть действительными, есть два способа добиться этого
A. Начало Сначала проверьте все файлы;
foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) { if(! in_array (pathinfo ($_FILES ['image'] ['name'] [$key], PATHINFO_EXTENSION ), $allowedExtention )) { die("Die! Die! Die") ; } } foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) { // Upload Script here }
B. Удалите все файлы, если обнаружена ошибка
foreach ( $_FILES ['image'] ['name'] as $key => $array_value ) { // Upload Script here } // Remove All Files if(count($errors) > 0) { foreach ($output as $key => $value) { @unlink($path . "/" . $key); } die("Die! die! die!") ; }
надеюсь, это поможет