2011-03-04 6 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

그래서 null 값을 전송 $resized = imagecreatetruecolor($set_width, $set_height);set_widthset_height의 값은 더 많은 디버깅 출력을 추가 할 수 있습니다. –

+0

IMagick을 사용합니다 – Zoidberg

답변

1

는 당신에 GD 기능 중 하나를 사용하면 imagecreatefrom*()

에 사용 된 파일을 변경하지 않습니다, 메모리에 이미지를 생성 ...

  • imagejpeg 이미지를 저장 - 출력 이미지 브라우저 또는 파일
  • imagepng - 출력 중 하나를 브라우저에 PNG 이미지 나 파일
  • imagegif - 출력 이미지 브라우저 또는 파일

등 ...

올바른 라인

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

당신은 GD 자원을 저장하는 동안 사용했습니다 $resized move_upload_file을 사용합니다. $resized은 파일 이름이 아니므로 move_uploaded_file()은 실패합니다.

전화가 전혀 필요하지 않으므로 imagejpeg() 호출로 파일이 이미 $dirpath/$rename에 저장되어 있어야합니다. 이 가치가없는이 "실패"옆에

+0

Jacob, 스크립트에서 볼 수있는 것처럼 imagejpeg 함수를 사용했습니다. 어떤 이유로 이미지를 저장하지 않습니까? – Jake

+0

내 사과 ... 당신은 move_uploaded_file을 전혀 필요로하지 않습니다 ... GD 리소스를 이동하려고합니다. 어쨌든 이동하려는 곳은 생성되지 않았습니다. – Jacob

+0

어떤 이유에서인지 move_uploaded_file을 꺼낼 때에도 이미지의 크기가 조정 된 버전이 이동하지 않습니다. – Jake

0

디렉터리의 사용 권한을 확인해야합니다. 웹 서버가 다른 사용자로 실행되고 있는지 확인해야합니다.

http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions * nix 권한에 대해 알아야 할 경우. 당신은 imagecreatetruecolor()

GD 라이브러리에 의해 반환 된 리소스를 이동하지 않는

+0

디렉토리의 사용 권한이 있습니다. 이미지의 크기를 조정하지 않고 스크립트를 설정하면 문제가 없습니다. – Jake

+0

먼저 특정 오류 메시지를 확인해야합니다. 그리고 문제가있는 경우에만 사용 권한을 확인하십시오. –

+0

이것은 확실히 투표의 가치가 없었습니다. –