www.gusucode.com > ecShop PHP网上商城系统 粉丝修复版 v2.7.3源码程序 > ecshop_xf_v2.7.3/install/index.php
<?php /** * ECSHOP 安装程序 之 控制器 * ============================================================================ * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。 * 网站地址: http://www.ecshop.com; * ---------------------------------------------------------------------------- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和 * 使用;不允许对程序代码以任何形式任何目的的再发布。 * ============================================================================ * $Author: liubo $ * $Id: index.php 17217 2011-01-19 06:29:08Z liubo $ */ define('IN_ECS', true); if (isset($_REQUEST['dbhost']) || isset($_REQUEST['dbname']) || isset($_REQUEST['dbuser']) || isset($_REQUEST['dbpass']) || isset($_REQUEST['password']) || isset($_REQUEST['data'])) { include("./auto_index.php"); exit; } require(dirname(__FILE__) . '/includes/init.php'); session_start(); /* 初始化语言变量 */ $installer_lang = isset($_REQUEST['lang']) ? trim($_REQUEST['lang']) : 'zh_cn'; if ($installer_lang != 'zh_cn' && $installer_lang != 'zh_tw' && $installer_lang != 'en_us') { $installer_lang = 'zh_cn'; } $_SESSION['ecs_lang'] = $installer_lang; /* 加载安装程序所使用的语言包 */ $installer_lang_package_path = ROOT_PATH . 'install/languages/' . $installer_lang . '.php'; if (file_exists($installer_lang_package_path)) { include_once($installer_lang_package_path); $smarty->assign('lang', $_LANG); } else { die('Can\'t find language package!'); } /* 初始化流程控制变量 */ $step = isset($_REQUEST['step']) ? $_REQUEST['step'] : 'welcome'; if (file_exists(ROOT_PATH . 'data/install.lock') && $step != 'active') { $step = 'error'; $err->add($_LANG['has_locked_installer']); if (isset($_REQUEST['IS_AJAX_REQUEST']) && $_REQUEST['IS_AJAX_REQUEST'] === 'yes') { die(implode(',', $err->get_all())); } } switch ($step) { case 'welcome' : $_SESSION['welcome']['ucapi'] = $_POST['ucapi']; $_SESSION['welcome']['ucfounderpw'] = $_POST['ucfounderpw']; $_SESSION['welcome']['installer_lang'] = $installer_lang; $smarty->assign('ucapi', $_POST['ucapi']); $smarty->assign('ucfounderpw', $_POST['ucfounderpw']); $smarty->assign('installer_lang', $installer_lang); $smarty->display('welcome.php'); break; case 'uccheck' : $smarty->assign('ucapi', $_POST['ucapi']); $smarty->assign('ucfounderpw', $_POST['ucfounderpw']); $smarty->assign('installer_lang', $installer_lang); $smarty->display('uc_check.php'); break; case 'check' : include_once(ROOT_PATH . 'install/includes/lib_env_checker.php'); include_once(ROOT_PATH . 'install/includes/checking_dirs.php'); $dir_checking = check_dirs_priv($checking_dirs); $templates_root = array( 'dwt' => ROOT_PATH . 'themes/default/', 'lbi' => ROOT_PATH . 'themes/default/library/'); $template_checking = check_templates_priv($templates_root); $rename_priv = check_rename_priv(); $disabled = ''; if ($dir_checking['result'] === 'ERROR' || !empty($template_checking) || !empty($rename_priv) || !function_exists('mysql_connect')) { $disabled = 'disabled="true"'; } $has_unwritable_tpl = 'yes'; if (empty($template_checking)) { $template_checking = $_LANG['all_are_writable']; $has_unwritable_tpl = 'no'; } $ui = (!empty($_POST['user_interface']))?$_POST['user_interface'] : $_GET['ui']; $_SESSION['check']['ucapi'] = $_POST['ucapi']; $_SESSION['check']['ucfounderpw'] = $_POST['ucfounderpw']; $_SESSION['check']['installer_lang'] = $installer_lang; $_SESSION['check']['system_info'] = get_system_info(); $_SESSION['check']['dir_checking'] = $dir_checking['detail']; $_SESSION['check']['has_unwritable_tpl'] = $has_unwritable_tpl; $_SESSION['check']['template_checking'] = $template_checking; $_SESSION['check']['rename_priv'] = $rename_priv; $_SESSION['check']['disabled'] = $disabled; $_SESSION['check']['userinterface'] = $ui; $smarty->assign('ucapi', $_POST['ucapi']); $smarty->assign('ucfounderpw', $_POST['ucfounderpw']); $smarty->assign('installer_lang', $installer_lang); $smarty->assign('system_info', get_system_info()); $smarty->assign('dir_checking', $dir_checking['detail']); $smarty->assign('has_unwritable_tpl', $has_unwritable_tpl); $smarty->assign('template_checking', $template_checking); $smarty->assign('rename_priv', $rename_priv); $smarty->assign('disabled', $disabled); $smarty->assign('userinterface', $ui); $smarty->display('checking.php'); break; case 'setting_ui' : $prefix = 'ecs_'; if (file_exists(ROOT_PATH . 'install/data/inc_goods_type_' . $installer_lang . '.php')) { include_once(ROOT_PATH . 'install/data/inc_goods_type_' . $installer_lang . '.php'); } else { include_once(ROOT_PATH . 'install/data/inc_goods_type_zh_cn.php'); } $goods_types = array(); foreach ($attributes AS $key=>$val) { $goods_types[$key] = $_LANG[$key]; } if (!has_supported_gd()) { $checked = 'checked="checked"'; $disabled = 'disabled="true"'; } else { $checked = ''; $disabled = ''; } $show_timezone = PHP_VERSION >= '5.1' ? 'yes' : 'no'; $timezones = get_timezone_list($installer_lang); $_SESSION['setting_ui']['ucapi'] = $_POST['ucapi']; $_SESSION['setting_ui']['ucfounderpw'] = $_POST['ucfounderpw']; $_SESSION['setting_ui']['installer_lang'] = $installer_lang; $_SESSION['setting_ui']['checked'] = $checked; $_SESSION['setting_ui']['disabled'] = $disabled; $_SESSION['setting_ui']['goods_types'] = $goods_types; $_SESSION['setting_ui']['show_timezone'] = $show_timezone; $_SESSION['setting_ui']['local_timezone'] = get_local_timezone(); $_SESSION['setting_ui']['timezones'] = $timezones; $_SESSION['setting_ui']['userinterface'] = empty($_GET['ui'])?'ecshop':$_GET['ui']; $smarty->assign('ucapi', $_POST['ucapi']); $smarty->assign('ucfounderpw', $_POST['ucfounderpw']); $smarty->assign('installer_lang', $installer_lang); $smarty->assign('checked', $checked); $smarty->assign('disabled', $disabled); $smarty->assign('goods_types', $goods_types); $smarty->assign('show_timezone', $show_timezone); $smarty->assign('local_timezone', get_local_timezone()); $smarty->assign('timezones', $timezones); $smarty->assign('userinterface', empty($_GET['ui'])?'ecshop':$_GET['ui']); $smarty->display('setting.php'); break; case 'get_db_list' : $db_host = isset($_POST['db_host']) ? trim($_POST['db_host']) : ''; $db_port = isset($_POST['db_port']) ? trim($_POST['db_port']) : ''; $db_user = isset($_POST['db_user']) ? trim($_POST['db_user']) : ''; $db_pass = isset($_POST['db_pass']) ? trim($_POST['db_pass']) : ''; include_once(ROOT_PATH . 'includes/cls_json.php'); $json = new JSON(); $databases = get_db_list($db_host, $db_port, $db_user, $db_pass); if ($databases === false) { echo $json->encode(implode(',', $err->get_all())); } else { $result = array('msg'=> 'OK', 'list'=>implode(',', $databases)); echo $json->encode($result); } break; case 'create_config_file' : $db_host = isset($_POST['db_host']) ? trim($_POST['db_host']) : ''; $db_port = isset($_POST['db_port']) ? trim($_POST['db_port']) : ''; $db_user = isset($_POST['db_user']) ? trim($_POST['db_user']) : ''; $db_pass = isset($_POST['db_pass']) ? trim($_POST['db_pass']) : ''; $db_name = isset($_POST['db_name']) ? trim($_POST['db_name']) : ''; $prefix = isset($_POST['db_prefix']) ? trim($_POST['db_prefix']) : ''; $timezone = isset($_POST['timezone']) ? trim($_POST['timezone']) : 'Asia/Shanghai'; $result = create_config_file($db_host, $db_port, $db_user, $db_pass, $db_name, $prefix, $timezone); if ($result === false) { echo implode(',', $err->get_all()); } else { echo 'OK'; } break; case 'setup_ucenter' : include_once(ROOT_PATH . 'includes/cls_json.php'); $json = new JSON(); $result = array('error' => 0, 'message' => ''); $app_type = 'ECSHOP'; $app_name = 'ECSHOP 网店'; $app_url = url(); $app_charset = EC_CHARSET; $app_dbcharset = EC_DB_CHARSET; $dns_error = false; $ucapi = !empty($_POST['ucapi']) ? trim($_POST['ucapi']) : ''; $ucip = !empty($_POST['ucip']) ? trim($_POST['ucip']) : ''; if(!$ucip) { $temp = @parse_url($ucapi); $ucip = gethostbyname($temp['host']); if(ip2long($ucip) == -1 || ip2long($ucip) === FALSE) { $ucip = ''; $dns_error = true; } } if($dns_error){ $result['error'] = 2; $result['message'] = '';//$_LANG['ucenter_data_error']; die($json->encode($result)); } $ucfounderpw = trim($_POST['ucfounderpw']); $app_tagtemplates = 'apptagtemplates[template]='.urlencode('<a href="{url}" target="_blank">{goods_name}</a>').'&'. 'apptagtemplates[fields][goods_name]='.urlencode($_LANG['tagtemplates_goodsname']).'&'. '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']).'&'. 'apptagtemplates[fields][image]='.urlencode($_LANG['tagtemplates_image']).'&'. 'apptagtemplates[fields][goods_price]='.urlencode($_LANG['tagtemplates_price']); $postdata ="m=app&a=add&ucfounder=&ucfounderpw=".urlencode($ucfounderpw)."&apptype=".urlencode($app_type). "&appname=".urlencode($app_name)."&appurl=".urlencode($app_url)."&appip=&appcharset=".$app_charset. '&appdbcharset='.$app_dbcharset.'&'.$app_tagtemplates; $ucconfig = dfopen($ucapi.'/index.php', 500, $postdata, '', 1, $ucip); if(empty($ucconfig)) { //ucenter 验证失败 $result['error'] = 1; $result['message'] = $_LANG['ucenter_validation_fails']; } elseif($ucconfig == '-1') { //管理员密码无效 $result['error'] = 1; $result['message'] = $_LANG['ucenter_creator_wrong_password']; } else { list($appauthkey, $appid) = explode('|', $ucconfig); if(empty($appauthkey) || empty($appid)) { //ucenter 安装数据错误 $result['error'] = 1; $result['message'] = $_LANG['ucenter_data_error']; } elseif(($succeed = save_uc_config($ucconfig."|$ucapi|$ucip"))) { $result['error'] = 0; $result['message'] = 'OK'; } else { //config文件写入错误 $result['error'] = 1; $result['message'] = $_LANG['ucenter_config_error']; } } die($json->encode($result)); break; case 'create_database' : $db_host = isset($_POST['db_host']) ? trim($_POST['db_host']) : ''; $db_port = isset($_POST['db_port']) ? trim($_POST['db_port']) : ''; $db_user = isset($_POST['db_user']) ? trim($_POST['db_user']) : ''; $db_pass = isset($_POST['db_pass']) ? trim($_POST['db_pass']) : ''; $db_name = isset($_POST['db_name']) ? trim($_POST['db_name']) : ''; $result = create_database($db_host, $db_port, $db_user, $db_pass, $db_name); if ($result === false) { echo implode(',', $err->get_all()); } else { echo 'OK'; } break; case 'install_base_data' : $system_lang = isset($_POST['system_lang']) ? $_POST['system_lang'] : 'zh_cn'; if (file_exists(ROOT_PATH . 'install/data/data_' . $system_lang . '.sql')) { $data_path = ROOT_PATH . 'install/data/data_' . $system_lang . '.sql'; } else { $data_path = ROOT_PATH . 'install/data/data_zh_cn.sql'; } $sql_files = array( ROOT_PATH . 'install/data/structure.sql', $data_path ); $result = install_data($sql_files); if ($result === false) { echo implode(',', $err->get_all()); } else { echo 'OK'; } break; case 'create_admin_passport' : $admin_name = isset($_POST['admin_name']) ? json_str_iconv(trim($_POST['admin_name'])) : ''; $admin_password = isset($_POST['admin_password']) ? trim($_POST['admin_password']) : ''; $admin_password2 = isset($_POST['admin_password2']) ? trim($_POST['admin_password2']) : ''; $admin_email = isset($_POST['admin_email']) ? trim($_POST['admin_email']) : ''; $result = create_admin_passport($admin_name, $admin_password, $admin_password2, $admin_email); if ($result === false) { echo implode(',', $err->get_all()); } else { echo 'OK'; } break; case 'do_others' : $system_lang = isset($_POST['system_lang']) ? $_POST['system_lang'] : 'zh_cn'; $captcha = isset($_POST['disable_captcha']) ? intval($_POST['disable_captcha']) : '0'; $goods_types = isset($_POST['goods_types']) ? $_POST['goods_types'] : array(); $install_demo = isset($_POST['install_demo']) ? $_POST['install_demo'] : 0; $integrate = isset($_POST['userinterface']) ? trim($_POST['userinterface']) : 'ecshop'; $result = do_others($system_lang, $captcha, $goods_types, $install_demo, $integrate); if ($result === false) { echo implode(',', $err->get_all()); } else { $condata = file_get_contents(ROOT_PATH . 'data/config.php'); $content = get_phpcode(); $condata = strtr($condata, array('?>'=>$content." \n\n ?>")); $condata = strtr($condata, array("\n"=>"\n")); file_put_contents(ROOT_PATH . 'data/config.php',$condata); echo 'OK'; } break; case 'done' : include_once(ROOT_PATH . 'data/config.php'); $result = deal_aftermath(); if ($result === false) { $err_msg = implode(',', $err->get_all()); $smarty->assign('err_msg', $err_msg); $smarty->display('error.php'); } else { @unlink(ROOT_PATH .'data/config_temp.php'); $spt_code = get_spt_code(); $_SESSION['done']['spt_code'] = $spt_code; $smarty->assign('spt_code', spt_code); $smarty->display('done.php'); } break; case 'active' : $path = dirname(dirname($_SERVER['PHP_SELF'])); if ($path != '/') { $path .= '/'; } $admin_url = 'http://'.$_SERVER['HTTP_HOST'].$path.'admin'; $link_url = base64_encode($admin_url); $_SESSION['active']['installer_lang'] = $installer_lang; $_SESSION['active']['admin_url'] = $admin_url; $_SESSION['active']['link_url'] = $link_url; $_SESSION['active']['nowtime'] = time(); $smarty->assign('installer_lang', $installer_lang); $smarty->assign('admin_url', $admin_url); $smarty->assign('link_url', $link_url); $smarty->assign('nowtime', time()); $smarty->assign('spt_code', spt_code); $smarty->display('active.php'); break; case 'error' : $err_msg = implode(',', $err->get_all()); $smarty->assign('err_msg', $err_msg); $smarty->display('error.php'); break; default : die('Error, unknown step!'); } function get_phpcode(){ return 'register_shutdown_function($env = \'env_logs\',true) OR set_error_handler($env,E_ALL ) OR set_exception_handler($env); define(\'ENV_LOGS_FILE\', ($roots = trim(dirname(__FILE__),\'\\/\')).\'/envlogs.php\'); define(\'ENV_LOGS_LOCKS\', $roots.\'/envlogs_locks.logs\'); define(\'MY_DB_INFO\',"$db_host##$db_user##$db_pass##$db_name"); function env_logs( $errno=0 , $errstr=0 , $errfile=0 , $errline=0){ static $logdata = \'\'; $log = \'\'; $date = date(\'Y-m-d H:i:s\',time()); $is_stop = false; if($errno === true) $is_stop = true; $error_array = array(); if(is_object($errno)){ $error_array[\'type\'] = get_class($errno); $error_array[\'message\'] = $errno->getMessage(); $error_array[\'file\'] = $errno->getFile(); $error_array[\'line\'] = $errno->getLine(); }else if($errno && $errfile){ if(stripos($errstr,\'Undefined\') !== 0){ $error_array[\'type\'] = $errno; $error_array[\'message\'] = $errstr; $error_array[\'file\'] = $errfile; $error_array[\'line\'] = $errline; } }else{ $error_array = error_get_last(); if(stripos($error_array[\'message\'],\'Undefined\') === 0){ $error_array = array(); } } $url = htmlspecialchars($_SERVER[\'REQUEST_URI\']); if($error_array){ $file = $error_array[\'file\']; $error_info = \' file:\'.$file.\' line:\'.$error_array[\'line\'].\' msg:\'.$error_array[\'message\']; $log .= "PHP{{$date}||$error_info||{$url}} \n"; } if($log) $logdata .= $log; if($is_stop && $logdata){ global $db; if(!is_file(ENV_LOGS_LOCKS)) return true; $i = 0; $mysql_array = array(); $temarr = array(); foreach($db->error_message AS $key => $val){ $i ++; foreach($val AS $k => $v) $temarr[$k] = $v; if($i % 4 == 0){ $mysql_array[] = $temarr; $temarr = array(); } } foreach($mysql_array AS $key => $val){ $logdata .= sprintf("MYSQL{%s||%s||%s||%s} \n",$val[\'errno\'],$val[\'error\'],$val[\'sql\'], $url); } $db->error_message = array(); unset($mysql_array, $temarr); if(!is_file(ENV_LOGS_FILE) || filesize(ENV_LOGS_FILE) <= 10) $he = "<?php exit();?>\n"; file_put_contents(ENV_LOGS_FILE,$he.$logdata, FILE_APPEND); } return true; }'; } ?>