$value) { if(is_array($value)) { $array[$key] = array_map_deep($fn, $value); } else { $array[$key] = call_user_func($fn, $value); } } } else { $array = call_user_func($fn, $array); } return $array; } } if( ! function_exists('safe_install_string_check') ){ function safe_install_string_check( $str, $is_json=false ) { $is_check = false; if(preg_match('#\);(passthru|eval|pcntl_exec|exec|system|popen|fopen|fsockopen|file|file_get_contents|readfile|unlink|include|include_once|require|require_once)\s?#i', $str)) { $is_check = true; } if(preg_match('#\$_(get|post|request)\s?\[.*?\]\s?\)#i', $str)){ $is_check = true; } if($is_check){ $msg = "입력한 값에 안전하지 않는 문자가 포함되어 있습니다. 설치를 중단합니다."; if($is_json){ die(install_json_msg($msg)); } die($msg); } return array_map_deep('stripslashes', $str); } } if( ! function_exists('install_json_msg') ){ function install_json_msg($msg, $type='error'){ $error_msg = ($type==='error') ? $msg : ''; $success_msg = ($type==='success') ? $msg : ''; $exists_msg = ($type==='exists') ? $msg : ''; return json_encode(array('error'=>$error_msg, 'success'=>$success_msg, 'exists'=>$exists_msg)); } } if( ! function_exists('install_error_log') ){ function install_error_log($message) { $err_file = isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : ''; @error_log('[g5 install] '.$message.' | file: '.$err_file); } } if( ! function_exists('install_html_escape') ){ function install_html_escape($str) { return htmlspecialchars((string) $str, ENT_QUOTES, 'UTF-8'); } } if( ! function_exists('install_db_error') ){ function install_db_error($link=null) { if (function_exists('mysqli_connect') && G5_MYSQLI_USE) { if ($link) { return mysqli_errno($link).' : '.mysqli_error($link); } return mysqli_connect_errno().' : '.mysqli_connect_error(); } if (function_exists('mysql_error')) { return $link ? mysql_errno($link).' : '.mysql_error($link) : mysql_errno().' : '.mysql_error(); } return ''; } } if( ! function_exists('install_db_query') ){ function install_db_query($sql, $link) { if (function_exists('mysqli_query') && G5_MYSQLI_USE) { return @mysqli_query($link, $sql); } return @mysql_query($sql, $link); } } if( ! function_exists('install_db_fetch_row') ){ function install_db_fetch_row($result) { if (!$result) { return false; } if (function_exists('mysqli_fetch_row') && G5_MYSQLI_USE) { return mysqli_fetch_row($result); } return mysql_fetch_row($result); } } if( ! function_exists('install_db_num_rows') ){ function install_db_num_rows($result) { if (!$result) { return 0; } if (function_exists('mysqli_num_rows') && G5_MYSQLI_USE) { return mysqli_num_rows($result); } return mysql_num_rows($result); } } if( ! function_exists('install_db_connect') ){ function install_db_connect($host, $user, $pass, $db) { $result = array('link'=>false, 'error'=>'', 'message'=>''); if (function_exists('mysqli_connect') && G5_MYSQLI_USE) { if (function_exists('mysqli_report')) { mysqli_report(MYSQLI_REPORT_OFF); } $link = @mysqli_connect($host, $user, $pass); if (!$link) { $result['error'] = install_db_error(); $result['message'] = 'MySQL Host, User, Password 정보를 확인해 주십시오.'; return $result; } if (!@mysqli_select_db($link, $db)) { $result['link'] = $link; $result['error'] = install_db_error($link); $result['message'] = 'MySQL DB 정보를 확인해 주십시오.'; return $result; } $result['link'] = $link; return $result; } if (!function_exists('mysql_connect')) { $result['message'] = 'MySQL 확장(mysqli/mysql)이 설치되어 있지 않습니다.'; return $result; } $link = @mysql_connect($host, $user, $pass); if (!$link) { $result['error'] = install_db_error(); $result['message'] = 'MySQL Host, User, Password 정보를 확인해 주십시오.'; return $result; } if (!@mysql_select_db($db, $link)) { $result['link'] = $link; $result['error'] = install_db_error($link); $result['message'] = 'MySQL DB 정보를 확인해 주십시오.'; return $result; } $result['link'] = $link; return $result; } } if( ! function_exists('install_sql_like_escape') ){ function install_sql_like_escape($str) { return str_replace(array('\\', '%', '_'), array('\\\\', '\%', '\_'), $str); } } if( ! function_exists('install_sql_escape') ){ function install_sql_escape($str, $link) { if (function_exists('mysqli_real_escape_string') && G5_MYSQLI_USE) { return mysqli_real_escape_string($link, $str); } return mysql_real_escape_string($str, $link); } } if( ! function_exists('install_table_exists') ){ function install_table_exists($link, $table, &$error='') { $error = ''; $table_like = install_sql_escape(install_sql_like_escape($table), $link); $result = install_db_query("SHOW TABLES LIKE '{$table_like}'", $link); if (!$result) { $error = install_db_error($link); install_error_log('table exists check failed: '.$error.' | table: '.$table); return false; } return install_db_num_rows($result) > 0; } } if( ! function_exists('install_get_existing_tables') ){ function install_get_existing_tables($link, $prefixes) { $tables = array(); foreach ($prefixes as $prefix) { if (!$prefix) { continue; } $table_like = install_sql_escape(install_sql_like_escape($prefix).'%', $link); $result = install_db_query("SHOW TABLES LIKE '{$table_like}'", $link); while ($row = install_db_fetch_row($result)) { if (isset($row[0])) { $tables[$row[0]] = $row[0]; } } } ksort($tables); return array_values($tables); } } if( ! function_exists('install_fail_page') ){ function install_fail_page($message, $link=null, $prefixes=array()) { global $install_progress_started; install_error_log($message); if (!empty($install_progress_started)) { $install_progress_started = false; ?>
설치가 중간에 멈춘 경우 아래 테이블이 일부 생성되었을 수 있습니다. 다시 설치하려면 DB에서 해당 테이블을 정리하거나, 재설치 옵션을 선택한 뒤 진행해 주십시오.