127)
$cnt++;
$s = substr($s, 0, $len - ($cnt % 2));
if (strlen($s) >= strlen($str))
$suffix = "";
return $s . $suffix;
}
}
// TEXT 형식으로 변환
function gb_get_text($str, $html=0)
{
/* 3.22 막음 (HTML 체크 줄바꿈시 출력 오류때문)
$source[] = "/ /";
$target[] = " ";
*/
// 3.31
// TEXT 출력일 경우 & 등의 코드를 정상으로 출력해 주기 위함
if ($html == 0) {
$str = html_symbol($str);
}
$source[] = "/";
$target[] = "<";
$source[] = "/>/";
$target[] = ">";
//$source[] = "/\"/";
//$target[] = """;
$source[] = "/\'/";
$target[] = "'";
//$source[] = "/}/"; $target[] = "}";
if ($html) {
$source[] = "/\n/";
$target[] = "
";
}
return preg_replace($source, $target, $str);
}
/*
// HTML 특수문자 변환 htmlspecialchars
function gb_hsc($str)
{
$trans = array("\"" => """, "'" => "'", "<"=>"<", ">"=>">");
$str = strtr($str, $trans);
return $str;
}
*/
// 3.31
// HTML SYMBOL 변환
// & · 등을 정상으로 출력
function gb_html_symbol($str)
{
return preg_replace("/\&([a-z0-9]{1,20}|\#[0-9]{0,3});/i", "&\\1;", $str);
}
/*************************************************************************
**
** SQL 관련 함수 모음
**
*************************************************************************/
// DB 연결
function gb_sql_connect($host, $user, $pass)
{
global $g4;
return @mysql_connect($host, $user, $pass);
}
// DB 선택
function gb_sql_select_db($db, $connect)
{
global $g4;
if (strtolower($g4['charset']) == 'utf-8') @mysql_query(" set names utf8 ");
else if (strtolower($g4['charset']) == 'euc-kr') @mysql_query(" set names euckr ");
return @mysql_select_db($db, $connect);
}
// mysql_query 와 mysql_error 를 한꺼번에 처리
function gb_sql_query($sql, $error=TRUE)
{
// Blind SQL Injection 취약점 해결
$sql = trim($sql);
// union의 사용을 허락하지 않습니다.
$sql = preg_replace("#^select.*from.*[^\'\"]union[^\'\"].*#i", "select 1", $sql);
// `information_schema` DB로의 접근을 허락하지 않습니다.
$sql = preg_replace("#^select.*from.*[^\'\"]`?information_schema`?[^\'\"].*#i", "select 1", $sql);
if ($error)
$result = @mysql_query($sql) or die("$sql
" . mysql_errno() . " : " . mysql_error() . "
error file : $_SERVER[PHP_SELF]");
else
$result = @mysql_query($sql);
return $result;
}
// 쿼리를 실행한 후 결과값에서 한행을 얻는다.
function gb_sql_fetch($sql, $error=TRUE)
{
$result = sql_query($sql, $error);
//$row = @sql_fetch_array($result) or die("
$sql
" . mysql_errno() . " : " . mysql_error() . "
error file : $_SERVER[PHP_SELF]");
$row = gb_sql_fetch_array($result);
return $row;
}
// 결과값에서 한행 연관배열(이름으로)로 얻는다.
function gb_sql_fetch_array($result)
{
$row = @mysql_fetch_assoc($result);
return $row;
}
// $result에 대한 메모리(memory)에 있는 내용을 모두 제거한다.
// sql_free_result()는 결과로부터 얻은 질의 값이 커서 많은 메모리를 사용할 염려가 있을 때 사용된다.
// 단, 결과 값은 스크립트(script) 실행부가 종료되면서 메모리에서 자동적으로 지워진다.
function gb_sql_free_result($result)
{
return mysql_free_result($result);
}
function gb_sql_password($value)
{
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
$row = gb_sql_fetch(" select password('$value') as pass ");
return $row[pass];
}
// PHPMyAdmin 참고
function gb_get_table_define($table, $crlf="\n")
{
global $g4;
// For MySQL < 3.23.20
$schema_create .= 'CREATE TABLE ' . $table . ' (' . $crlf;
$sql = 'SHOW FIELDS FROM ' . $table;
$result = sql_query($sql);
while ($row = gb_sql_fetch_array($result))
{
$schema_create .= ' ' . $row['Field'] . ' ' . $row['Type'];
if (isset($row['Default']) && $row['Default'] != '')
{
$schema_create .= ' DEFAULT \'' . $row['Default'] . '\'';
}
if ($row['Null'] != 'YES')
{
$schema_create .= ' NOT NULL';
}
if ($row['Extra'] != '')
{
$schema_create .= ' ' . $row['Extra'];
}
$schema_create .= ',' . $crlf;
} // end while
sql_free_result($result);
$schema_create = preg_replace('/,' . $crlf . '$/', '', $schema_create);
$sql = 'SHOW KEYS FROM ' . $table;
$result = sql_query($sql);
while ($row = gb_sql_fetch_array($result))
{
$kname = $row['Key_name'];
$comment = (isset($row['Comment'])) ? $row['Comment'] : '';
$sub_part = (isset($row['Sub_part'])) ? $row['Sub_part'] : '';
if ($kname != 'PRIMARY' && $row['Non_unique'] == 0) {
$kname = "UNIQUE|$kname";
}
if ($comment == 'FULLTEXT') {
$kname = 'FULLTEXT|$kname';
}
if (!isset($index[$kname])) {
$index[$kname] = array();
}
if ($sub_part > 1) {
$index[$kname][] = $row['Column_name'] . '(' . $sub_part . ')';
} else {
$index[$kname][] = $row['Column_name'];
}
} // end while
sql_free_result($result);
while (list($x, $columns) = @each($index)) {
$schema_create .= ',' . $crlf;
if ($x == 'PRIMARY') {
$schema_create .= ' PRIMARY KEY (';
} else if (substr($x, 0, 6) == 'UNIQUE') {
$schema_create .= ' UNIQUE ' . substr($x, 7) . ' (';
} else if (substr($x, 0, 8) == 'FULLTEXT') {
$schema_create .= ' FULLTEXT ' . substr($x, 9) . ' (';
} else {
$schema_create .= ' KEY ' . $x . ' (';
}
$schema_create .= implode($columns, ', ') . ')';
} // end while
if (strtolower($g4['charset']) == "utf-8")
$schema_create .= $crlf . ') DEFAULT CHARSET=utf8';
else
$schema_create .= $crlf . ')';
return $schema_create;
} // end of the 'PMA_getTableDef()' function
// 리퍼러 체크
function gb_referer_check($url="")
{
/*
// 제대로 체크를 하지 못하여 주석 처리함
global $g4;
if (!$url)
$url = $g4[url];
if (!preg_match("/^http[s]?:\/\/".$_SERVER[HTTP_HOST]."/", $_SERVER[HTTP_REFERER]))
alert("제대로 된 접근이 아닌것 같습니다.", $url);
*/
}
// 한글 요일
function gb_get_yoil($date, $full=0)
{
$arr_yoil = array ("일", "월", "화", "수", "목", "금", "토");
$yoil = date("w", strtotime($date));
$str = $arr_yoil[$yoil];
if ($full) {
$str .= "요일";
}
return $str;
}
// 날짜를 select 박스 형식으로 얻는다
function gb_date_select($date, $name="")
{
global $g4;
$s = "";
if (substr($date, 0, 4) == "0000") {
$date = $g4[time_ymdhis];
}
preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/", $date, $m);
// 년
$s .= "