채택완료

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

2019-07-30 (화) 07:05:47 3,242

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

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

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

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

Copy
<?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개 / 댓글 1개

채택된 답변
+20 포인트

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

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

답변에 대한 댓글 1개

형님 정말 예리하십니다... 와.. 엄청난 노력이 있으셨겠지요. 관심가져주신 다른분들도 모두 정말 감사드립니다

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

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

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

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

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

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

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

소스그대로면 07줄이랑 15줄 ; 빠지고 ' 하나더들어간거같은데 아닌가염

14번째 줄아래로 싹다 지우면 실행 결과는 안나오지만 오류는 안나는데  이유를 잘 모르겠습니다

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

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

답변을 작성하려면 로그인이 필요합니다.