2015-01-06 37 views
-2
if ($_FILES["ufile"]["type"] [$i] == "image/jpeg" || $_FILES["ufile"]["type"] [$i] == "image/jpg" || $_FILES["ufile"]["type"] [$i] == "image/png" || $_FILES["ufile"]["type"] [$i] == "image/gif") 
{ 
    if ($_FILES["ufile"]["type"] [$i] == "image/png" || $_FILES["ufile"]["type"] [$i] == "image/gif" || $_FILES["ufile"]["type"] [$i] == "image/jpeg" || $_FILES["ufile"]["type"] [$i] == "image/jpg") 
    { 
     $file=$_FILES["ufile"]["tmp_name"]; 
     list($width, $height) = getimagesize($file); 
     $new_width = 200; 
     $new_height = 500; 
     $dst_image = imagecreatetruecolor($new_width,$new_height); 
     $src_image = imagecreatefromjpeg($_FILES["ufile"]["tmp_name"]); 
     imagecopyresized ($dst_image, $src_image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

     imagejpeg(imagecreatefromstring(file_get_contents($dst_image)), "convert.jpg"); 
     $actual_image_name = $name[$i].'.'.'jpg'; 
     move_uploaded_file("convert.jpg", $path.$actual_image_name); 
    } 
} 
+0

問題隱藏在代碼中的任何地方?我需要搜索嗎? – Rizier123

+0

**絕不**使用'['type']'字段進行驗證。這是微不足道的。由於您使用的是getimagesize(),只需使用它的'['mime']'參數來查看文件的真實含義。 –

+0

首先移動上傳的文件,然後應用尺寸變化 – Nick

回答

0

您完全錯誤使用GD。 $dst_image是一個GD圖像句柄。它是而不是的一個文件。所以... file_get_contents()將返回布爾值FALSE,因爲您試圖從而不是獲取文件名。 imagecreatefromstring()將返回布爾值false,因爲布爾值false是而不是圖像字符串,而imagejpeg()將返回布爾值FALSE,因爲您沒有將它傳遞給GD句柄。

總之,你的代碼可以做一些改進。你簡單地認爲什麼都不會出錯,永遠不會檢查失敗,並且這些失敗通過代碼向前傳播。

所有你真正需要的是

image_jpeg($dst_image, 'convert.jpg'); 

然後你move_uploaded_file失敗,因爲「convert.jpg」不是上傳的文件。這是你在服務器上創建的一個文件。它可能基於上傳的文件,但其本身是而不是上傳的文件。爲什麼不只是

image_jpeg($dst_image, "$path/$actual_image_name"); 
+0

不工作我迷路了 –

+0

我認爲這個答案中的評論有點尖銳,所以我使它更柔和,同時希望傳達相同的含義。 OP將會很久不見了,但我認爲對未來的讀者也是有益的,這些讀者可能也是初學者的開發者! – halfer