반복문에서 오류가 뜨는 이유
본문
이미지화 시키는 소스인데요.
반복문에만 들어가면 한번만 실행하고 오류가 뜹니다.
또한 반복문안에 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의 경우 같은 페이지를 여러번 호출하면 에러를 뿝습니다.
소스그대로면 07줄이랑 15줄 ; 빠지고 ' 하나더들어간거같은데 아닌가염
다음엔 코드좀 이쁘게 해서 올려주세요. 저러면 싫어해요.
그리고 오류 메시지도 올려주세요.
그리고.... include 와 include_once 는 원래 그래요.
include 에 함수등이 있으면 재정의 오류가 당연히 생기죠 반복적으로 인클루드 하니...
include_once 는 딱 한번만 인클루드 하는 것이니 당연히 재정의 오류가 안생기고요.
그리고 위 코드는 그림 다루는 것 같은데 드물게 버전 안맞으면 오류생길 수 있어요. 요즘엔 그런일은 거의 없어요. 결과 나온다니 그것 같지도 않고요.
하여간 질문글에는 오류내용이 없고 인클루드 구문도 없내요.
14번째 줄아래로 싹다 지우면 실행 결과는 안나오지만 오류는 안나는데 이유를 잘 모르겠습니다
답변을 작성하시기 전에 로그인 해주세요.