Я пытаюсь загрузить несколько фотографий одновременно, но, похоже, с моим скриптом возникает ошибка. Если, например, я выбираю 10 разных фотографий, одно изображение загружается 10 раз (игнорируя остальные 9 изображений). Это сценарий:
for ($i = 0; $i < count($_FILES["_photo"]["name"]); $i++) {
if (!empty($_FILES['_photo']['name'][$i])) {
if (($_FILES['_photo']['type'][$i] == 'image/jpeg') OR ($_FILES['_photo']['type'][$i] == 'image/png') OR ($_FILES['_photo']['type'][$i] =='image/gif')) {
$upload_folder = "./profile_pix/";
$pic_name = time() . ".jpg";
$pic_path = $upload_folder . $pic_name;
require_once "include/resize.php";
if (move_uploaded_file($_FILES['_photo']['tmp_name'][$i], $pic_path)) {
$image = new Resize($pic_path);
$image->resizeImage(180, 180, 'crop');
$image->saveImage($pic_path);
}
$sql2 = "INSERT INTO photos
(photo, member_id, photo_id)
VALUES
('$pic_name', :session_id, :offer_count)";
$db -> query($sql2, array('session_id' => $_SESSION['id'], 'offer_count' => $offer_count));
}else {
header ("Location: submitoffer.php?err=03");
}
}
HTML:
<input type="file" id="_photo" name="_photo[]" multiple="multiple">
Загрузка файлов работает нормально.
Линия
$pic_name = time() . ".jpg";
всегда оценивает одно и то же значение.
Как логически все файлы загружаются в одно и time()
же time()
.
Вместо этого используйте:
$pic_name = $i . '_'. time() . ".jpg";
Добавить уникальность.
uniqid()
качестве замены для time (), но это все еще не говорит, почему uniqid()
та же фотография загружается 10 раз;)
100% работающий и проверенный код:
upload.php:
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST') {
if(isset($_FILES['files'])){
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
$file_name = $_FILES['files']['name'][$key];
$file_size = $_FILES['files']['size'][$key];
$file_tmp = $_FILES['files']['tmp_name'][$key];
$file_type = $_FILES['files']['type'][$key];
if($file_type == "image/jpg" || $file_type == "image/png" || $file_type == "image/jpeg" || $file_type == "image/gif" ) {
move_uploaded_file($file_tmp,"uploads/".$file_name);
}
}
header('location:uploads.html');
}
}
else { header('location:404.html'); }
?>
upload.html
<form id="upload_images" action="upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="files[]" id="file" multiple="true" />
<input type="submit" id="btn_upload" value="U P L O A D" />
</form>
попробуйте это, и вы увидите, что происходит:
<?php
echo "<pre>";
print_r($_FILES);
echo "</pre>";
?>
И в своем HTML, убедитесь, что вы используете разные имена, например:
<input name="userfile[]" type="file" />
<input name="userfile[]" type="file" />
<input name="userfile[]" type="file" />
Затем заберите их по каждому имени. Просто ознакомьтесь с содержанием $ _FILES, чтобы понять структуру.
Я также советую вам серьезно проверить некоторые ошибки.