2011-03-04 71 views
1

我创建了一个脚本,根据它们的比例调整图像大小。出于某种原因,它会保持回显“失败”,并且不会将调整大小的缩略图移动到我设置的目录。这个目录是一个有效的路径,所以当用PHP创建一个图像时,我必须做一些错误。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'; 
    } 
} 
+0

所以值,添加更多的调试输出,旁边这个不提供信息的“失败”。 – 2011-03-04 02:37:09

+0

我会使用IMagick – Zoidberg 2011-03-04 02:40:35

回答

1

你不动的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

雅各布,我已经使用imagejpeg函数,你可以在我的脚本中看到。由于某些原因,它不保存图像? – Jake 2011-03-04 02:41:32

+0

我的歉意......你根本不需要move_uploaded_file然后......你正试图移动一个GD资源,之后还没有被创建到你想要移动它的地方。 – Jacob 2011-03-04 02:42:48

+0

由于某些原因,即使我取出move_uploaded_file,它仍然不会移动图像的大小调整后的版本。 – Jake 2011-03-04 02:52:54

0

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

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

+0

该目录的权限没有问题。当我将脚本设置为不调整图像大小时,它可以正常工作。 – Jake 2011-03-04 02:34:11

+0

您应该先检查某个错误消息。只有在他们遇到问题时才去检查权限。 – 2011-03-04 02:36:16

+0

这绝对不值得投票。 – 2011-03-04 02:36:17

0

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