\n"; $str .= "\t\n"; $str .= ""; echo $str; exit; } else { show_header(); global $step; $title = lang($error_no); $comment = lang($error_no.'_comment', false); $errormsg = ''; if($error_msg) { if(!empty($error_msg)) { foreach ((array)$error_msg as $k => $v) { if(is_numeric($k)) { $comment .= "
  • ".lang($v)."
  • "; } } } } if($step > 0) { echo "
    $title"; } else { echo "
    $title"; } if($quit) { echo '
    '.lang('error_quit_msg').'


    '; } echo '


    '; echo '
    '; $quit && show_footer(); } } function check_db($dbhost, $dbuser, $dbpw, $dbname, $tablepre) { if(!function_exists('mysql_connect') && !function_exists('mysqli_connect')) { show_msg('undefine_func', 'mysql_connect', 0); } $mysqlmode = function_exists('mysql_connect') ? 'mysql' : 'mysqli'; $link = ($mysqlmode == 'mysql') ? @mysql_connect($dbhost, $dbuser, $dbpw) : new mysqli($dbhost, $dbuser, $dbpw); if(!$link) { $errno = ($mysqlmode == 'mysql') ? mysql_errno() : mysqli_errno(); $error = ($mysqlmode == 'mysql') ? mysql_error() : mysqli_error(); if($errno == 1045) { show_msg('database_errno_1045', $error, 0); } elseif($errno == 2003) { show_msg('database_errno_2003', $error, 0); } else { show_msg('database_connect_error', $error, 0); } } else { if($query = (($mysqlmode == 'mysql') ? @mysql_query("SHOW TABLES FROM $dbname") : $link->query("SHOW TABLES FROM $dbname"))) { if(!$query) { return false; } while($row = (($mysqlmode == 'mysql') ? mysql_fetch_row($query) : $query->fetch_row())) { if(preg_match("/^$tablepre/", $row[0])) { return false; } } } } return true; } function dirfile_check(&$dirfile_items) { foreach($dirfile_items as $key => $item) { $item_path = $item['path']; if($item['type'] == 'dir') { if(!dir_writeable(ROOT_PATH.$item_path)) { if(is_dir(ROOT_PATH.$item_path)) { $dirfile_items[$key]['status'] = 0; $dirfile_items[$key]['current'] = '+r'; } else { $dirfile_items[$key]['status'] = -1; $dirfile_items[$key]['current'] = 'nodir'; } } else { $dirfile_items[$key]['status'] = 1; $dirfile_items[$key]['current'] = '+r+w'; } } else { if(file_exists(ROOT_PATH.$item_path)) { if(is_writable(ROOT_PATH.$item_path)) { $dirfile_items[$key]['status'] = 1; $dirfile_items[$key]['current'] = '+r+w'; } else { $dirfile_items[$key]['status'] = 0; $dirfile_items[$key]['current'] = '+r'; } } else { if(dir_writeable(dirname(ROOT_PATH.$item_path))) { $dirfile_items[$key]['status'] = 1; $dirfile_items[$key]['current'] = '+r+w'; } else { $dirfile_items[$key]['status'] = -1; $dirfile_items[$key]['current'] = 'nofile'; } } } } } function env_check(&$env_items) { global $lang; foreach($env_items as $key => $item) { if($key == 'php') { $env_items[$key]['current'] = PHP_VERSION; } elseif($key == 'attachmentupload') { $env_items[$key]['current'] = @ini_get('file_uploads') ? ini_get('upload_max_filesize') : 'unknow'; } elseif($key == 'gdversion') { $tmp = function_exists('gd_info') ? gd_info() : array(); $env_items[$key]['current'] = empty($tmp['GD Version']) ? 'noext' : $tmp['GD Version']; unset($tmp); } elseif($key == 'diskspace') { if(function_exists('disk_free_space')) { $env_items[$key]['current'] = disk_free_space(ROOT_PATH); } else { $env_items[$key]['current'] = 'unknow'; } } elseif(isset($item['c'])) { $env_items[$key]['current'] = constant($item['c']); } elseif($key == 'opcache') { $opcache_data = function_exists('opcache_get_configuration') ? opcache_get_configuration() : array(); $env_items[$key]['current'] = !empty($opcache_data['directives']['opcache.enable']) ? $lang['enable'] : $lang['disable']; } elseif($key == 'curl') { if(function_exists('curl_init') && function_exists('curl_version')){ $v = curl_version(); $env_items[$key]['current'] = $lang['enable'].' '.$v['version']; }else{ $env_items[$key]['current'] = $lang['disable']; } } $env_items[$key]['status'] = 1; if($item['r'] != 'notset' && strcmp($env_items[$key]['current'], $item['r']) < 0) { $env_items[$key]['status'] = 0; } } } function function_check(&$func_items) { foreach($func_items as $item) { function_exists($item) or show_msg('undefine_func', $item, 0); } } function dintval($int, $allowarray = false) { $ret = floatval($int); if($int == $ret || !$allowarray && is_array($int)) return $ret; if($allowarray && is_array($int)) { foreach($int as &$v) { $v = dintval($v, true); } return $int; } elseif($int <= 0xffffffff) { $l = strlen($int); $m = substr($int, 0, 1) == '-' ? 1 : 0; if(($l - $m) === strspn($int,'0987654321', $m)) { return $int; } } return $ret; } function show_env_result(&$env_items, &$dirfile_items, &$func_items, &$filesock_items) { $env_str = $file_str = $dir_str = $func_str = ''; $error_code = 0; foreach($env_items as $key => $item) { if($key == 'php' && strcmp($item['current'], $item['r']) < 0) { show_msg('php_version_too_low', $item['current'], 0); } $status = 1; if($item['r'] != 'notset') { if(dintval($item['current']) && dintval($item['r'])) { if(dintval($item['current']) < dintval($item['r'])) { $status = 0; $error_code = ENV_CHECK_ERROR; } } else { if(strcmp($item['current'], $item['r']) < 0) { $status = 0; $error_code = ENV_CHECK_ERROR; } } } if($key == 'diskspace') { $item['current'] = format_space($item['current']); $item['r'] = format_space($item['r']); } if(VIEW_OFF) { $env_str .= "\t\t\n"; } else { $env_str .= "\n"; $env_str .= "".lang($key)."\n"; $env_str .= "".lang($item['r'])."\n"; $env_str .= "".lang($item['b'])."\n"; $env_str .= ($status ? "" : "").$item['current']."\n"; $env_str .= "\n"; } } foreach($dirfile_items as $key => $item) { $tagname = $item['type'] == 'file' ? 'File' : 'Dir'; $variable = $item['type'].'_str'; if(VIEW_OFF) { if($item['status'] == 0) { $error_code = ENV_CHECK_ERROR; } $$variable .= "\t\t\t\n"; } else { $$variable .= "\n"; $$variable .= "$item[path]".lang('writeable')."\n"; if($item['status'] == 1) { $$variable .= "".lang('writeable')."\n"; } elseif($item['status'] == -1) { $error_code = ENV_CHECK_ERROR; $$variable .= "".lang('nodir')."\n"; } else { $error_code = ENV_CHECK_ERROR; $$variable .= "".lang('unwriteable')."\n"; } $$variable .= "\n"; } } if(VIEW_OFF) { $str = "\n"; $str .= "\t\n"; $str .= $env_str; $str .= "\t\n"; $str .= "\t\n"; $str .= "\t\t\n"; $str .= $dir_str; $str .= "\t\t\n"; $str .= "\t\t\n"; $str .= $file_str; $str .= "\t\t\n"; $str .= "\t\n"; $str .= "\t\n"; $str .= ""; echo $str; exit; } else { show_header(); echo "

    ".lang('env_check')."

    \n"; echo "\n"; echo "\n"; echo "\t\n"; echo "\t\n"; echo "\t\n"; echo "\t\n"; echo "\n"; echo $env_str; echo "
    ".lang('project')."".lang('ucenter_required')."".lang('ucenter_best')."".lang('curr_server')."
    \n"; echo "

    ".lang('priv_check')."

    \n"; echo "\n"; echo "\t\n"; echo "\t\n"; echo "\t\n"; echo "\t\n"; echo "\n"; echo $file_str; echo $dir_str; echo "
    ".lang('step1_file')."".lang('step1_need_status')."".lang('step1_status')."
    \n"; foreach($func_items as $item) { $status = function_exists($item); $func_str .= "\n"; $func_str .= "$item()\n"; if($status) { $func_str .= "".lang('supportted')."\n"; $func_str .= "".lang('none')."\n"; } else { $error_code = ENV_CHECK_ERROR; $func_str .= "".lang('unsupportted')."\n"; $func_str .= "".lang('advice_'.$item)."\n"; } } $func_strextra = ''; $filesock_disabled = 0; foreach($filesock_items as $item) { $status = function_exists($item); $func_strextra .= "\n"; $func_strextra .= "$item()\n"; if($status) { $func_strextra .= "".lang('supportted')."\n"; $func_strextra .= "".lang('none')."\n"; break; } else { $filesock_disabled++; $func_strextra .= "".lang('unsupportted')."\n"; $func_strextra .= "".lang('advice_'.$item)."\n"; } } if($filesock_disabled == count($filesock_items)) { $error_code = ENV_CHECK_ERROR; } echo "

    ".lang('func_depend')."

    \n"; echo "\n"; echo "\n"; echo "\t\n"; echo "\t\n"; echo "\t\n"; echo "\n"; echo $func_str.$func_strextra; echo "
    ".lang('func_name')."".lang('check_result')."".lang('suggestion')."
    \n"; show_next_step(2, $error_code); show_footer(); } } function show_next_step($step, $error_code) { global $uchidden; echo "
    \n"; echo ""; if(isset($GLOBALS['hidden'])) { echo $GLOBALS['hidden']; } echo ""; if($error_code == 0) { $nextstep = "\n"; } else { $nextstep = "\n"; } echo "
    ".$nextstep."
    \n"; echo "
    \n"; } function show_form(&$form_items, $error_msg) { global $step, $uchidden; if(empty($form_items) || !is_array($form_items)) { return; } show_header(); show_setting('start'); show_setting('hidden', 'step', $step); show_setting('hidden', 'install_ucenter', getgpc('install_ucenter')); if($step == 2) { show_tips('install_dzfull'); show_tips('install_dzonly'); } $is_first = 1; if(!empty($uchidden)) { $uc_info_transfer = unserialize(urldecode($uchidden)); } echo '

    '; foreach($form_items as $key => $items) { global ${'error_'.$key}; if($is_first == 0) { echo ''; } if(!${'error_'.$key}) { show_tips('tips_'.$key); } else { show_error('tips_admin_config', ${'error_'.$key}); } echo ''; foreach($items as $k => $v) { $value = ''; if(!empty($error_msg)) { $value = isset($_POST[$key][$k]) ? $_POST[$key][$k] : ''; } if(empty($value)) { if(isset($v['value']) && is_array($v['value'])) { if($v['value']['type'] == 'constant') { $value = defined($v['value']['var']) ? constant($v['value']['var']) : $v['value']['var']; } else { $value = $GLOBALS[$v['value']['var']]; } } else { $value = ''; } } if($k == 'ucurl' && isset($uc_info_transfer['ucapi'])) { $value = $uc_info_transfer['ucapi']; } elseif($k == 'ucpw' && isset($uc_info_transfer['ucfounderpw'])) { $value = $uc_info_transfer['ucfounderpw']; } elseif($k == 'ucip') { $value = ''; } show_setting($k, $key.'['.$k.']', $value, $v['type'], isset($error_msg[$key][$k]) ? $key.'_'.$k.'_invalid' : ''); } if($is_first) { $is_first = 0; } } echo '
    '; echo '
    '; echo ''; show_setting('', 'submitname', 'new_step', ($step == 2 ? 'submit|oldbtn' : 'submit' )); show_setting('end'); show_footer(); } function show_license() { global $self, $uchidden, $step; $next = $step + 1; if(VIEW_OFF) { show_msg('license_contents', lang('license'), 1); } else { show_header(); $license = str_replace(' ', '  ', lang('license')); $lang_agreement_yes = lang('agreement_yes'); $lang_agreement_no = lang('agreement_no'); echo <<
    $license
     
    EOT; show_footer(); } } function transfer_ucinfo(&$post) { global $uchidden; if(isset($post['ucapi']) && isset($post['ucfounderpw'])) { $arr = array( 'ucapi' => $post['ucapi'], 'ucfounderpw' => $post['ucfounderpw'] ); $uchidden = urlencode(serialize($arr)); } else { $uchidden = ''; } } if(!function_exists('file_put_contents')) { function file_put_contents($filename, $s) { $fp = @fopen($filename, 'w'); @fwrite($fp, $s); @fclose($fp); return TRUE; } } function createtable($sql, $dbver) { $type = strtoupper(preg_replace("/^\s*CREATE TABLE\s+.+\s+\(.+?\).*(ENGINE|TYPE)\s*=\s*([a-z]+?).*$/isU", "\\2", $sql)); $type = in_array($type, array('MYISAM', 'HEAP', 'MEMORY')) ? $type : 'MYISAM'; return preg_replace("/^\s*(CREATE TABLE\s+.+\s+\(.+?\)).*$/isU", "\\1", $sql). ($dbver > '4.1' ? " ENGINE=$type DEFAULT CHARSET=".DBCHARSET : " TYPE=$type"); } function dir_writeable($dir) { $writeable = 0; if(!is_dir($dir)) { @mkdir($dir, 0777); } if(is_dir($dir)) { if($fp = @fopen("$dir/test.txt", 'w')) { @fclose($fp); @unlink("$dir/test.txt"); $writeable = 1; } else { $writeable = 0; } } return $writeable; } function dir_clear($dir) { global $lang; showjsmessage($lang['clear_dir'].' '.str_replace(ROOT_PATH, '', $dir)); if($directory = @dir($dir)) { while($entry = $directory->read()) { $filename = $dir.'/'.$entry; if(is_file($filename)) { @unlink($filename); } } $directory->close(); @touch($dir.'/index.htm'); } } function show_header() { define('SHOW_HEADER', TRUE); global $step; $version = DISCUZ_VERSION; $release = DISCUZ_RELEASE; $install_lang = lang(INSTALL_LANG); $title = lang('title_install'); $charset = CHARSET; echo << $title

    $title

    Discuz!$version $install_lang $release EOT; $step > 0 && show_step($step); } function show_footer($quit = true) { echo <<©2001 - 2017 Comsenz Inc.
    EOT; $quit && exit(); } function loginit($logfile) { global $lang; showjsmessage($lang['init_log'].' '.$logfile); if($fp = @fopen('./forumdata/logs/'.$logfile.'.php', 'w')) { fwrite($fp, '<'.'?PHP exit(); ?'.">\n"); fclose($fp); } } function showjsmessage($message) { if(VIEW_OFF) return; echo ''."\r\n"; flush(); ob_flush(); } function random($length) { $hash = ''; $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; $max = strlen($chars) - 1; PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000); for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; } function redirect($url) { echo ""; exit(); } function get_onlineip() { $onlineip = ''; if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $onlineip = $_SERVER['REMOTE_ADDR']; } return $onlineip; } function timezone_set($timeoffset = 8) { if(function_exists('date_default_timezone_set')) { @date_default_timezone_set('Etc/GMT'.($timeoffset > 0 ? '-' : '+').(abs($timeoffset))); } } function save_config_file($filename, $config, $default) { $config = setdefault($config, $default); $date = gmdate("Y-m-d H:i:s", time() + 3600 * 8); $content = << $config)); $content .= "\r\n// ".str_pad(' THE END ', 50, '-', STR_PAD_BOTH)." //\r\n\r\n?>"; file_put_contents($filename, $content); } function setdefault($var, $default) { foreach ($default as $k => $v) { if(!isset($var[$k])) { $var[$k] = $default[$k]; } elseif(is_array($v)) { $var[$k] = setdefault($var[$k], $default[$k]); } } return $var; } function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; $key = md5($key ? $key : UC_KEY); $keya = md5(substr($key, 0, 16)); $keyb = md5(substr($key, 16, 16)); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { return $keyc.str_replace('=', '', base64_encode($result)); } } function generate_key() { $random = random(32); $info = md5($_SERVER['SERVER_SOFTWARE'].$_SERVER['SERVER_NAME'].$_SERVER['SERVER_ADDR'].$_SERVER['SERVER_PORT'].$_SERVER['HTTP_USER_AGENT'].time()); $return = array(); for($i=0; $i<64; $i++) { $p = intval($i/2); $return[$i] = $i % 2 ? $random[$p] : $info[$p]; } return implode('', $return); } function show_install() { if(VIEW_OFF) return; ?>
    query(createtable($query, $db->version())); } else { $db->query($query); } } } } function runucquery($sql, $tablepre) { global $lang, $db; if(!isset($sql) || empty($sql)) return; $sql = str_replace("\r", "\n", str_replace(' uc_', ' '.$tablepre, $sql)); $ret = array(); $num = 0; foreach(explode(";\n", trim($sql)) as $query) { $ret[$num] = ''; $queries = explode("\n", trim($query)); foreach($queries as $query) { $ret[$num] .= (isset($query[0]) && $query[0] == '#') || (isset($query[1]) && isset($query[1]) && $query[0].$query[1] == '--') ? '' : $query; } $num++; } unset($sql); foreach($ret as $query) { $query = trim($query); if($query) { if(substr($query, 0, 12) == 'CREATE TABLE') { $name = preg_replace("/CREATE TABLE ([a-z0-9_]+) .*/is", "\\1", $query); showjsmessage(lang('create_table').' '.$name.' ... '.lang('succeed')); $db->query(createtable($query, $db->version())); } else { $db->query($query); } } } } function charcovert($string) { if(!get_magic_quotes_gpc()) { $string = str_replace('\'', '\\\'', $string); } else { $string = str_replace('\"', '"', $string); } return $string; } function insertconfig($s, $find, $replace) { if(preg_match($find, $s)) { $s = preg_replace($find, $replace, $s); } else { $s .= "\r\n".$replace; } return $s; } function getgpc($k, $t='GP') { $t = strtoupper($t); switch($t) { case 'GP' : isset($_POST[$k]) ? $var = &$_POST : $var = &$_GET; break; case 'G': $var = &$_GET; break; case 'P': $var = &$_POST; break; case 'C': $var = &$_COOKIE; break; case 'R': $var = &$_REQUEST; break; } return isset($var[$k]) ? $var[$k] : null; } function var_to_hidden($k, $v) { return "\n"; } function fsocketopen($hostname, $port = 80, &$errno, &$errstr, $timeout = 15) { $fp = ''; if(function_exists('fsockopen')) { $fp = @fsockopen($hostname, $port, $errno, $errstr, $timeout); } elseif(function_exists('pfsockopen')) { $fp = @pfsockopen($hostname, $port, $errno, $errstr, $timeout); } elseif(function_exists('stream_socket_client')) { $fp = @stream_socket_client($hostname.':'.$port, $errno, $errstr, $timeout); } return $fp; } function dfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE, $encodetype = 'URLENCODE', $allowcurl = TRUE) { $return = ''; $matches = parse_url($url); $scheme = $matches['scheme']; $host = $matches['host']; $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/'; $port = !empty($matches['port']) ? $matches['port'] : 80; if(function_exists('curl_init') && $allowcurl) { $ch = curl_init(); $ip && curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: ".$host)); curl_setopt($ch, CURLOPT_URL, $scheme.'://'.($ip ? $ip : $host).':'.$port.$path); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if($post) { curl_setopt($ch, CURLOPT_POST, 1); if($encodetype == 'URLENCODE') { curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } else { parse_str($post, $postarray); curl_setopt($ch, CURLOPT_POSTFIELDS, $postarray); } } if($cookie) { curl_setopt($ch, CURLOPT_COOKIE, $cookie); } curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $data = curl_exec($ch); $status = curl_getinfo($ch); $errno = curl_errno($ch); curl_close($ch); if($errno || $status['http_code'] != 200) { return; } else { return !$limit ? $data : substr($data, 0, $limit); } } if($post) { $out = "POST $path HTTP/1.0\r\n"; $header = "Accept: */*\r\n"; $header .= "Accept-Language: zh-cn\r\n"; $boundary = $encodetype == 'URLENCODE' ? '' : '; boundary='.trim(substr(trim($post), 2, strpos(trim($post), "\n") - 2)); $header .= $encodetype == 'URLENCODE' ? "Content-Type: application/x-www-form-urlencoded\r\n" : "Content-Type: multipart/form-data$boundary\r\n"; $header .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $header .= "Host: $host:$port\r\n"; $header .= 'Content-Length: '.strlen($post)."\r\n"; $header .= "Connection: Close\r\n"; $header .= "Cache-Control: no-cache\r\n"; $header .= "Cookie: $cookie\r\n\r\n"; $out .= $header.$post; } else { $out = "GET $path HTTP/1.0\r\n"; $header = "Accept: */*\r\n"; $header .= "Accept-Language: zh-cn\r\n"; $header .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $header .= "Host: $host:$port\r\n"; $header .= "Connection: Close\r\n"; $header .= "Cookie: $cookie\r\n\r\n"; $out .= $header; } $fpflag = 0; if(!$fp = @fsocketopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout)) { $context = array( 'http' => array( 'method' => $post ? 'POST' : 'GET', 'header' => $header, 'content' => $post, 'timeout' => $timeout, ), ); $context = stream_context_create($context); $fp = @fopen($scheme.'://'.($ip ? $ip : $host).':'.$port.$path, 'b', false, $context); $fpflag = 1; } if(!$fp) { return ''; } else { stream_set_blocking($fp, $block); stream_set_timeout($fp, $timeout); @fwrite($fp, $out); $status = stream_get_meta_data($fp); if(!$status['timed_out']) { while (!feof($fp) && !$fpflag) { if(($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) { break; } } $stop = false; while(!feof($fp) && !$stop) { $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit)); $return .= $data; if($limit) { $limit -= strlen($data); $stop = $limit <= 0; } } } @fclose($fp); return $return; } } function check_env() { global $lang, $attachdir; $errors = array('quit' => false); $quit = false; if(!function_exists('mysql_connect') && !function_exists('mysqli_connect')) { $errors[] = 'mysql_unsupport'; $quit = true; } if(PHP_VERSION < '4.3') { $errors[] = 'php_version_430'; $quit = true; } if(!file_exists(ROOT_PATH.'./config.inc.php')) { $errors[] = 'config_nonexistence'; $quit = true; } elseif(!is_writeable(ROOT_PATH.'./config.inc.php')) { $errors[] = 'config_unwriteable'; $quit = true; } $checkdirarray = array( 'attach' => $attachdir, 'forumdata' => './forumdata', 'cache' => './forumdata/cache', 'ftemplates' => './forumdata/templates', 'threadcache' => './forumdata/threadcaches', 'log' => './forumdata/logs', 'uccache' => './uc_client/data/cache' ); foreach($checkdirarray as $key => $dir) { if(!dir_writeable(ROOT_PATH.$dir)) { $langkey = $key.'_unwriteable'; $errors[] = $key.'_unwriteable'; if(!in_array($key, array('ftemplate'))) { $quit = TRUE; } } } $errors['quit'] = $quit; return $errors; } function show_error($type, $errors = '', $quit = false) { global $lang, $step; $title = lang($type); $comment = lang($type.'_comment', false); $errormsg = ''; if($errors) { if(!empty($errors)) { foreach ((array)$errors as $k => $v) { if(is_numeric($k)) { $comment .= "
  • ".lang($v)."
  • "; } } } } if($step > 0) { echo "
    $title
      $comment
    "; } else { echo "
    $title
      $comment
    "; } if($quit) { echo '
    '.$lang['error_quit_msg'].'





    '; } echo '
    '; $quit && show_footer(); } function show_tips($tip, $title = '', $comment = '', $style = 1) { global $lang; $title = empty($title) ? lang($tip) : $title; $comment = empty($comment) ? lang($tip.'_comment', FALSE) : $comment; if($style) { echo "
    $title"; } else { echo "
    $title
      "; } $comment && print('
      '.$comment); echo "
    "; } function show_setting($setname, $varname = '', $value = '', $type = 'text|password|checkbox', $error = '') { if($setname == 'start') { echo "
    \n"; return; } elseif($setname == 'end') { echo "\n
    \n\n"; return; } elseif($setname == 'hidden') { echo "\n"; return; } echo "\n".' '.(empty($setname) ? '' : lang($setname).':')."\n"; if($type == 'text' || $type == 'password') { $value = dhtmlspecialchars($value); echo ""; } elseif(strpos($type, 'submit') !== FALSE) { if(strpos($type, 'oldbtn') !== FALSE) { echo "\n"; } $value = empty($value) ? 'next_step' : $value; echo "\n"; } elseif($type == 'checkbox') { if(!is_array($varname) && !is_array($value)) { echo "\n"; } } else { echo $value; } echo "\n"; if($error) { $comment = ''.(is_string($error) ? lang($error) : lang($setname.'_error')).''; } else { $comment = lang($setname.'_comment', false); } echo "$comment\n\n"; return true; } function show_step($step) { global $method; $laststep = 4; $title = lang('step_'.$method.'_title'); $comment = lang('step_'.$method.'_desc'); $step_title_1 = lang('step_title_1'); $step_title_2 = lang('step_title_2'); $step_title_3 = lang('step_title_3'); $step_title_4 = lang('step_title_4'); $stepclass = array(); for($i = 1; $i <= $laststep; $i++) { $stepclass[$i] = $i == $step ? 'current' : ($i < $step ? '' : 'unactivated'); } $stepclass[$laststep] .= ' last'; echo <<

    $title

    $comment

    • $step_title_1
    • $step_title_2
    • $step_title_3
    • $step_title_4
    EOT; } function lang($lang_key, $force = true) { return isset($GLOBALS['lang'][$lang_key]) ? $GLOBALS['lang'][$lang_key] : ($force ? $lang_key : ''); } function check_adminuser($username, $password, $email) { include ROOT_PATH.CONFIG_UC; include ROOT_PATH.'./uc_client/client.php'; $error = ''; $ucresult = uc_user_login($username, $password); list($tmp['uid'], $tmp['username'], $tmp['password'], $tmp['email']) = uc_addslashes($ucresult); $ucresult = $tmp; if($ucresult['uid'] <= 0) { $uid = uc_user_register($username, $password, $email); if($uid == -1 || $uid == -2) { $error = 'admin_username_invalid'; } elseif($uid == -4 || $uid == -5 || $uid == -6) { $error = 'admin_email_invalid'; } elseif($uid == -3) { $error = 'admin_exist_password_error'; } } else { $uid = $ucresult['uid']; $email = $ucresult['email']; $password = $ucresult['password']; } if(!$error && $uid > 0) { $password = md5($password); uc_user_addprotected($username, ''); } else { $uid = 0; $error = empty($error) ? 'error_unknow_type' : $error; } return array('uid' => $uid, 'username' => $username, 'password' => $password, 'email' => $email, 'error' => $error); } function save_uc_config($config, $file) { $success = false; list($appauthkey, $appid, $ucdbhost, $ucdbname, $ucdbuser, $ucdbpw, $ucdbcharset, $uctablepre, $uccharset, $ucapi, $ucip) = $config; $link = function_exists('mysql_connect') ? mysql_connect($ucdbhost, $ucdbuser, $ucdbpw, 1) : new mysqli($ucdbhost, $ucdbuser, $ucdbpw, $ucdbname); $uc_connnect = $link ? 'mysql' : ''; $date = gmdate("Y-m-d H:i:s", time() + 3600 * 8); $year = date('Y'); $config = << EOT; if($fp = fopen($file, 'w')) { fwrite($fp, $config); fclose($fp); $success = true; } return $success; } function _generate_key() { $random = random(32); $info = md5($_SERVER['SERVER_SOFTWARE'].$_SERVER['SERVER_NAME'].$_SERVER['SERVER_ADDR'].$_SERVER['SERVER_PORT'].$_SERVER['HTTP_USER_AGENT'].time()); $return = array(); for($i=0; $i<32; $i++) { $return[$i] = $random[$i].$info[$i]; } return implode('', $return); } function uc_write_config($config, $file, $password) { list($appauthkey, $appid, $ucdbhost, $ucdbname, $ucdbuser, $ucdbpw, $ucdbcharset, $uctablepre, $uccharset, $ucapi, $ucip) = $config; $ucauthkey = _generate_key(); $ucsiteid = _generate_key(); $ucmykey = _generate_key(); $salt = substr(_generate_key(), 0, 6); $pw = md5(md5($password).$salt); $config = "{subject}').'&'. 'apptagtemplates[fields][subject]='.urlencode($lang['tagtemplates_subject']).'&'. 'apptagtemplates[fields][uid]='.urlencode($lang['tagtemplates_uid']).'&'. 'apptagtemplates[fields][username]='.urlencode($lang['tagtemplates_username']).'&'. 'apptagtemplates[fields][dateline]='.urlencode($lang['tagtemplates_dateline']).'&'. 'apptagtemplates[fields][url]='.urlencode($lang['tagtemplates_url']); $db->query("INSERT INTO {$uctablepre}applications SET name='Discuz! Board', url='$appurl', ip='$ucip', authkey='$appauthkey', synlogin='1', charset='$charset', dbcharset='$dbcharset', type='DISCUZX', recvnote='1', tagtemplates='$apptagtemplates'", $link); $appid = $db->insert_id($link); $db->query("ALTER TABLE {$uctablepre}notelist ADD COLUMN app$appid tinyint NOT NULL"); $config = array($appauthkey,$appid,$ucdbhost,$ucdbname,$ucdbuser,$ucdbpw,$ucdbcharset,$uctablepre,$uccharset,$ucapi,$ucip); save_uc_config($config, ROOT_PATH.'./config/config_ucenter.php'); $salt = substr(uniqid(rand()), -6); $passwordmd5 = md5(md5($password).$salt); $db->query("INSERT INTO {$uctablepre}members SET $sqladd username='$username', password='$passwordmd5', email='$email', regip='hidden', regdate='".time()."', salt='$salt'"); $uid = $db->insert_id(); $db->query("INSERT INTO {$uctablepre}memberfields SET uid='$uid'"); $db->query("INSERT INTO {$uctablepre}admins SET uid='$uid', username='$username', allowadminsetting='1', allowadminapp='1', allowadminuser='1', allowadminbadword='1', allowadmincredits='1', allowadmintag='1', allowadminpm='1', allowadmindomain='1', allowadmindb='1', allowadminnote='1', allowadmincache='1', allowadminlog='1'"); uc_write_config($config, ROOT_PATH.'./uc_server/data/config.inc.php', $password); @unlink(ROOT_PATH.'./uc_server/install/index.php'); @unlink(ROOT_PATH.'./uc_server/data/cache/settings.php'); @touch(ROOT_PATH.'./uc_server/data/upgrade.lock'); @touch(ROOT_PATH.'./uc_server/data/install.lock'); dir_clear(ROOT_PATH.'./uc_server/data/cache'); dir_clear(ROOT_PATH.'./uc_server/data/view'); } function install_data($username, $uid) { global $_G, $db, $tablepre; showjsmessage(lang('install_data')." ... ".lang('succeed')); $_G = array('db'=>$db,'tablepre'=>$tablepre, 'uid'=>$uid, 'username'=>$username); $arr = array( 0=> array('importfile'=>'./data/group_index.xml','primaltplname'=>'group/index', 'targettplname'=>'group/index'), ); foreach ($arr as $v) { import_diy($v['importfile'], $v['primaltplname'], $v['targettplname']); } } function install_testdata($username, $uid) { global $_G, $db, $tablepre; showjsmessage(lang('install_test_data')." ... ".lang('succeed')); $sqlfile = ROOT_PATH.'./install/data/common_district_{#id}.sql'; for($i = 1; $i < 4; $i++) { $sqlfileid = str_replace('{#id}', $i, $sqlfile); if(file_exists($sqlfileid)) { $sql = file_get_contents($sqlfileid); $sql = str_replace("\r\n", "\n", $sql); runquery($sql); } } } function getvars($data, $type = 'VAR') { $evaluate = ''; foreach($data as $key => $val) { if(!preg_match("/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/", $key)) { continue; } if(is_array($val)) { $evaluate .= buildarray($val, 0, "\${$key}")."\r\n"; } else { $val = addcslashes($val, '\'\\'); $evaluate .= $type == 'VAR' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n"; } } return $evaluate; } function buildarray($array, $level = 0, $pre = '$_config') { static $ks; if($level == 0) { $ks = array(); $return = ''; } foreach ($array as $key => $val) { if($level == 0) { $newline = str_pad(' CONFIG '.strtoupper($key).' ', 70, '-', STR_PAD_BOTH); $return .= "\r\n// $newline //\r\n"; if($key == 'admincp') { $newline = str_pad(' Founders: $_config[\'admincp\'][\'founder\'] = \'1,2,3\'; ', 70, '-', STR_PAD_BOTH); $return .= "// $newline //\r\n"; } } $ks[$level] = $ks[$level - 1]."['$key']"; if(is_array($val)) { $ks[$level] = $ks[$level - 1]."['$key']"; $return .= buildarray($val, $level + 1, $pre); } else { $val = is_string($val) || strlen($val) > 12 || !preg_match("/^\-?[1-9]\d*$/", $val) ? '\''.addcslashes($val, '\'\\').'\'' : $val; $return .= $pre.$ks[$level - 1]."['$key']"." = $val;\r\n"; } } return $return; } function save_diy_data($primaltplname, $targettplname, $data, $database = false) { global $_G; if (empty($data) || !is_array($data)) return false; $_G['curtplbid'] = array(); $_G['curtplframe'] = array(); $tpldirectory = './template/default'; $file = '.'.$tpldirectory.'/'.$primaltplname.'.htm'; $content = file_get_contents(realpath($file)); foreach ($data['layoutdata'] as $key => $value) { $html = ''; $html .= '
    '; $html .= getframehtml($value); $html .= '
    '; $content = preg_replace("/(\<\!\-\-\[diy\=$key\]\-\-\>).+?(\<\!\-\-\[\/diy\]\-\-\>)/is", "\\1".$html."\\2", $content); } $content = preg_replace("/(\