2011-03-04 73 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);也許它發送一個空值