PHP上传问题

时间:2011-03-04 02:30:08

标签: php image file-upload gd

我创建了一个脚本,根据它们的比例调整图像大小。由于某种原因,它会一直回显“失败”并且没有将已调整大小的缩略图移动到我设置的目录。该目录是一个有效的路径,所以在用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 个答案:

答案 0 :(得分:1)

您无法移动imagecreatetruecolor()

返回的资源

GD库在内存中创建图像,它不会改变您在imagecreatefrom*()中使用的文件

您使用其中一个GD功能来保存图像...

  • imagejpeg - 将图像输出到浏览器或文件
  • imagepng - 将PNG图像输出到浏览器或文件
  • imagegif - 将图像输出到浏览器或文件

等...

您使用了正确的行

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

您正尝试使用move_upload_file保存GD资源$resized$resized不是文件名,因此move_uploaded_file()失败。

您完全不需要该通话,该文件应已在$dirpath/$rename电话imagejpeg()保存。

答案 1 :(得分:0)

您应该检查目录的权限,请记住您的Web服务器可能在不同的用户下运行。

http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions如果您需要了解* nix权限。

答案 2 :(得分:0)

检查set_widthset_height$resized = imagecreatetruecolor($set_width, $set_height);的值,或许它发送空值