Сжатие загрузки изображений PHP не работает. Можете ли вы взглянуть на мой код? - PullRequest
1 голос
/ 23 декабря 2019

Вы, ребята, мое последнее средство. Я был в этой проблеме больше дня и до сих пор не могу найти решение. Мой код, который я перечислил ниже, работает нормально. Он загружает переименованное изображение в правильный каталог. Единственное, что не работает, это то, что он не сжимает изображение. Размер файла для нового изображения соответствует размеру исходного изображения.

Мне было интересно, можете ли вы взглянуть на мой код ниже и посмотреть, сможете ли вы заметить что-то, что я не правильно делаю?

У меня есть код сжатия изображений, который я позаимствовал из примеров, которые явидел на этом сайте и другие сайты. Вот и все.

function compress_image($source_url, $destination_url, $quality) {

  $info = getimagesize($source_url);

  if($info['mime'] == 'image/jpeg' || $info['mime'] == 'image/jpg') {

    $image = imagecreatefromjpeg($source_url);

  } else if ($info['mime'] == 'image/gif') {

    $image = imagecreatefromgif($source_url);

  } else if ($info['mime'] == 'image/png') {

    $image = imagecreatefrompng($source_url);

  } else {
    $image = null;
  }

  imagejpeg($image, $destination_url, $quality);
  return $destination_url;
}

А вот мой скрипт загрузки изображений.

if(isset($_FILES['fileToUpload']) AND !empty($_FILES['fileToUpload']["name"])) {
  if(is_uploaded_file($_FILES['fileToUpload']["tmp_name"])) {

    $target_dir	   = '../members/images/'.$global_user_id.'/projects/'.$url_project_id.'/';
    $target_file   = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

    $source_file   = $_FILES["fileToUpload"]["tmp_name"];
    $random_name   = generateRandomString(10);
    $new_image     = $random_name . '.' . $imageFileType;
    $resized_image = compress_image($source_file, $new_image, 75);
    $new_file_path = $target_dir . $resized_image;

    if(!is_dir($target_dir)){
      mkdir($target_dir, 0775, true);
    }

    $uploadOk      = 1;
    // Check if image file is a actual image or fake image
    $check = getimagesize($source_file);
    if($check !== false) {
     //   echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        $errors[] = 'File is not an image!';
        $uploadOk = 0;
    }
    // Check if file already exists
    if (file_exists($target_file)) {
        $errors[] = 'Sorry, file already exists!';
        $uploadOk = 0;
    }
    // Check file size
    if ($_FILES["fileToUpload"]["size"] > 5000000) {
        $errors[] = 'Sorry, your file size is bigger than 5mb!';
        $uploadOk = 0;
    }
    // Allow certain file formats
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" && $imageFileType != "JPG" && $imageFileType != "PNG" && $imageFileType != "JPEG" && $imageFileType != "GIF") {
        $errors[] = 'Sorry, only JPG, JPEG, PNG & GIF files are allowed!';
        $uploadOk = 0;
    }
    // Check if $uploadOk is set to 0 by an error
    if($uploadOk == 0) {
        $errors[] = 'Sorry, your file was not uploaded!';
    // if everything is ok, try to upload file
    } else {

      if(move_uploaded_file($source_file, $new_file_path)) {

        echo 'success';

      } else {
        $errors[] = 'Sorry, there was an error uploading your file!';
      }
    }
  } else {
    $errors[] = 'You must upload an image!';
  }
}

1 Ответ

1 голос
/ 23 декабря 2019

Эта строка является проблемой:

if(move_uploaded_file($source_file, $new_file_path)) {

Вы перемещаете исходный файл. Вы должны двигаться $new_image:

if(rename($new_image, $new_file_path)) {
...