Проблема с загрузкой PHP - PullRequest
       20

Проблема с загрузкой PHP

1 голос
/ 04 марта 2011

Я создал скрипт, который изменяет размеры изображений в зависимости от их соотношения. По какой-то причине он продолжает отображать «Failed» и не перемещает уменьшенное изображение в каталог, который я установил. Каталог является допустимым путем, поэтому я, должно быть, сделал что-то не так при создании изображения с PHP.

$set_width  = $params['width'];
$set_height = $params['height'];

if($filetype == "image/pjpeg" || $filetype == "image/jpeg") {
  $new_image = imagecreatefromjpeg($filetmp);     
} elseif($filetype == "image/x-png" || $filetype == "image/png") {  
  $new_image = imagecreatefrompng($filetmp);
} elseif($filetype == "image/gif") {
  $new_image = imagecreatefromgif($filetmp);
}

list($width, $height) = getimagesize($filetmp);

$ratio = $width / $height;

if($width != $set_width || $height != $set_height) {
  if($ratio > 1)
  {
    $set_height = $set_width / $ratio;
  }
  else
  {
    $set_height = $set_width;
    $set_width  = $set_width * $ratio;
  }

  $resized = imagecreatetruecolor($set_width, $set_height);
  $rename  = $folder . '_' . time() . mt_rand(1,99) . '.' . end($fileext);

  imagecopyresampled($resized, $new_image, 0, 0, 0, 0, $set_width, $set_height, $width, $height);
  imagejpeg($resized, "$dirpath/$rename", 100);
  imageDestroy($resized);
  imageDestroy($new_image);

  if(move_uploaded_file($resized, "$dirpath/$rename")) {
    return $rename;
  } else {
    echo 'failed';
  }
} else { 
  $rename  = $folder . '_' . time() . mt_rand(1,99) . '.' . end($fileext);
  if(move_uploaded_file($filetmp, "$dirpath/$rename")) {
    return $rename;
  } else {
    echo 'failed 2';
  }
}

Ответы [ 3 ]

1 голос
/ 04 марта 2011

Вы не перемещаете ресурс, возвращенный imagecreatetruecolor()

Библиотека GD создает изображение в памяти, она не меняет файл, который вы использовали в imagecreatefrom*()

Вы используете одну из функций GD для сохранения изображения ...

  • imagejpeg - вывод изображения в браузер или файл
  • imagepng - вывод изображения PNG в браузер или файл
  • imagegif - вывод изображения в браузер или файл

и т.д ...

Вы использовали правильную строку

imagejpeg($resized, "$dirpath/$rename", 100);

Вы пытаетесь сохранить ресурс GD $resized с помощью файла move_upload_file. $resized не является именем файла, поэтому move_uploaded_file() завершается ошибкой.

Вам не нужен этот вызов вообще, файл должен быть сохранен в $dirpath/$rename с помощью вызова imagejpeg().

0 голосов
/ 04 марта 2011

Проверьте значения set_width и set_height в $resized = imagecreatetruecolor($set_width, $set_height); Может быть, отправка нулевого значения

0 голосов
/ 04 марта 2011

Вам следует проверить права доступа к каталогу, помните, что ваш веб-сервер может работать под другим пользователем, чем вы.

http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions, если вам нужно узнать о * nix-разрешениях.

...