2016-06-03 7 views
0

갤러리 소프트웨어를 사용하고 있는데 문제가 있습니다. 이미지 업로드 후 EXIF ​​데이터의 '방향'플래그는 그림의 방향에 관계없이 항상 1 ("아무 것도하지 않음")로 설정됩니다. 이것은 올바른 방향으로 사진을 표시 할 수 없다는 것을 의미합니다.HTML 형식과 PHP 스크립트를 통해 JPEG 이미지를 업로드하면 EXIF ​​데이터의 방향 플래그가 1로 설정되어있는 것으로 보입니다 (또는 완전히 벗겨 내기)

여기 내 업로드 양식의 두드러진 부분은 다음과 같습니다

<form id="Upload" name="Upload" action="http://www.goosedalemodelflyingclub.co.uk/index.php" enctype="multipart/form-data" method="post"> 
... 
<div class="uploadbox"> 
<label>Choose photo to upload:<input id="file_upload1" type="file" name="file_upload1" accept="image/*"></label> 
<br> 
<label>Name of Photo: (1) <span id="new_msg_name1"></span><br><input type="text" class="p_name" size="60" maxlength="40" id="new_name1" name="new_name1" value=""></label> 
<br> 
<label>Description: 
    <span id="new_msg_desc1"></span><br> 
    <textarea id="new_desc1" name="new_desc1" class="p_desc" rows="4" cols="70" maxlength="250" style="width: auto; height: auto;"></textarea> 
</label> 
<br> 
<label>Who is able to view this picture: 
    <select id="albpic_visib_upload1" name="albpic_visib_upload1"> 
     <option value="O">Me only</option> 
     <option value="G">Forum only</option> 
     <option value="W">Everyone</option> 
    </select> 
</label> 
<br><br> 
<input type="submit" onclick="return validateUploadForm(this)" id="NewPix1" name="NewPix1" value="Upload Photos to Current Album">&nbsp;&nbsp; 
<a href="#"> 
    <input type="button" name="cncl" id="cncl" value="Cancel"> 
</a> 
<br> 
</div> 
... 
<input type="hidden" id="p" name="p" value="MyGallery"> 
<input type="hidden" id="override" name="override" value="Y"> 
<input type="hidden" id="albumid" name="albumid" value="54321"> 
<input type="hidden" id="gfunc" name="gfunc" value="NewPix1"> 
<input type="hidden" id="pix_this_upload" name="pix_this_upload" value="15"> 
<input type="hidden" id="user_id_passed" name="user_id_passed" value="12345"></div> 
</form> 

내가 pix_this_upload에 의해 주어진 사진의 수를 허용하도록 클래스 "uploadbox"을 가진 부서의 수 (한 번에 업로드 할 수 있고, 15 일 수도 있고 그렇지 않을 수도 있음). JavaScript 함수 validateUploadForm()은 아무런 관련이 없습니다. 필드가 올바르게 채워 졌는지 확인하고 잘못된 것이 있는지 사용자에게 알려주는 것입니다.

(날이의 바닥에 도착하는 데 도움이되는 몇 가지 디버깅보고를 포함한다)는 다음과 같이 내 PHP 스크립트의 관련 부분은 다음과 같습니다

$formfiles = $request->file("file_upload$ii"); 
$tempfile = $formfiles['tmp_name']; // Temporary name of file (uploaded as) 
... 
$uploaded = @move_uploaded_file($tempfile, $fullpath); // Move the uploaded file to its permanent home and rename appropriately 
... 
$exif = exif_read_data($fullpath); // Get EXIF data 
/*** DEBUG start ***/ 
$ff = $this->picsrootaddr; 
$ff .= "application_$pictureid.log"; 
$debug_r = fopen($ff, "w"); 
fwrite($debug_r, "$path_o\n"); 
$xxr = print_r(array_values($exif), true); 
fwrite($debug_r, "Debug 0: " . $xxr . "\n\n"); 
/*** DEBUG end for now ***/ 

if (isset($exif['Orientation'])) 
{ 
    $orientation = isset($exif['Orientation']); // Orientation 
    fwrite($debug_r, "Debug 1: $orientation\n"); 
} 
else 
{ 
    if (isset($exif['IDF0']['Orientation'])) 
    { 
     $orientation = $exif['IDF0']['Orientation']; // Orientation 
     fwrite($debug_r, "Debug 2: $orientation\n"); 
    } 
    else 
    { 
     $orientation = EXIF_NOTHING; // Leave image as-is 
     fwrite($debug_r, "Debug 3: $orientation\n"); 
    } 
} 

/*** DEBUG start ***/ 
fclose($debug_r); 
/*** DEBUG end ***/ 

그것은 그것의 일부이기 때문에 전체 코드를 게시하는 것은 매우 어렵다 함수에서, 그리고 계속 진행되고있는 검사가 많이있다 (is_uploaded_file, etc.). 또한이 사이트가 phpBB3을 사용하고 PHP의 슈퍼 전역에 대한 액세스를 차단하므로이 $ request 객체를 사용할 수 있습니다. 이것은 phpBB3 자체에 의해 인스턴스화되었으므로 사용해야합니다. 여기

내가 (내 시험을 방해하지 않도록 유지 영역으로 이동) 스크립트를 사용하여 업로드 한 사진에 대한 링크입니다 : 여기 http://www.goosedalemodelflyingclub.co.uk/gallery_aux/original/43/pic176_DSCF4678.JPG

스크립트 온라인에 대한 링크입니다 I EXIF 데이터가 표시됩니다. http://regex.info/exif.cgi?imgurl=http%3A%2F%2Fwww.goosedalemodelflyingclub.co.uk%2Fgallery_aux%2Foriginal%2F43%2Fpic176_DSCF4678.JPG EXIF ​​데이터에 방향이 포함되지 않고 고도로 처리 된 것을 확인하십시오. http://www.goosedalemodelflyingclub.co.uk/gallery_aux/application_176.log 주 I는 동일한 사진을 업로드

1과 오리엔테이션 '플래그가보고되는 방법

내가 파일 EXIF ​​데이터를 인쇄하는 추가 코드를 디버깅하여 제조 된 EXIF ​​로그 파일 바로 여기 FileZilla의를 사용하여 : 그것은 (어쨌든, 구글 크롬에서) 올바른 방향으로 표시하는 방법을 http://www.goosedalemodelflyingclub.co.uk/stackoverflow/DSCF4678.JPG 참고

그리고 여기가 같은 웹 사이트에서의 EXIF ​​데이터 보고서된다 http://regex.info/exif.cgi?dummy=on&imgurl=http%3A%2F%2Fwww.goosedalemodelflyingclub.co.uk%2Fstackoverflow%2FDSCF4678.JPG

어딘가에 선을 따라 EXIF ​​데이터가 벗겨지고 있습니다. 이미지가 올바르게 표시되도록 이미지를 회전하거나 뒤집을 가능성이 없습니다.

누군가 나에게 올바른 방향으로 조종사를 주실 수 있습니까? 나는 이것을 봤어.이 기사는 무수한 기사, 튜토리얼 및 질문을 제기했다.

PPS : 여기에 비슷한 질문이 있지만 동일하지는 않지만 대답은 제공되지 않습니다. No orientation in exif data - PHP image upload - 어쨌든 iOS에 관한 것입니다.

+0

whats'$ path_o'? 그것은'$ fullpath'가 아니어야합니까? – cmorrissey

+0

당신이 옳아 - 내 C & P가 나쁘다. 그 비트가 내가 언급 한 기능에 있기 때문입니다. 감사! –

+0

TLDR - 설명을 짧게하고 코드를 더 추가 – cmorrissey

답변

0

답변을 찾았으며이를 살펴본 모든 사람들에게 감사드립니다. 문제는 내 부분에서 문서를 제대로 읽지 못하는 문제였습니다. https://secure.php.net/manual/en/function.imageflip.php

그러나, imagerotate() 메소드가 반환 : PHP에서

는 imageflip() 메소드는 현재 위치에서 매개 변수로 전달 된 이미지가 성공하지 여부를 말할 부울을 반환하고 수정 회전 된 이미지 리소스와 원래 변경되지 않습니다 :

내가 그 imagerotate()을 성공/실패 부울을 반환하고 이미지를 수정 생각하고 있었다 실수 rotate.php ... https://secure.php.net/manual/en/functi를 현재 위치에서 imageflip 같은()하지만, 그렇지 않습니다.

누구나이 질문을 발견하고 답변을 시도하고 다른 사람이 같은 함정에 빠지는 것을 막기 위해 게시하는 것이 좋습니다.

실수는 내 게시 된 코드에 없었습니다. 다른 곳에서 있었던 오류입니다.