반복문에서 오류가 뜨는 이유

반복문에서 오류가 뜨는 이유

QA

반복문에서 오류가 뜨는 이유

본문

이미지화 시키는 소스인데요. 

반복문에만 들어가면 한번만 실행하고 오류가 뜹니다.

또한 반복문안에 include_once 시키면 오류없이 한번 실행하고

include 를 넣으면 오류생기면서 한번만 실행하네요 

 


<?php
$width = "1300"; //이미지크기
$height = "680";  //이미지크기
$angle = 0;
$fontSize = 65; //폰트사이즈
$fontFile = 'Nanum.ttf'; 
$text = '안녕하세요'
$imgRes = imagecreatetruecolor($width, $height); 

$hpink = imagecolorallocate($imgRes, 218, 42, 81); // 핫핑
$white = imagecolorallocate($imgRes, 255, 255, 255);
 
imagefilledrectangle($imgRes, 0, 0, $width, $height, $hpink); //배경색
image_DrawText($imgRes, $fontSize, $white, $fontFile, $text);
imagegif($imgRes, G5_BBS_PATH.'/textimg/'.$ranbox.'.gif'); //랜덤파일명
imagedestroy($imgRes);

/**
* 해당 이미지 영역 내에 txt 줄바꿈 그리기
*/
function image_DrawText(&$imgRes, $fontSize, $rgbColor, $fontFile, $text) {
//

// 각 라인별 쓰여질 문자열
$buff = "";
// 문자열의 길이
$strLen = strlen($text);
// 폰트가 뿌려질 X,Y 위치
 $posX = 20;
//$posY = 0;
// 기본 영문자의 폰트 실제 높이 구하기
$fontInfo = imagettfbbox($fontSize, $angle, $fontFile, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
$fontWidth = $fontInfo[2] - $fontInfo[0];
$fontHeight = $fontInfo[1] + ($fontInfo[5] * -1);
$image_height = imagesy($imgRes); // 글자가 써질 영역의 크기를 구함
$posY = ($image_height - $fontHeight * 2) / 2;

for ($i = 0; $i < $strLen; $i++) { // (1)
$buff .= $text{$i}; // (2)
$buffInfo = imagettfbbox($fontSize, $angle, $fontFile, $buff); // (3)
$buffWidth = $buffInfo[2] - $buffInfo[0];
$buffHeight = $buffInfo[1] + ($buffInfo[5] * -1);
//echo $buff . " : " . $buffWidth. " : " . $buffHeight . "<br>";
// $buff의 문자열이 이미지폭 보다 크면 출력 후 다음줄에 쓸 준비
if ($buffWidth > imagesx($imgRes) - 40 ) { // (4) //위에 posX값이 20이라서 40 여백
$buff = mb_substr($buff, 0, -1, "UTF-8"); // (5)
imagettftext($imgRes, $fontSize, $angle, $posX, $posY, $rgbColor, $fontFile, $buff); // (6)
$buff = ""; // (7)
$posY += $fontHeight; // (7)
$i--; // (7)
}
else { // (8)
// 마지막 문자열에 도달하면 마지막 버퍼 전송
if ($i >= $strLen - 1)
imagettftext($imgRes, $fontSize, $angle, $posX, $posY, $rgbColor, $fontFile, $buff);
}
}
}
?>

이 질문에 댓글 쓰기 :

답변 5

해당코드가 반복문에 들어가면 image_DrawText 함수가 중복 선언되는 것 아닌가요?

함수를 반복문 밖으로 뽑아내야  할 것 같은데요. 아니면 if (!function_exists('image_DrawText')) { } 로 함수분분을 둘러싸던지요

include_once의 경우는 같은 페이지를 여러번 호출해도 한번만 호출하고

include의 경우 같은 페이지를 여러번 호출하면 에러를 뿝습니다.

다음엔 코드좀 이쁘게 해서 올려주세요. 저러면 싫어해요.

그리고 오류 메시지도 올려주세요.

 

그리고.... include 와 include_once 는 원래 그래요.

include 에 함수등이 있으면 재정의 오류가 당연히 생기죠 반복적으로 인클루드 하니...

include_once 는 딱 한번만 인클루드 하는 것이니 당연히 재정의 오류가 안생기고요.

 

그리고 위 코드는 그림 다루는 것 같은데 드물게 버전 안맞으면 오류생길 수 있어요. 요즘엔 그런일은 거의 없어요. 결과 나온다니 그것 같지도 않고요.

 

하여간 질문글에는 오류내용이 없고 인클루드 구문도 없내요.

 

답변을 작성하시기 전에 로그인 해주세요.
전체 0 | RSS
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT