2015-01-06 1 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()은 boolean false가 이 아니고 이미지 문자열이이고 imagejpeg()이 GD 핸들을 전달하지 않으므로 부울 FALSE를 반환하므로 부울 false를 반환합니다.

간단히 말해서 코드가 개선 될 수 있습니다. 아무 것도 잘못 될 수 있다고 가정하고, 실패를 확인하지 않으며, 실패는 코드를 통해 앞으로 전달됩니다. 모든 당신이 정말로 필요

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

한 후 move_uploaded_file는 "convert.jpg"때문에 실패하여 업로드 된 파일이 아닙니다. 서버에서 직접 만든 파일입니다. 업로드 된 파일을 기반으로했을 수도 있지만 이 아니며 업로드 된 파일이이 아닙니다. 그냥

+0

작동하지 않음 손실 됨 –

+0

이 답변의 해설은 약간 날카로웠다. 그래서 나는 조금 더 부드럽게 만들었고 희망적으로 같은 의미를 전달했다. OP는 오래 가지 않을 것이지만, 초보 개발자일지도 모르는 장래 독자들에게 친절한 가치가 있다고 생각합니다! – halfer

관련 문제