CI 묻고 답하기

제목 보안문자 이미지 출력 시, 로컬에서는 정상 출력되는데 서버에서는 무한루프처럼 계속 돌아갑니다.
글쓴이 layman 작성시각 2016/06/03 10:56:08
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 14033   RSS

같은 소스를 로컬에서 서버로 업로드 하였을 때,

테스트용 로컬에서 홈페이지에 접속하면 보안문자가 정상적으로 출력됩니다.

그런데, 실제 사용 서버에 올려두고 접속하면 보안문자가 출력이 안됩니다.

※ 특이점 : 서버에서 접속 시, 해당 페이지가 무한루프처럼 계속 돌아갑니다(captcha.php에 반복문이 하나 있지만 무한루프가 되는 코드는 아니에요). 출력되어서 화면은 완성되었는데 희한하게 개발자도구에서 소스를 보면 천천~히 하나하나씩 생기는 상황이구요, 보안문자부분 이미지가 깨져있고, 계속 페이지를 로딩하는 상태가 유지됩니다(브라우저 탭에 보면 동그라미가 계속 회전 중..), 

$path에 설정된 경로를 호출하면

captchar.php 가 실행되어 화면에 보안문자를 출력해주는소스인데요.

 

다음은 write.php 소스코드에요. (글쓰기 view페이지)

<span class="security_img" id="security_img">                            

   <?php                             

      $path = "http://".$_SERVER['HTTP_HOST'].'/captcha';                                    

   ?>                        

   <img id="security_target" src="<?=$path?>">                        

</span>

 

다음은 captcha.php 소스코드에요.

-----------------------------------------------------------------------------------------------------------------------------------------------------

<?php 

header('Content-type: image/gif');

session_start();

$random = $_SESSION['captcha'];

$SI_CHAR_LEN = 6; // 보여줄 글자수$SI_IMAGE_WIDTH = 20; // 글자 이미지 하나의 폭

$SI_IMAGE_HEIGHT = 28; // 글자 이미지 하나의 높이

$SI_CHAR_ARRAY = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); // 보여줄 글자 목록

$img = imagecreatefrompng('http://'.$_SERVER['HTTP_HOST'].'/webroot/images/capcha/copybg.png'); // 배경이미지를 읽어온다

$char_num = count($SI_CHAR_ARRAY); // 글자목록 개수

for ($i = 0 ; $i < strlen($random); $i++) {            

   $src = imagecreatefrompng('http://'.$_SERVER['HTTP_HOST'].'/webroot/images/capcha/' . $random[$i] . '.png'); // 선택된 임의의 글자    이미지를 읽어온다.        

   imagecopy($img, $src, $SI_IMAGE_WIDTH * $i, 0, 0, 0, $SI_IMAGE_WIDTH, $SI_IMAGE_HEIGHT); // 배경이미지와 합친다    

}

// 취소선 이미지 그리기

$strike = rand(1,9);

$src = imagecreatefrompng('http://'.$_SERVER['HTTP_HOST'].'/webroot/images/capcha/strike/' . $strike . '.png');

imagecopy($img, $src, 0, 0, 0, 0, $SI_IMAGE_WIDTH * $SI_CHAR_LEN, $SI_IMAGE_HEIGHT);

imagegif($img); // 이미지 뿌리기

imagedestroy($img);

?>

-----------------------------------------------------------------------------------------------------------------------------------------------------

경로도 다 일치하는데 왜 로컬에서는 되고, 서버에서는 무한루프처럼 계속 돌아가고 이미지도 출력안되는지 모르겠어요.

로그에도 아무 문제 없구요.

고수님들, 도와주세요.ㅜㅜ

 

첨부한 이미지는 이클립스 php explorer 구조입니다.


첨부파일 4.PNG (32.4 KB)
 다음글 autoload로 session을 불러올시; (2)
 이전글 Message: Only variables should... (4)

댓글

한대승(불의회상) / 2016/06/03 11:20:47 / 추천 0
캡차 디렉토리 퍼미션 확인 해 보세요.
layman / 2016/06/03 11:27:18 / 추천 0

댓글 보고 방금 리눅스에 캡차 디렉토리 퍼미션 755로 주고 해보았으나, 결과가 똑같네요. 어흑..

무언가 캡차.php에서 문제가 있는 것 같긴 한데.. 오류가 없고 로컬에서는 잘 작동된다는게 희한합니다..

한대승(불의회상) / 2016/06/03 12:15:47 / 추천 0

CI의 캡챠 헬퍼를 사용하지 않으시고 직접 구현 하셨나 보군요.

$img = imagecreatefrompng('http://'.$_SERVER['HTTP_HOST'].'/webroot/images/capcha/copybg.png'); // 배경이미지를 읽어온다

코드중 이부분이 좀 걸리는데 배경 이미지 경로를 확인해 보세요.

layman / 2016/06/03 13:15:07 / 추천 0

다른 프로젝트의 실서버에 있는 IMG 경로와 비교해봤는데, 크게 다른 점이 없네요. 보안문자는 이 프로젝트에 처음 집어넣는거라..

ㅜㅜ 잘 안되네요. 계속 찾아보고 있습니다.