2017-03-19 1 views
3

이전 버전의 이미지 파일을로드하려고 시도했습니다. (JPEG를PHP에서 왜 imagecreatefromjpeg가 "jpeg 파일이 아닙니다"가 치명적인 오류로 변경 되었습니까?

$res = @imagecreatefromjpeg($sourceName); 
if ($res === false) 
    $res = @imagecreatefromgif($sourceName); 
if ($res === false) 
    $res = @imagecreatefrompng($sourceName); 
if ($res === false) { 
    $err[] = 'Cannot load file as JPEG, GIF or PNG!'; 

이 오랜 시간 동안 완벽하게 작동하는 데 사용하지만, 최근 서버 마이그레이션 후에는 PNG 파일을 사용하는 경우 작동이 중지 : 그것은 어떤 종류 알고하지 않기 때문에, 코드는 그들 모두를 시도 파일은 잘 작동합니다). 선이 오류 억제 연산자를 가지고

Fatal error: imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error: Not a JPEG file: starts with 0x89 0x50

때문에, 스크립트가 단순히 실행 중지 및 빈 응답 HTTP 200을 반환 조사는 매우 첫 번째 줄에 치명적인 오류가 발생 것으로 나타났다.

내가 이해할 수없는 것은 ... 왜 ... 어떻게 ... 왜 ... 언제부터 ... 허?

조차도 official documentation조차도 파일을로드 할 수없는 경우 FALSE을 반환하고 @ 연산자가있는 구문도 표시됩니다. 나는 웹상에서 "JPEG 파일이 아닌"것이 치명적인 오류라고 말할 수있는 것을 찾을 수 없다. 어디에서나 언급했듯이 항상 경고였습니다. 왜 지금 치명적인 오류가 발생합니까?

내 PHP는 5.6.30이며, GD는 모든 것이 있습니다.

+0

[this] (http://stackoverflow.com/a/10668155/2518525)와 [this] (http://stackoverflow.com/a/3901885/2518525)를 살펴볼 가치가 있습니다. (* 버그 처리 jpeg 이미지 *). – Darren

+0

@Darren - 두 링크 모두 실패시 나타나는 ** 경고 **에 대해 이야기합니다. 억제되고 무시 될 수있는 경고. ** 치명적인 오류 **가 발생합니다. 또한, 이미 버그가있는 jpeg가 아니라고 말했습니다. 이것은 PNG이며,이 기능이 실패 할 것으로 예상합니다. 단지 치명적이지는 않습니다. –

답변

3

나는 내 자신의 질문에 대답 할 수 있다고 생각한다. 그것은 알려진 버그입니다. 만나다. PHP 버그 #73514#73479. 실제로 버그는 libgd에 있으며 reported there too입니다. A fix was made last November,하지만 아직 출시하지 않았습니다. 그래서, 네 ... 행운이 없다. 대신에 getimagesize()을 사용하여 먼저 유형을 결정하고 대신 적절한 함수를 사용하도록 노력할 것입니다. 진정으로 부패한 파일의 경우에는 여전히 도움이되지 않지만, 그것은 뭔가입니다.

관련 문제