php создает миниатюру при загрузке нескольких файлов и сохраняет миниатюру и изображение в двух разных каталогах - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь загрузить несколько изображений в папку на моем веб-сайте. Хотя загрузка файла работает без проблем, я пытаюсь интегрировать создание эскиза для всех изображений, загруженных в одну и ту же функцию, которая не работает.

Форма HTML:

<form class="navbar-form pull-left"  action="fileupload.php" name="fileupload" method="post" enctype="multipart/form-data">
        <label for="file" style="cursor: pointer;padding:5px 0 0 0;font-weight:normal" title="Add Images">IMAGES</label>
        <input type="file" name="file[]" multiple id="file"><br>
      </form>

Javascript:

function _id(e) {return document.getElementById(e)}    
_id('file').onchange = function() {
  var theFile = this.files;
  if(theFile.length === 1) {
    var uploader = new XMLHttpRequest();
    var file = new FormData();
    file.append("file", theFile[0]);
    uploader.onreadystatechange = function() {
      if(uploader.readyState === 4 && uploader.status === 200) {
        show_message('Uploading Image');
        console.log(uploader.responseText);

      }
    }
    uploader.open('POST','fileupload.php',true);
    uploader.send(file);
  } else {
    var start = 0,
    setter,
    buff = true;
    setter = setInterval(function() {
      if (buff === true) {
        show_message('Uploading Images');
        buff = false;
        var uploader = new XMLHttpRequest();
        var file = new FormData();
        file.append('file', theFile[start]);
        uploader.onreadystatechange = function() {
          if(uploader.readyState === 4 &&  uploader.status === 200) {
            console.log(uploader.responseText);
            start++;
            buff = true;
          }
        }
        uploader.open('POST','fileupload.php',true);
        uploader.send(file);
      }
      if(start >= theFile.length) {
        clearInterval(setter);
      }
    }, 200)
  }
}

fileupload.php

<?php
session_start();
$database = $_SESSION['folder'];
$match = $_SESSION['matchLst'];
$tardir = "/var/www/html/projects/" . $database . "/" . $match . "/";
$thumb = $match . "_thumb/";
$thumbdir = $tardir . $thumb;

function createThumbnail($filename) {
    if($filename) {
        $im = imagecreatefromjpeg($tardir . $filename);
    }
    $x = imagesx($im);
    $y = imagesy($im);

    $nx = 100;
    $ny = 100;

    $nm = imagecreatetruecolor($nx, $ny);
    imagecopyresized($nm, $im, 0, 0, 0, 0, $nx, $ny, $x, $y);
    if(!file_exists($thumbdir)) {
        if(mkdir($thumbdir)) {
            imagejpeg($nm, $thumbdir . $filename);
        } else {
            die("Thumbnail directory could not be created");
        }
    } else {
            imagejpeg($nm, $thumbdir . $filename);
    }
}


if(!isset($_FILES['file'])){die();}

if(isset($_FILES['file'])) {
    if($_FILES['file']['name']) {
        $filename = $_FILES['file']['name'];
        $source = $_FILES['file']['tmp_name'];
        $target = $tardir . $filename;
        move_uploaded_file($source, $target);
        createThumbnail($filename);  
        echo "Images uploaded";
    }
}
?>

У меня 2-3 проблемы:

В файле fileupload.php, если я закомментирую createThumbnail($filename), я могу загрузить несколько файлов без проблем. Когда я включаю функцию createThumbnail, ни загрузка файла, ни создание эскиза не происходит. Я пробовал различные примеры, приведенные здесь, и git, однако не смог ни создать ни миниатюру, ни сохранить ее в папке.

1 Ответ

0 голосов
/ 01 сентября 2018

$ tardir здесь не задано:

function createThumbnail($filename) {
    if($filename) {
        $im = imagecreatefromjpeg($tardir . $filename);
    }

Вам следует заменить вызов функции:

createThumbnail($filename);  

По:

createThumbnail($tardir . $filename);  

И не используйте $ tardir в своей функции.

Будьте осторожны, когда задаете абсолютный путь:

$tardir = "/var/www/html/projects/" . $database . "/" . $match . "/";

Ваш сценарий будет нарушен, если путь изменится. Вместо этого вы можете использовать магические константы, такие как DIR и / или realpath ()

...