getimagesize($img)
를하려고하는데
이미지가 존재하지 않으면 오류가 발생합니다. 파일이 존재하는지 여부를 먼저 확인하고 오류를 처리하기를 원하지 않습니다.getimagesize가 파일을 찾을 수없는 경우의 핸들 오류
어떻게 try catch
작동하는지 모르겠지만 뭔가를 원하는 :
try: getimagesize($img) $works = true
catch: $works = flase
getimagesize($img)
를하려고하는데
이미지가 존재하지 않으면 오류가 발생합니다. 파일이 존재하는지 여부를 먼저 확인하고 오류를 처리하기를 원하지 않습니다.getimagesize가 파일을 찾을 수없는 경우의 핸들 오류
어떻게 try catch
작동하는지 모르겠지만 뭔가를 원하는 :
try: getimagesize($img) $works = true
catch: $works = flase
당신이 말했듯이, getimagesize 경고를 생성 이 코드 :
if ($data = getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
당신에게
Warning: getimagesize(not-existing.png) [function.getimagesize]:
failed to open stream: No such file or directory
를 얻을 것이다
해결책은 그 오류 마스크의 @ operator을 사용하는 것입니다 : 파일이 존재하지 않기 때문에
if ($data = @getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
것은, $ 데이터가 여전히 거짓 것이다; 경고는 표시되지 않습니다.
다른 해결책은 getimagesize를 사용하기 전에 check if the file exists입니다. 이 같은 것을 할 것입니다 : 파일이 존재하지 않을 경우, getimagesize가 호출되지
if (file_exists('not-existing.png') &&
($data = getimagesize('not-existing.png'))
) {
echo "OK";
} else {
echo "NOT OK";
}
-
여전히 경고를 의미하는이 솔루션은 당신이 이미지에 사용해야하는 것이 아니다 다른 서버에 있고 HTTP를 통해 액세스 할 수 있습니다 (이 경우). 이는 원격 서버에 대한 두 가지 요청을 의미하기 때문입니다.
로컬 이미지의 경우 매우 괜찮습니다. 내가 볼 수있는 유일한 문제는 마스크되지 않은 읽기 오류가있을 때 생성되는 통지입니다.
마지막 :
display_errors
참조
지저분한 더러운 해커 좀비라고 불러주세요.하지만 보통 경고 출력을 출력 버퍼에 저장 한 다음 버퍼를 확인하여이 문제를 해결합니다. 내가 말했듯이,
ob_start();
$data = getimagesize('not-existing.png');
$resize_warning = ob_get_clean();
if(!empty($resize_warning)) {
print "NOT OK";
# We could even print out the warning here, just as PHP would do
print "$resize_warning";
} else {
print "OK"
}
프로그래머의 하늘에 편안한 장소를 얻을 수있는 방법이 없습니다, 그러나 역기능 오류 처리에 올 때, 사람은 사람이해야하는 일을하는이보십시오.
당신은 지옥에 갈 더러운 해커 좀비입니다. – Seb
그런 오래된 주제를 제기하면 유감입니다. 최근 비슷한 문제가 발생하여 해결책 대신이 주제가 발견되었습니다. 종교적인 이유로 나는 '@'가 나쁜 결정이라고 생각한다.file_exists()는 파일이 파일은 단지 메소드 호출 사이에 삭제 될 수 있으므로, getimagesize()가 여전히 실패 할 수있는 것을 요구하면
function exception_error_handler($errno, $errstr, $errfile, $errline) {
throw new Exception($errstr);
}
set_error_handler("exception_error_handler");
try {
$imageinfo = getimagesize($image_url);
} catch (Exception $e) {
$imageinfo = false;
}
마음 당신 : 그리고 나는 이런 식으로 뭔가를 보이는 또 다른 해결책을 발견. Veeery는있을 수는 없지만 최악의 순간에 발생합니다 ... – ya23
@ ya23 : true; 하지만 당신은 매우 운이 좋으면 좋겠네요 ^^ 그리고 @를 사용하여 오류를 마스킹하는 것이 싫습니다 : 만약 당신이 그것을 사용하고 있고 문제가있다면 일반적으로 디버그하는 것이 쉽지 않을 것입니다 :-( –
@ 꽤 더러운 :) – Gigala