标签: 源码

  • 小说网站源码带管理后台手机端和采集

    源码https://www.123pan.com/s/88PHjv-fDRC.html

    搭建教程,安装宝塔php7.2,绑定域名,上传源码到根目录解压

    小说网站源码带管理后台手机端和采集

  • 高迪同款盲盒先生源码

    1.该盲盒源码完全开源,方便二次开发和自定义定制。每个组件都有详细的代码注释,易于理解。
    2.适用于多个平台的运行,包括iOS、Android、Web等。
    3.支持多种功能扩展,包括分享、支付、客服等。
    4.界面设计简洁明了,易于使用和操作。

    下载链接:https://pan.baidu.com/s/1QwEjnpEWGnugy0pjacUfOA?pwd=wrk8 

    提取码:wrk8

    高迪同款盲盒先生源码

    高迪同款盲盒先生源码

  • 2023年小额贷款源码新增推广APP下载页

    上传到根目录  导入数据库  修改数据库链接

    后台/admin.php

    账号密码都是 admin

    链接:https://pan.baidu.com/s/19TyZYm467Dx30grDwGu0MA?pwd=im90

    提取码:im90

    2023年小额贷款源码新增推广APP下载页

    2023年小额贷款源码新增推广APP下载页

  • H5随机短视频滑动版带打赏源码V1.3

    H5随机短视频滑动版带打赏源码V1.3

    H5随机短视频滑动版带打赏源码V1.3

    全新H5滑动屏幕观看,可封装APP软件或嵌入式观看,网站引流必备源码!

    数据来源抖音和快手官方短视频链接,无任何违规内容!

    可自行添加广告等等!

    手机端完美支持滑动屏幕观看(向上或向右)滑动,将会自动播放下一个视频!或点击左边开启连续自动播放下一个视频(默认自动播放下一个视频)

    将源码上传到虚拟空间解压缩即可,支持上传二级目录访问,

    (ks.txt)为存储短视频源链接,可自行增加或修改

    后台地址; 访问你的域名/admin.php

    后台默认账号密码 admin 123456

    后台管理可设置广告推荐,弹窗提示时间段,可设置本地读取播放源或其他站外的播放源链接

    下载地址:

    https://xiaok.lanzoum.com/ilkYy19d9e8f

  • 打赏台多合一支付收款HTML源码

    打赏台多合一支付收款HTML源码

    打赏台多合一支付收款HTML源码

    多合一打赏支付收款(微信、QQ、支付宝)

    源码直接上传到空间解压缩即可访问,或者用本地浏览器打开访问

    PS;只需要将自己的收款二维码替换即可,或用改图工具将压缩包的(二维码图片素材.zip)解压缩后,再p图

    该源码全开源无加密,所有操作均在本地无需调用外部资源防止失效!

     

    下载地址;

    https://zhiyun.lanzoue.com/iAa0M195607e

  • 首发悬赏算命测算源码

    首发悬赏算命测算源码

    可以用二维码收款 可以直接拿来运营吸金!

    用户可以通过发布悬赏赏金算命,也可以通过升级发布测算任务来吸金

    下载地址: https://pan.baidu.com/s/1-tzqITG3yhaMAVVKpyXGUg?pwd=qvma

    提取码:qvma

    安装教程:

    测试环境:php5.6+apache2.4+mysq5.6

    安装:

    1.源码解压到根目录

    修改 \Application\Common\Conf\db.php 文件配置数据库

    修改 \Application\Common\Conf\config.php 文件配置邮件   设置邮箱信息        微信支付在139行

    易支付修改:Application/api/controller/yipaycontroller.class.php    14行

    支付宝Application/api/controller/codepaycontroller.class.php   121行

    个人免签支付配置     Application/api/controller/payapicontroller.class.php  14行

    短信修改

    \Application\Home\Controller\PublicController.class.php 

    短信平台是短信宝

    添加提现飘屏弹幕:Application/Home/Controller/IndexController.class.php  316行开始直接复制粘贴

    导入数据库文件

    后台地址:http://你的域名/index.php/Admin/

    用户名:admin 密码:123456

    首发悬赏算命测算源码首发悬赏算命测算源码首发悬赏算命测算源码首发悬赏算命测算源码

  • 杰奇1.7原版开发源码 – 带所有原版注释,非反编译版本

    今天翻垃圾翻出来了杰奇的原版开发源码,有需要的自取,原版开发源码,带所有注释,和市面上的反编译版本还是有很大的区别的。

    完整代码仅限VIP下载。这里免费给出此代码对应的global.php代码,这应该是杰奇最核心的代码了。

    <?php
    /**
     * 通用预处理文件
     *
     * 定义系统函数、变量,程序预处理
     * 
     * 调用模板:无
     * 
     * @category   jieqicms
     * @package    system
     * @copyright  Copyright (c) Hangzhou Jieqi Network Technology Co.,Ltd. (http://www.jieqi.com)
     * @author     $Author: juny $
     * @version    $Id: global.php 332  09:15:08Z juny $
     */
    
    $tmpvar = explode(' ', microtime());
    define('JIEQI_START_TIME', $tmpvar[1] + $tmpvar[0]);
    if(defined('JIEQI_PHP_CLI')) exit('error defined JIEQI_PHP_CLI');
    if((!empty($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] == $_SERVER['argv'][0]) || (empty($_SERVER['SCRIPT_FILENAME']) && !empty($_SERVER['argv'][0]))) define('JIEQI_PHP_CLI', 1);
    else define('JIEQI_PHP_CLI', 0);
    if(defined('JIEQI_SCRIPT_FILENAME')) exit('error defined JIEQI_SCRIPT_FILENAME');
    $tmpvar = (!empty($_SERVER['PATH_TRANSLATED']) && substr($_SERVER['PATH_TRANSLATED'],-4)=='.php') ? $_SERVER['PATH_TRANSLATED'] : $_SERVER['SCRIPT_FILENAME'];
    define('JIEQI_SCRIPT_FILENAME', str_replace(array('\\\\','\\'),'/',$tmpvar));
    if(!defined('JIEQI_SITE_ID')) define('JIEQI_SITE_ID', 0); //网站序号,0表示主站,大于0的表示分站
    //包含系统全局参数
    include_once('configs/define.php');
    if(defined('JIEQI_LOCAL_HOST')) exit('error defined JIEQI_LOCAL_HOST');
    if($_SERVER['HTTP_HOST'] == '' && JIEQI_URL != '') define('JIEQI_LOCAL_HOST', str_replace(array('http://', 'https://'), '', JIEQI_URL));
    else define('JIEQI_LOCAL_HOST', $_SERVER['HTTP_HOST']);
    $_SERVER['PHP_SELF'] = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES);
    define("JIEQI_NOW_TIME", time());  //系统时间
    define("JIEQI_VERSION","1.70");  //系统版本
    //Free(F), Popular(O), Standard(S), Professional(P), Enterprise(E), Deluxe(D), Custom(C)
    //在认证文件里面授权
    //define('JIEQI_VERSION_TYPE', 'Standard'); //版本类型
    define('JIEQI_GLOBAL_INCLUDE',true);  //包含global标记
    if(!defined('JIEQI_ROOT_PATH')) @define('JIEQI_ROOT_PATH', str_replace(array('\\\\','\\'),'/',dirname(__FILE__)));  //物理根路径
    
    if(!defined('JIEQI_COOKIE_DOMAIN')) define('JIEQI_COOKIE_DOMAIN', strval(@ini_get('session.cookie_domain')));
    elseif(JIEQI_COOKIE_DOMAIN != '') @ini_set('session.cookie_domain', JIEQI_COOKIE_DOMAIN);
    define('JIEQI_SYSTEM_CHARSET', 'gbk'); //系统代码语言
    //本机完整地址
    if(JIEQI_URL == '') define('JIEQI_LOCAL_URL', 'http://'.$_SERVER['HTTP_HOST']);
    else define('JIEQI_LOCAL_URL', JIEQI_URL);
    //主服务器地址
    if(!defined('JIEQI_MAIN_SERVER') || JIEQI_MAIN_SERVER == '') define('JIEQI_MAIN_URL', JIEQI_LOCAL_URL);
    else define('JIEQI_MAIN_URL', JIEQI_MAIN_SERVER);
    //用户入口地址
    if(!defined('JIEQI_USER_ENTRY') || JIEQI_USER_ENTRY == '') define('JIEQI_USER_URL', JIEQI_LOCAL_URL);
    else define('JIEQI_USER_URL', JIEQI_USER_ENTRY);
    
    //错误模式
    define('JIEQI_ERROR_RETURN', 1);  //只返回
    define('JIEQI_ERROR_PRINT', 2);  //打印错误并继续
    define('JIEQI_ERROR_DIE', 4);  //显示错误并停止
    
    //默认用户组
    define('JIEQI_GROUP_USER', 3);  //登录用户
    define('JIEQI_GROUP_ADMIN', 2);  //系统管理员
    define('JIEQI_GROUP_GUEST', 1);  //游客
    
    // 区块位置
    define("JIEQI_SIDEBLOCK_CUSTOM",-1);  //自定义
    define("JIEQI_SIDEBLOCK_LEFT",0);  //左
    define("JIEQI_SIDEBLOCK_RIGHT",1);  //右
    define("JIEQI_CENTERBLOCK_LEFT",2);  //中左
    define("JIEQI_CENTERBLOCK_RIGHT",3);  //中右
    define("JIEQI_CENTERBLOCK_TOP",4);  //中上
    define("JIEQI_CENTERBLOCK_MIDDLE",5);  //中中
    define("JIEQI_CENTERBLOCK_BOTTOM",6);  //中下
    define("JIEQI_TOPBLOCK_ALL",7);  //顶部
    define("JIEQI_BOTTOMBLOCK_ALL",8);  //底部
    
    //数据显示类型
    define('JIEQI_TYPE_TXTBOX', 1);  //单行文本
    define('JIEQI_TYPE_TXTAREA', 2);  //多行文本
    define('JIEQI_TYPE_INT', 3);  //整数
    define('JIEQI_TYPE_NUM', 4);  //数字
    define('JIEQI_TYPE_PASSWORD', 5);  //密码
    define('JIEQI_TYPE_HIDDEN', 6);  //隐藏域
    define('JIEQI_TYPE_SELECT', 7);  //下拉单选
    define('JIEQI_TYPE_MULSELECT', 8);  //下拉多选
    define('JIEQI_TYPE_RADIO', 9);  //单选
    define('JIEQI_TYPE_CHECKBOX', 10);  //多选
    define('JIEQI_TYPE_LABEL', 11);  //文字文本
    define('JIEQI_TYPE_FILE', 12);  //文件上传
    define('JIEQI_TYPE_DATE', 13);  //日期
    define('JIEQI_TYPE_UBB', 14);  //ubb代码
    define('JIEQI_TYPE_HTML', 15);  //html代码
    define('JIEQI_TYPE_CODE', 16);  //程序代码
    define('JIEQI_TYPE_SCRIPT', 17);  //网页脚本javascript/vbscript
    define('JIEQI_TYPE_OTHER', 20);  //其他
    
    //打开窗口方式
    define('JIEQI_TARGET_SELF', 'self'); //自身窗口
    define('JIEQI_TARGET_NEW', 'blank'); //新开窗口
    define('JIEQI_TARGET_TOP', 'top'); //弹出小窗口
    
    //内容格式
    define('JIEQI_CONTENT_TXT', 0); //文本
    define('JIEQI_CONTENT_HTML', 1); //html
    define('JIEQI_CONTENT_JS', 2); //js文件
    define('JIEQI_CONTENT_MIX', 3); //html和script混合
    define('JIEQI_CONTENT_PHP', 4); //php
    
    //图片格式
    $jieqi_image_type=array(1=>'.gif', 2=>'.jpg', 3=>'.jpeg', 4=>'.png', 5=>'.bmp');
    //文件后缀名统一定义
    $jieqi_file_postfix=array('txt'=>'.txt', 'html'=>'.html', 'htm'=>'.htm', 'xml'=>'.xml', 'php'=>'.php', 'js'=>'.js', 'css'=>'.css', 'zip'=>'.zip', 'jar'=>'.jar', 'jad'=>'.jad', 'umd'=>'.umd', 'opf'=>'.opf');
    //编码类型
    $jieqi_charset_type=array('gb'=>'gbk', 'gbk'=>'gbk', 'gb2312'=>'gbk', 'big5'=>'big5', 'utf8'=>'utf-8', 'utf-8'=>'utf-8');
    
    //******************************************************
    //预处理
    //******************************************************
    
    //php5的时区问题
    //if(function_exists('date_default_timezone_set')) @date_default_timezone_set('PRC');
    
    //外部引入资料不自动加反斜线溢出字元
    @set_magic_quotes_runtime(0);
    //错误显示模式
    if(JIEQI_ERROR_MODE == 0){
    	@ini_set('display_errors', 0);
    	@error_reporting(0);
    }elseif(JIEQI_ERROR_MODE == 1){
    	@ini_set('display_errors', 1);
    	@error_reporting(E_ALL & ~E_NOTICE);
    }elseif(JIEQI_ERROR_MODE == 2){
    	@ini_set('display_errors', 1);
    	@error_reporting(E_ALL);
    }
    
    //显示版权信息
    if(isset($_GET['show_jieqi_version']) && $_GET['show_jieqi_version'] == 1){
    	echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset='.JIEQI_SYSTEM_CHARSET.'" /><title>Version Info</title></head><body>Site name: '.JIEQI_SITE_NAME.'<br />URL: '.JIEQI_URL.'<br />Version: JIEQI CMS V'.JIEQI_VERSION.'<br />Powered by <a href="http://www.jieqi.com">JIEQI CMS</a><br /><br />License key:<br />'.JIEQI_LICENSE_KEY.'</body></html>';
    	exit;
    }
    //检查访问许可(后台管理可以不检查)
    //0-校验  1-授权域名 2-授权模块
    if(defined('JIEQI_MODULE_VTYPE')) exit('error defined JIEQI_MODULE_VTYPE');
    $jieqi_license_ary=jieqi_funtoarray('base64_decode', explode('@', JIEQI_LICENSE_KEY));
    if(!empty($jieqi_license_ary[1]) && !empty($jieqi_license_ary[2]))	$jieqi_license_modules=jieqi_strtosary($jieqi_license_ary[2], '=', '|');
    else $jieqi_license_modules=array();
    $matchs=array();
    if(empty($jieqi_license_modules) || (JIEQI_LOCAL_HOST == '' && JIEQI_PHP_CLI == 1 && ALLOW_PHP_CLI == 1) || preg_match('/^'.preg_quote(str_replace(array('\\\\','\\'),'/',JIEQI_ROOT_PATH), '/').'\/(admin|install|logout\.php)/is', JIEQI_SCRIPT_FILENAME) || preg_match('/^(http:\/\/|https:\/\/)?[^\/\?]*(localhost|127.0.0.1)/i', JIEQI_LOCAL_HOST, $matchs)){
    	//不检查授权
    }else{
    	//检查域名授权
    	$site_is_licensed=false;
    	if (!empty($jieqi_license_ary[1]) && preg_match('/^(http:\/\/|https:\/\/)?[^\/\?]*('.$jieqi_license_ary[1].')/i', JIEQI_LOCAL_HOST, $matchs)){
    		$jieqi_license_domain = $jieqi_license_ary[1];
    		$tmpvar=md5($jieqi_license_ary[1].$jieqi_license_ary[2].'jnyzn090211');
    		if($tmpvar[0]==$jieqi_license_ary[0][0] && $tmpvar[9]==$jieqi_license_ary[0][9] && $tmpvar[2]==$jieqi_license_ary[0][2] && $tmpvar[11]==$jieqi_license_ary[0][11]) $site_is_licensed=true;
    	}
    	//域名没有授权
    	if(!$site_is_licensed){
    		header('Content-type:text/html;charset='.JIEQI_SYSTEM_CHARSET);
    		if(defined('JIEQI_IS_OPEN') && JIEQI_IS_OPEN == 0) echo JIEQI_CLOSE_INFO;
    		else echo 'License check error!<br />Domain: '.JIEQI_LOCAL_HOST.'<br />Module: '.JIEQI_MODULE_NAME.'<br /><br />Powered by <a href="http://www.jieqi.com" target="_blank">JIEQI CMS</a>';
    		exit;
    	}
    }
    //设置系统和模块版本
    if(isset($jieqi_license_modules[JIEQI_MODULE_NAME]) && isset($jieqi_license_modules['system'])){
    	@define('JIEQI_VERSION_TYPE', $jieqi_license_modules['system']); //系统版本类型
    	@define('JIEQI_MODULE_VTYPE', $jieqi_license_modules[JIEQI_MODULE_NAME]); //模块版本
    }else{
    	@define('JIEQI_VERSION_TYPE', 'ok');
    	@define('JIEQI_MODULE_VTYPE', 'ok');
    }
    
    //是否启用PATH_INFO
    if (isset($_SERVER['PATH_INFO']) && defined('JIEQI_PATH_INFO') && JIEQI_PATH_INFO > 0) {
    	$tmpary = explode('/', str_replace(array("'", '"', '.htm', '.html'), '', substr($_SERVER['PATH_INFO'], 1)));
    	$tmpcot = count($tmpary);
    	for($i = 0; $i < $tmpcot; $i += 2){
    		if(isset($tmpary[$i + 1]) && !is_numeric($tmpary[$i])){
    			$_GET[$tmpary[$i]] = $tmpary[$i + 1];
    			$_REQUEST[$tmpary[$i]] = $tmpary[$i + 1];
    		}
    	}
    }
    
    //设置模块路径
    $jieqiModules = array();
    include_once('configs/modules.php');
    //本模块未开放
    if(isset($jieqiModules[JIEQI_MODULE_NAME]['publish']) && $jieqiModules[JIEQI_MODULE_NAME]['publish']==0){
    	header('Content-type:text/html;charset='.JIEQI_SYSTEM_CHARSET);
    	echo 'This function is not valid!';
    	jieqi_freeresource();
    	exit;
    }
    
    foreach($jieqiModules as $k=>$v){
    	if(strtolower(substr($k,0,3)) == 'wap'){
    		$wapmod = true;
    		$dirmod = substr($k,3);
    	}else{
    		$wapmod = false;
    		$dirmod = $k;
    	}
    	if($v['dir']=='') $jieqiModules[$k]['dir'] = ($wapmod == true) ? (($k == 'wap') ? '/wap' : '/wap/'.$dirmod) : (($k == 'system') ? '' : '/modules/'.$dirmod);
    	if($v['path']=='') $jieqiModules[$k]['path'] = JIEQI_ROOT_PATH.$jieqiModules[$k]['dir'];
    	if($v['url']=='') $jieqiModules[$k]['url'] = JIEQI_LOCAL_URL.$jieqiModules[$k]['dir'];
    	if($v['theme']=='') $jieqiModules[$k]['theme'] = JIEQI_THEME_SET;
    	if(defined('JIEQI_MODULE_NAME') && JIEQI_MODULE_NAME == $k){
    		if(!empty($jieqiModules[$k]['theme'])) @define('JIEQI_THEME_NAME', $jieqiModules[$k]['theme']);
    	}
    }
    if(!defined('JIEQI_THEME_NAME')) define('JIEQI_THEME_NAME', JIEQI_THEME_SET);
    if(isset($jieqiModules['wap']['path'])) define('JIEQI_WAP_PATH', $jieqiModules['wap']['path']);
    else define('JIEQI_WAP_PATH', JIEQI_ROOT_PATH.'/wap');
    if(isset($jieqiModules['wap']['url'])) define('JIEQI_WAP_URL', $jieqiModules['wap']['url']);
    else define('JIEQI_WAP_URL', JIEQI_LOCAL_URL.'/wap');
    
    //是否需要编码转换(免费版不支持)
    if(defined('JIEQI_CHARSET_CONVERT') && JIEQI_CHARSET_CONVERT == 1 && JIEQI_VERSION_TYPE != '' && JIEQI_VERSION_TYPE != 'Free'){
    	if(isset($_GET['charset'])) $_GET['charset']=strtolower($_GET['charset']);
    	if(isset($_GET['charset']) && isset($jieqi_charset_type[$_GET['charset']])) @define('JIEQI_CHAR_SET', $jieqi_charset_type[$_GET['charset']]);
    	elseif(isset($_COOKIE['jieqiUserCharset']) && isset($jieqi_charset_type[$_COOKIE['jieqiUserCharset']])) @define('JIEQI_CHAR_SET', $jieqi_charset_type[$_COOKIE['jieqiUserCharset']]);
    	else @define('JIEQI_CHAR_SET', JIEQI_SYSTEM_CHARSET);
    	if ((!isset($_COOKIE['jieqiUserCharset']) && JIEQI_CHAR_SET != JIEQI_SYSTEM_CHARSET) || (isset($_COOKIE['jieqiUserCharset']) && $_COOKIE['jieqiUserCharset'] != JIEQI_CHAR_SET)) setcookie("jieqiUserCharset",JIEQI_CHAR_SET,time()+2592000, '/', JIEQI_COOKIE_DOMAIN, 0);
    }else{
    	@define('JIEQI_CHAR_SET', JIEQI_SYSTEM_CHARSET);
    }
    //允许cache的情况下使用cache(不是系统编码时候也能用cache)
    //if(JIEQI_ENABLE_CACHE && JIEQI_CHAR_SET == JIEQI_SYSTEM_CHARSET) define('JIEQI_USE_CACHE', true);
    if(JIEQI_ENABLE_CACHE) define('JIEQI_USE_CACHE', true);
    else define('JIEQI_USE_CACHE', false);
    
    //设置缓存路径
    if(!defined('JIEQI_CACHE_DIR') || JIEQI_CACHE_DIR=='' || strtolower(substr(trim(JIEQI_CACHE_DIR), 0, 12)) == 'memcached://') $tmpvar = JIEQI_ROOT_PATH.'/cache';
    elseif(strpos(JIEQI_CACHE_DIR, '/')===false && strpos(JIEQI_CACHE_DIR, '\\')===false) $tmpvar = JIEQI_ROOT_PATH.'/'.JIEQI_CACHE_DIR;
    else $tmpvar = JIEQI_CACHE_DIR;
    //if(JIEQI_CHAR_SET != JIEQI_SYSTEM_CHARSET) $tmpvar.='/c_'.JIEQI_CHAR_SET;
    if(!is_dir($tmpvar)) jieqi_createdir($tmpvar);
    define('JIEQI_CACHE_PATH',$tmpvar);
    
    if(!defined('JIEQI_COMPILED_DIR') || JIEQI_COMPILED_DIR=='') define('JIEQI_COMPILED_PATH', JIEQI_ROOT_PATH.'/compiled');
    elseif(strpos(JIEQI_COMPILED_DIR, '/')===false && strpos(JIEQI_COMPILED_DIR, '\\')===false) define('JIEQI_COMPILED_PATH', JIEQI_ROOT_PATH.'/'.JIEQI_COMPILED_DIR);
    else define('JIEQI_COMPILED_PATH',JIEQI_COMPILED_DIR);
    
    //******************************************************
    //页面预处理
    //******************************************************
    
    if(isset($_COOKIE[session_name()]) && strlen($_COOKIE[session_name()]) < 16) unset($_COOKIE[session_name()]);
    //是否启用页面压缩输出(ob_gzhandler 和 zlib.output_compression 不能同时使用)
    if(JIEQI_USE_GZIP && !(boolean)@ini_get('zlib.output_compression')) @ob_start("ob_gzhandler");
    //启动session,已经有sessionid的直接调用session,没有的要登录服务器才能创建新的session
    //if (!empty($_COOKIE[session_name()]) || (defined('JIEQI_NEED_SESSION') && JIEQI_LOCAL_URL == JIEQI_USER_URL)) {
    if (!empty($_COOKIE[session_name()]) || defined('JIEQI_NEED_SESSION')) {
    	if (JIEQI_SESSION_EXPRIE > 0) @ini_set('session.gc_maxlifetime', JIEQI_SESSION_EXPRIE);
    	@session_cache_limiter('private, must-revalidate');
    	//session的数据库保存模式
    	if(JIEQI_SESSION_STORAGE=='db'){
    		include_once(JIEQI_ROOT_PATH.'/include/session.php');
    		$sess_handler =& JieqiSessionHandler::getInstance('JieqiSessionHandler');
    		//设置session处理函数
    		@session_set_save_handler(array(&$sess_handler, 'open'), array(&$sess_handler, 'close'), array(&$sess_handler, 'read'), array(&$sess_handler, 'write'), array(&$sess_handler, 'destroy'), array(&$sess_handler, 'gc'));
    	}else{
    		if(JIEQI_SESSION_SAVEPATH != '' && is_dir(JIEQI_SESSION_SAVEPATH)) session_save_path(JIEQI_SESSION_SAVEPATH);
    	}
    	//设置sessionid
    	if(!empty($_COOKIE[session_name()])) session_id($_COOKIE[session_name()]);
    	@session_start();
    	//用于多服务器的情况,当一台服务器已经登陆,另一台自动登陆
    	if (!empty($_COOKIE[session_name()]) && !empty($_COOKIE['jieqiUserInfo']) && count($_SESSION)==0){
    		include_once(JIEQI_ROOT_PATH.'/class/online.php');
    		$online_handler =& JieqiOnlineHandler::getInstance('JieqiOnlineHandler');
    		$criteria=new CriteriaCompo(new Criteria('sid', $_COOKIE[session_name()], '='));
    		$result = $online_handler->queryObjects($criteria);
    		$srow = $online_handler->getRow($result);
    		if(!empty($srow['uid'])){
    			include_once(JIEQI_ROOT_PATH.'/class/users.php');
    			$users_handler =& JieqiUsersHandler::getInstance('JieqiUsersHandler');
    			$jieqiUsers=$users_handler->get($srow['uid']);
    			if(is_object($jieqiUsers)){
    				jieqi_setusersession($jieqiUsers);
    			}
    		}
    	}
    }
    
    //去掉反溢出斜杠
    $magic_quotes_gpc = get_magic_quotes_gpc();
    $register_globals = @ini_get('register_globals');
    if ($magic_quotes_gpc){
    	$_GET= jieqi_funtoarray('stripslashes',$_GET);
    	$_POST= jieqi_funtoarray('stripslashes',$_POST);
    	$_COOKIE= jieqi_funtoarray('stripslashes',$_COOKIE);
    }
    
    //网页内容和提交变量转化
    $charsetary=array('gb2312'=>'gb', 'gbk'=>'gb', 'gb'=>'gb', 'big5'=>'big5', 'utf-8'=>'utf8', 'utf8'=>'utf8');
    if(JIEQI_CHAR_SET != JIEQI_SYSTEM_CHARSET || (!empty($_REQUEST['ajax_request']) && $charsetary[JIEQI_CHAR_SET] != 'utf8')){
    	include_once(JIEQI_ROOT_PATH.'/include/changecode.php');
    }
    if(!empty($_REQUEST['ajax_request']) && $charsetary[JIEQI_CHAR_SET] != 'utf8'){
    	$charset_convert_ajax='jieqi_'.$charsetary['utf8'].'2'.$charsetary[JIEQI_CHAR_SET];
    	//$_GET=& jieqi_funtoarray($charset_convert_ajax,$_GET);
    	$_POST=& jieqi_funtoarray($charset_convert_ajax,$_POST);
    }
    $charset_convert_out='';
    if(JIEQI_CHAR_SET != JIEQI_SYSTEM_CHARSET){
    	$charset_convert_out='jieqi_'.$charsetary[JIEQI_SYSTEM_CHARSET].'2'.$charsetary[JIEQI_CHAR_SET];
    	if(!defined('JIEQI_NOCONVERT_CHAR')) @ob_start($charset_convert_out);
    	$charset_convert_in='jieqi_'.$charsetary[JIEQI_CHAR_SET].'2'.$charsetary[JIEQI_SYSTEM_CHARSET];
    	$_GET=& jieqi_funtoarray($charset_convert_in,$_GET);
    	$_POST=& jieqi_funtoarray($charset_convert_in,$_POST);
    	$_COOKIE=& jieqi_funtoarray($charset_convert_in,$_COOKIE);
    }
    
    //处理REQUEST的转换
    if($magic_quotes_gpc || JIEQI_SYSTEM_CHARSET != JIEQI_CHAR_SET || (!empty($_REQUEST['ajax_request']) && $charsetary[JIEQI_CHAR_SET] != 'utf8'))	$_REQUEST=array_merge($_REQUEST, $_GET, $_POST, $_COOKIE);
    
    //最大页数限制
    if(defined('JIEQI_MAX_PAGES') && JIEQI_MAX_PAGES > 0 && is_numeric($_REQUEST['page']) && $_REQUEST['page'] > JIEQI_MAX_PAGES) $_REQUEST['page'] = intval(JIEQI_MAX_PAGES);
    
    //******************************************************
    //用户预处理
    //******************************************************
    $jieqiUsersStatus = JIEQI_GROUP_GUEST;
    $jieqiUsersGroup = JIEQI_GROUP_GUEST;
    $jieqiCache =& jieqi_initcache(); //初始化缓存实例
    //自动登录情况
    if(empty($_SESSION['jieqiUserId'])){
    	if(!empty($_REQUEST['jieqi_username']) && !empty($_REQUEST['jieqi_userpassword'])){
    		//提交登录情况
    		session_start();
    		include_once(JIEQI_ROOT_PATH.'/include/checklogin.php');
    		$urllogin=jieqi_logincheck($_REQUEST['jieqi_username'], $_REQUEST['jieqi_userpassword'], '', false, false, false);
    		if($urllogin == 0) $_SESSION['jieqiAdminLogin']=1;
    		//}elseif(!empty($_COOKIE['jieqiUserInfo']) && JIEQI_LOCAL_URL == JIEQI_USER_URL){
    	}elseif(!empty($_COOKIE['jieqiUserInfo'])){
    		//使用COOKIE登录
    		$jieqi_user_info=jieqi_strtosary($_COOKIE['jieqiUserInfo']);
    		if(!empty($jieqi_user_info['jieqiUserName']) && !empty($jieqi_user_info['jieqiUserPassword'])){
    			session_start();
    			include_once(JIEQI_ROOT_PATH.'/include/checklogin.php');
    			jieqi_logincheck($jieqi_user_info['jieqiUserName'], $jieqi_user_info['jieqiUserPassword'], '', true, true, false);
    		}
    	}
    }
    
    if(!empty($_SESSION['jieqiUserGroup'])){
    	$jieqiUsersGroup = $_SESSION['jieqiUserGroup'];
    	switch($_SESSION['jieqiUserGroup']){
    		case JIEQI_GROUP_GUEST:
    			$jieqiUsersStatus = JIEQI_GROUP_GUEST;
    			break;
    		case JIEQI_GROUP_ADMIN:
    			$jieqiUsersStatus = JIEQI_GROUP_ADMIN;
    			define('JIEQI_IS_ADMIN', 1);
    			break;
    		default:
    			$jieqiUsersStatus = JIEQI_GROUP_USER;
    			break;
    	}
    }
    //网站是否开放
    if(defined('JIEQI_IS_OPEN') && JIEQI_IS_OPEN == 0 && !defined('JIEQI_ADMIN_LOGIN') && $jieqiUsersStatus != JIEQI_GROUP_ADMIN){
    	header('Content-type:text/html;charset='.JIEQI_SYSTEM_CHARSET);
    	echo JIEQI_CLOSE_INFO;
    	jieqi_freeresource();
    	exit;
    }elseif(defined('JIEQI_IS_OPEN') && JIEQI_IS_OPEN == 2 && !defined('JIEQI_ADMIN_LOGIN') && $jieqiUsersStatus != JIEQI_GROUP_ADMIN && count($_POST)>0){
    	//禁止发表
    	header('Content-type:text/html;charset='.JIEQI_SYSTEM_CHARSET);
    	echo LANG_DENY_POST;
    	jieqi_freeresource();
    	exit;
    }
    
    //是否允许代理访问
    if(defined('JIEQI_PROXY_DENIED') && JIEQI_PROXY_DENIED != 1){
    	if($_SERVER['HTTP_X_FORWARDED_FOR'] || $_SERVER['HTTP_VIA'] || $_SERVER['HTTP_PROXY_CONNECTION'] || $_SERVER['HTTP_USER_AGENT_VIA'] || $_SERVER['HTTP_PROXY_CONNECTION']) {
    		header('Content-type:text/html;charset='.JIEQI_SYSTEM_CHARSET);
    		echo LANG_DENY_PROXY;
    		jieqi_freeresource();
    		exit;
    	}
    }
    
    //DEMO帐号管理界面不准保存数据
    /*
    if((strstr($_SERVER['PHP_SELF'], '/admin') || basename($_SERVER['PHP_SELF'])=='useredit.php') && !empty($_SESSION['jieqiUserName']) && $_SESSION['jieqiUserName']=='demo'){
    if((!empty($_POST) || !empty($_REQUEST['action'])) && basename($_SERVER['PHP_SELF'])!='login.php') jieqi_printfail('对不起,测试帐号不允许保存或修改管理数据!');
    }
    */
    
    //是否载入用户自定义程序段(仅限于php文件)
    if(defined('JIEQI_CUSTOM_INCLUDE') && JIEQI_CUSTOM_INCLUDE == 1){
    	$tmpstr = $_SERVER['PHP_SELF'] ? basename($_SERVER['PHP_SELF']) : basename($_SERVER['SCRIPT_NAME']);
    	if( preg_match('/\.php$/i', $tmpstr)){
    		$tmpstr = @realpath(substr($tmpstr, 0, -4)).'.inc.php';
    		if(is_file($tmpstr) && preg_match('/\.inc\.php$/i', $tmpstr)) include_once($tmpstr);
    	}
    }
    
    //******************************************************
    //公共函数
    //******************************************************
    
    //  ------------------------------------------------------------------------
    //  系统相关
    //  ------------------------------------------------------------------------
    /**
     * 页面跳转
     * 
     * @param      string      $url 跳转的url地址
     * @param      string      $title 提示的标题
     * @param      string      $content 提示的内容
     * @access     public
     * @return     void
     */
    function jieqi_jumppage($url, $title, $content){
    	if(empty($_REQUEST['ajax_request'])){
    		if(JIEQI_VERSION_TYPE != '' && JIEQI_VERSION_TYPE != 'Free'){
    			include_once(JIEQI_ROOT_PATH.'/lib/template/template.php');
    			$url=jieqi_htmlstr($url);
    			$title=jieqi_htmlstr($title);
    			$jieqiTpl =& JieqiTpl::getInstance();
    			$jieqiTpl->assign(array('jieqi_charset' => JIEQI_CHAR_SET, 'jieqi_themeurl' => JIEQI_URL.'/themes/'.JIEQI_THEME_NAME.'/', 'jieqi_themecss'=> JIEQI_URL.'/themes/'.JIEQI_THEME_NAME.'/style.css',  'pagetitle' => $title, 'title' => $title, 'content' => $content, 'url' => $url));
    			$jieqiTpl->setCaching(0);
    			$jieqiTpl->display(JIEQI_ROOT_PATH.'/themes/'.JIEQI_THEME_NAME.'/jumppage.html');
    		}else{
    			echo '<html><head><meta http-equiv="content-type" content="text/html; charset='.JIEQI_CHAR_SET.'" /><meta http-equiv="refresh" content="3; url='.$url.'">
    <title>'.jieqi_htmlstr($title).'</title><link rel="stylesheet" type="text/css" media="all" href="'.JIEQI_URL.'/themes/'.JIEQI_THEME_NAME.'/style.css" /></head><body><div id="msgboard" style="position:absolute; left:210px; top:150px; width:350px; height:100px; z-index:1;"><table class="grid" width="100%" border="0" cellspacing="1" cellpadding="6" ><caption>'.jieqi_htmlstr($title).'</caption><tr><td class="even"><br />'.$content.'<br /><br />如不能自动跳转,<a href="'.$url.'">点击这里直接进入!</a><br /><br />程序设计:<a href="http://www.jieqi.com" target="_blank">杰奇网络</a><br /><br /></td></tr></table></div></body></html>';
    		}
    	}else{
    		header('Content-Type:text/html; charset='.JIEQI_CHAR_SET);
    		header("Cache-Control:no-cache");
    		return $url;
    	}
    	jieqi_freeresource();
    	exit;
    }
    
    /**
     * 返回提示消息框的html代码
     * 
     * @param      string      $title 提示的标题
     * @param      string      $content 提示的内容
     * @access     public
     * @return     string       返回html代码
     */
    function jieqi_msgbox($title, $content){
    	if(empty($_REQUEST['ajax_request'])){
    		include_once(JIEQI_ROOT_PATH.'/lib/template/template.php');
    		$title=jieqi_htmlstr($title);
    		$jieqiTpl =& JieqiTpl::getInstance();
    		$jieqiTpl->assign(array('title' => $title, 'content' => $content));
    		$jieqiTpl->setCaching(0);
    		return $jieqiTpl->fetch(JIEQI_ROOT_PATH.'/themes/'.JIEQI_THEME_NAME.'/msgbox.html');
    	}else{
    		header('Content-Type:text/html; charset='.JIEQI_CHAR_SET);
    		header("Cache-Control:no-cache");
    		return $content;
    	}
    }
    
    /**
     * 显示提示信息(完整的html页面)
     * 
     * @param      string      $title 提示的标题
     * @param      string      $content 提示的内容
     * @access     public
     * @return     void
     */
    function jieqi_msgwin($title, $content){
    	if(defined('JIEQI_NOCONVERT_CHAR') && !empty($GLOBALS['charset_convert_out'])) @ob_start($GLOBALS['charset_convert_out']);
    	if(empty($_REQUEST['ajax_request'])){
    		include_once(JIEQI_ROOT_PATH.'/lib/template/template.php');
    		$title=jieqi_htmlstr($title);
    		$jieqiTpl =& JieqiTpl::getInstance();
    		$jieqiTpl->assign(array('jieqi_charset' => JIEQI_CHAR_SET, 'jieqi_themeurl' => JIEQI_URL.'/themes/'.JIEQI_THEME_NAME.'/', 'jieqi_themecss'=> JIEQI_URL.'/themes/'.JIEQI_THEME_NAME.'/style.css', 'title' => $title, 'content' => $content, 'jieqi_sitename' => JIEQI_SITE_NAME));
    		$jieqiTpl->setCaching(0);
    		$jieqiTpl->display(JIEQI_ROOT_PATH.'/themes/'.JIEQI_THEME_NAME.'/msgwin.html');
    	}else{
    		header('Content-Type:text/html; charset='.JIEQI_CHAR_SET);
    		header("Cache-Control:no-cache");
    		echo $content;
    	}
    	jieqi_freeresource();
    	exit;
    }
    
    /**
     * 显示错误信息(完整页面)
     * 
     * @param      string      $errorinfo 错误信息的html代码
     * @access     public
     * @return     void
     */
    function jieqi_printfail($errorinfo){
    	if(defined('JIEQI_NOCONVERT_CHAR') && !empty($GLOBALS['charset_convert_out'])) @ob_start($GLOBALS['charset_convert_out']);
    	$debuginfo='';
    	if(defined('JIEQI_DEBUG_MODE') && JIEQI_DEBUG_MODE > 0){
    		$trace = debug_backtrace();
    		$debuginfo='FILE: '.jieqi_htmlstr($trace[0]['file']).' LINE:'.jieqi_htmlstr($trace[0]['line']);
    	}
    	if(empty($_REQUEST['ajax_request'])){
    		include_once(JIEQI_ROOT_PATH.'/lib/template/template.php');
    		$jieqiTpl =& JieqiTpl::getInstance();
    		$jieqiTpl->assign(array('jieqi_charset' => JIEQI_CHAR_SET, 'jieqi_themeurl' => JIEQI_URL.'/themes/'.JIEQI_THEME_NAME.'/', 'jieqi_themecss'=> JIEQI_URL.'/themes/'.JIEQI_THEME_NAME.'/style.css', 'errorinfo' => $errorinfo, 'debuginfo' => $debuginfo, 'jieqi_sitename' => JIEQI_SITE_NAME));
    		$jieqiTpl->setCaching(0);
    		$jieqiTpl->display(JIEQI_ROOT_PATH.'/themes/'.JIEQI_THEME_NAME.'/msgerr.html');
    	}else{
    		header('Content-Type:text/html; charset='.JIEQI_CHAR_SET);
    		header("Cache-Control:no-cache");
    		echo $errorinfo;
    	}
    	jieqi_freeresource();
    	exit;
    
    }
    
    /**
     * 取得用户ip地址
     * 
     * @param      void
     * @access     public
     * @return     string      当前访问者的ip
     */
    function jieqi_userip(){
    	if(isset($_SERVER['HTTP_CLIENT_IP'])) $ip=$_SERVER['HTTP_CLIENT_IP'];
    	elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    	else  $ip=$_SERVER['REMOTE_ADDR'];
    	$ip=trim($ip);
    	if(!is_numeric(str_replace('.','',$ip))) $ip='';
    	return $ip;
    }
    
    /**
     * 根据id取得文件保存的子目录
     * 
     * @param      int         $id
     * @access     public
     * @return     string       返回子目录
     */
    function jieqi_getsubdir($id, $divnum = 1000){
    	return '/'.floor(intval($id) / $divnum);
    }
    
    /**
     * 根据记录id获得访问该记录的url地址
     * 
     * 本函数是调用另外一个函数来处理url地址,前面两个参数是必要的,后面参数是具体处理函数里面使用
     * 
     * @param      string       $module 函数所属模块名
     * @param      string       $target 处理对象,用来组成函数名的 'jieqi_url_'.$module.'_'.$target
     * @access     public
     * @return     string       返回url字符串
     */
    function jieqi_geturl($module, $target){
    	global $jieqiModules;
    	if(!isset($jieqiModules[$module])) $module = 'system';
    	$funname = 'jieqi_url_'.$module.'_'.$target;
    	//$funname='jieqi_url_article_index'
    	if(!function_exists($funname) && isset($jieqiModules[$module]['path']) && is_file($jieqiModules[$module]['path'].'/include/funurl.php')) include_once($jieqiModules[$module]['path'].'/include/funurl.php');
    	if(function_exists($funname)){
    		$numargs = func_num_args();
    		$args = func_get_args();
    		switch($numargs){
    			case 0:
    			case 1:
    			case 2:
    				return $funname();
    				break;
    			case 3:
    				return $funname($args[2]);
    				break;
    			case 4:
    				return $funname($args[2], $args[3]);
    				break;
    			case 5:
    				return $funname($args[2], $args[3], $args[4]);
    				break;
    			case 6:
    			default:
    				return $funname($args[2], $args[3], $args[4], $args[5]);
    				break;
    		}
    	}else{
    		return false;
    	}
    }
    
    /**
     * 取得上传文件目录路径
     * 
     * @param      string      $path 保存上传文件的目录名或者完整的路径名称
     * @param      string      $module 模块名称,留空表示当前模块
     * @param      string      $systempath 系统根路径,留空则自动获取
     * @access     public
     * @return     string      
     */
    function jieqi_uploadpath($path, $module='', $systempath=''){
    	if(strpos($path, '/')===false && strpos($path, '\\')===false){
    		if($module=='' && defined('JIEQI_MODULE_NAME')) $module=JIEQI_MODULE_NAME;
    		if($systempath=='') $systempath=JIEQI_ROOT_PATH;
    		if($path=='') return $systempath.'/files/'.$module;
    		else return $systempath.'/files/'.$module.'/'.$path;
    	}else{
    		return $path;
    	}
    }
    
    /**
     * 取得上传文件目录URL
     * 
     * @param      string      $path 保存上传文件的目录名或者完整的路径名称
     * @param      string      $url 自定义的url地址
     * @param      string      $module 模块名称,留空表示当前模块
     * @param      string      $systempath 系统根路径,留空则自动获取
     * @access     public
     * @return     string      
     */
    function jieqi_uploadurl($path, $url='', $module='', $systemurl=''){
    	if(!empty($url)){
    		return $url;
    	}else{
    		if($module=='' && defined('JIEQI_MODULE_NAME')) $module=JIEQI_MODULE_NAME;
    		if($systemurl=='') $systemurl=JIEQI_URL;
    		elseif(strpos($systemurl,'/modules') > 0) $systemurl=substr($systemurl,0,strpos($systemurl,'/modules'));
    		if($path=='') return $systemurl.'/files/'.$module;
    		else return $systemurl.'/files/'.$module.'/'.$path;
    	}
    }
    
    /**
     * 检查用户权限
     * 
     * @param      array       $powerset 需要的权限数组
     * @param      int         $ustatus 用户状态
     * @param      int         $ugroup 用户组
     * @param      bool        $isreturn 是否返回检查结果,默认不返回,表示检查不通过直接提示
     * @param      bool        $isadmin 是否检查后台权限,默认否
     * @access     public
     * @return     bool      
     */
    function jieqi_checkpower($powerset=array(), $ustatus='0', $ugroup='0', $isreturn=false, $isadmin=false){
    	if(empty($_POST)){
    		$local_domain_url=(empty($_SERVER['HTTP_HOST'])) ? '' : 'http://'.$_SERVER['HTTP_HOST'];
    		$jumpurl=$local_domain_url.jieqi_addurlvars(array());
    	}elseif(!empty($_SERVER['HTTP_REFERER'])){
    		$jumpurl=$_SERVER['HTTP_REFERER'];
    	}else{
    		$jumpurl=JIEQI_MAIN_URL;
    	}
    
    	if((!isset($_SESSION['jieqiAdminLogin']) || $_SESSION['jieqiAdminLogin'] != 1) && !empty($_COOKIE['jieqiOnlineInfo'])){
    		$jieqi_online_info = jieqi_strtosary($_COOKIE['jieqiOnlineInfo']);
    		if($jieqi_online_info['jieqiAdminLogin'] == 1) $_SESSION['jieqiAdminLogin'] = 1;
    	}
    
    	if($ustatus==JIEQI_GROUP_ADMIN){
    		if($isadmin && empty($_SESSION['jieqiAdminLogin'])){
    			if($isreturn){
    				return false;
    			}else{
    				header('Location: '.JIEQI_LOCAL_URL.'/admin/login.php?jumpurl='.urlencode($jumpurl));
    				exit;
    			}
    		}else{
    			return true;
    		}
    	}else{
    		if(is_array($powerset['groups']) && (in_array($ugroup, $powerset['groups'], false) || in_array('0',$powerset['groups'],false))){
    			if($isadmin && empty($_SESSION['jieqiAdminLogin'])){
    				if($isreturn){
    					return false;
    				}else{
    					header('Location: '.JIEQI_LOCAL_URL.'/admin/login.php?jumpurl='.urlencode($jumpurl));
    					exit;
    				}
    			}else{
    				return true;
    			}
    		}else{
    			if($isreturn){
    				return false;
    			}else{
    				if($ugroup==JIEQI_GROUP_GUEST){
    					if($isadmin){
    						header('Location: '.JIEQI_USER_URL.'/admin/login.php?jumpurl='.urlencode($jumpurl));
    					}else{
    						header('Location: '.JIEQI_USER_URL.'/login.php?jumpurl='.urlencode($jumpurl));
    					}
    					exit;
    				}else{
    					jieqi_printfail(LANG_NO_PERMISSION);
    				}
    			}
    		}
    	}
    }
    
    
    /**
     * 检查用户是否已登陆
     * 
     * @param      bool        $isreturn 是否返回检查结果,默认不返回,表示检查不通过直接提示
     * @param      bool        $isadmin 是否检查后台权限,默认否
     * @access     public
     * @return     bool        已登录返回true,未登录返回false
     */
    function jieqi_checklogin($isreturn=false, $isadmin=false){
    	global $jieqiUsersGroup;
    	if($jieqiUsersGroup==JIEQI_GROUP_GUEST)	$ret=false;
    	else $ret=true;
    	if($isreturn) return $ret;
    	elseif(!$ret){
    		if(empty($_REQUEST['ajax_request'])){
    			if(empty($_POST)){
    				$local_domain_url=(empty($_SERVER['HTTP_HOST'])) ? '' : 'http://'.$_SERVER['HTTP_HOST'];
    				$jumpurl=$local_domain_url.jieqi_addurlvars(array());
    			}elseif(!empty($_SERVER['HTTP_REFERER'])){
    				$jumpurl=$_SERVER['HTTP_REFERER'];
    			}else{
    				$jumpurl=JIEQI_MAIN_URL;
    			}
    			if($isadmin) header('Location: '.JIEQI_USER_URL.'/admin/login.php?jumpurl='.urlencode($jumpurl));
    			else header('Location: '.JIEQI_USER_URL.'/login.php?jumpurl='.urlencode($jumpurl));
    		}else{
    			header('Content-Type:text/html; charset='.JIEQI_CHAR_SET);
    			header("Cache-Control:no-cache");
    			echo LANG_NEED_LOGIN;
    		}
    		exit;
    	}
    }
    
    /**
     * 保存用户SESSION
     * 
     * @param      object      $user 用户表记录对象
     * @access     public
     * @return     void
     */
    function jieqi_setusersession($user){
    	global $jieqiHonors;
    	global $jieqiModules;
    	$_SESSION = array();
    	$_SESSION['jieqiUserId'] = $user->getVar('uid', 'n');
    	$_SESSION['jieqiUserUname'] = $user->getVar('uname', 'n');
    	$_SESSION['jieqiUserName'] = (strlen($user->getVar('name', 'n')) > 0) ? $user->getVar('name', 'n') : $user->getVar('uname', 'n');
    	$_SESSION['jieqiUserGroup'] = $user->getVar('groupid', 'n');
    	$_SESSION['jieqiUserEmail'] = $user->getVar('email', 'n');
    	$_SESSION['jieqiUserAvatar'] = $user->getVar('avatar', 'n');
    	$_SESSION['jieqiUserScore'] = $user->getVar('score', 'n');
    	$_SESSION['jieqiUserExperience'] = $user->getVar('experience', 'n');
    	$_SESSION['jieqiUserVip'] = $user->getVar('isvip', 'n');
    	$_SESSION['jieqiUserEgold'] = ($user->getVar('egold', 'n')>0 || $user->getVar('esilver', 'n')>0) ? 1 : 0;
    	jieqi_getconfigs('system', 'honors'); //头衔
    	$honorid=intval(jieqi_gethonorid($user->getVar('score'), $jieqiHonors));
    	$_SESSION['jieqiUserHonorid'] = $honorid;
    	$_SESSION['jieqiUserHonor'] = isset($jieqiHonors[$honorid]['name'][intval($user->getVar('workid', 'n'))]) ? $jieqiHonors[$honorid]['name'][intval($user->getVar('workid', 'n'))] : $jieqiHonors[$honorid]['caption'];
    	if(!empty($jieqiModules['badge']['publish'])){
    		$_SESSION['jieqiUserBadges'] = $user->getVar('badges', 'n'); //徽章
    	}
    	$_SESSION['jieqiUserSet'] = unserialize($user->getVar('setting','n'));
    }
    
    /**
     * 增加当前url参数
     * 
     * @param      array      $varary 需要增加的变量数组
     * @param      bool       $addget 是否自动增加GET参数,默认是
     * @param      bool       $addpost 是否自动增加POST参数,默认否
     * @param      array      $filter 过滤哪些参数名
     * @access     public
     * @return     string
     */
    function jieqi_addurlvars($varary, $addget=true, $addpost=false, $filter=''){
    	if(!empty($_SERVER['PHP_SELF'])) $ret=$_SERVER['PHP_SELF'];
    	elseif(!empty($_SERVER['SCRIPT_NAME']) && substr($_SERVER['SCRIPT_NAME'],-4)=='.php') $ret=$_SERVER['SCRIPT_NAME'];
    	else $ret='';
    	$start=0;
    	if(!is_array($filter)) $filter=array();
    	if($addget){
    		foreach($_GET as $k=>$v){
    			if (!array_key_exists($k, $varary) && !in_array($k, $filter) && is_string($v)){
    				$ret.=($start++ > 0) ? '&'.$k.'='.urlencode($v) : '?'.$k.'='.urlencode($v);
    			}
    		}
    	}
    	if($addpost){
    		foreach($_POST as $k=>$v){
    			if (!array_key_exists($k, $varary) && !in_array($k, $filter) && is_string($v)){
    				$ret.=($start++ > 0) ? '&'.$k.'='.urlencode($v) : '?'.$k.'='.urlencode($v);
    			}
    		}
    	}
    	if(is_array($varary)){
    		foreach($varary as $k=>$v){
    			$ret.=($start++ > 0) ? '&'.$k.'='.$v : '?'.$k.'='.$v;
    		}
    	}
    	return $ret;
    }
    
    /**
     * 包含数据库类
     * 
     * @param      void
     * @access     public
     * @return     void
     */
    function jieqi_includedb(){
    	if(!defined('JIEQI_DBCLASS_INCLUDE')){
    		include_once(JIEQI_ROOT_PATH.'/lib/database/database.php');
    		define('JIEQI_DBCLASS_INCLUDE', true);
    	}
    }
    
    /**
     * 关闭数据库连接
     * 
     * @param      void
     * @access     public
     * @return     void
     */
    function jieqi_closedb($db = NULL){
    	if(defined('JIEQI_DB_CONNECTED') && !defined('JIEQI_DB_NOTCLOSE') && JIEQI_DB_PCONNECT == false) JieqiDatabase::close($db);
    }
    
    /**
     * 关闭ftp连接
     * 
     * @param      void
     * @access     public
     * @return     void
     */
    function jieqi_closeftp($ftp = NULL){
    	if(defined('JIEQI_FTP_CONNECTED') && !defined('JIEQI_FTP_NOTCLOSE')) JieqiFTP::close($ftp);
    }
    
    /**
     * 初始化缓存,包含缓存类并返回缓存实例
     * 
     * @param      object      $jieqiCache
     * @access     public
     * @return     bool
    */
    function &jieqi_initcache(){
    	if(strtolower(substr(trim(JIEQI_CACHE_DIR), 0, 12)) != 'memcached://'){
    		$jieqiCache =& JieqiCache::getInstance('file');
    	}else{
    		$params = @parse_url(trim(JIEQI_CACHE_DIR));
    		$jieqiCache =& JieqiCache::getInstance('memcached', array('host'=>strval($params['host']), 'port'=>intval($params['port'])));
    	}
    
    	return $jieqiCache;
    }
    
    /**
     * 关闭memcached连接
     * 
     * @param      void
     * @access     public
     * @return     void
     */
    function jieqi_closecache($cache = NULL){
    	if(defined('JIEQI_CACHE_CONNECTED') && !defined('JIEQI_CACHE_NOTCLOSE')) JieqiCache::close($cache);
    }
    
    /**
     * 释放占用的资源(如数据库链接,ftp链接,其他远程服务等)
     * 
     * @param      void
     * @access     public
     * @return     void
     */
    function jieqi_freeresource(){
    	jieqi_closedb();
    	jieqi_closeftp();
    	jieqi_closecache();
    }
    
    /**
     * 载入语言包
     * 
     * @param      string     $fname 语言包文件名,不带后缀
     * @param      string     $module 模块名,默认是 'system'
     * @access     public
     * @return     bool       成功返回true,失败返回false
     */
    function jieqi_loadlang($fname, $module='system'){
    	global $jieqiLang;
    	global $jieqiModules;
    	if(empty($jieqiLang[$module][$fname])){
    		if($module=='system' || $module=='') $file=JIEQI_ROOT_PATH.'/lang/lang_'.$fname.'.php';
    		else $file=$jieqiModules[$module]['path'].'/lang/lang_'.$fname.'.php';
    		$file = @realpath($file);
    		if (is_file($file) && preg_match('/\.php$/i', $file)){
    			include_once($file);
    			return true;
    		}else return false;
    	}
    }
    
    /**
     * 根据积分获得用户头衔ID
     * 
     * @param      int        $userscore 用户积分
     * @param      array      $jieqiHonors 头衔设置数组
     * @access     public
     * @return     int
     */
    function jieqi_gethonorid($userscore=0, $jieqiHonors=array()){
    	if(is_array($jieqiHonors)){
    		foreach($jieqiHonors as $k=>$v){
    			if($userscore >= $v['minscore'] && $userscore < $v['maxscore']) return $k;
    		}
    	}
    	return false;
    }
    
    //  ------------------------------------------------------------------------
    //  字符串处理
    //  ------------------------------------------------------------------------
    
    /**
     * 把字符串转换为htm格式
     * 
     * @param      string     $str 输入的字符串
     * @param      int        $quote_style 转换标志,默认ENT_QUOTES表示转换单引号
     * @access     public
     * @return     string
     */
    function jieqi_htmlstr($str, $quote_style=ENT_QUOTES){
    	$str = htmlspecialchars($str, $quote_style);
    	$str = nl2br($str);
    	$str = str_replace("  ", "  ", $str);
    	$str = preg_replace("/&#(\d+);/isU", "&#\\1;", $str);
    	return $str;
    }
    
    /**
     * 字符串截取函数,适应中文
     * 
     * @param      string     $str  原始字符串
     * @param      int        $start  开始位置
     * @param      int        $length  截取长度
     * @param      string     $trimmarker  附加字符串
     * @access     public
     * @return     string
     */
    function jieqi_substr($str, $start, $length, $trimmarker = '...'){
    	$strlen = $start + $length - strlen($trimmarker);
    	$len=strlen($str);
    	if($strlen > $len) $strlen=$len;
    	$tmpstr = "";
    	for($i = 0;$i < $strlen;$i++) {
    		if (ord($str[$i]) > 0x80) {
    			if($i >= $start) $tmpstr .= $str[$i].$str[$i+1];
    			$i++;
    		} else if ($i >= $start) $tmpstr .= $str[$i];
    	}
    	if($strlen<$len) $tmpstr.= $trimmarker;
    	return $tmpstr;
    }
    
    /**
     * 将字符串的函数应用到整个数组,即把数组里面所有字符串用某个函数处理一遍
     * 
     * @param      string     $funname  函数名
     * @param      array      $ary 字符串数组
     * @access     public
     * @return     array
     */
    function jieqi_funtoarray($funname, $ary){
    	if (is_array($ary)){
    		foreach($ary as $k=>$v){
    			if(is_string($v)){
    				$ary[$k] = $funname($v);
    			}elseif(is_array($v)){
    				$ary[$k] = jieqi_funtoarray($funname, $v);
    			}
    		}
    	}else{
    		$ary = $funname($ary);
    	}
    	return $ary;
    }
    
    /**
     * 数据表加前缀
     * 
     * @param      string     $tbname  数据表名
     * @param      bool       $fullname 是否已经是完整的表名,默认否
     * @access     public
     * @return     string
     */
    function jieqi_dbprefix($tbname, $fullname=false){
    	if (JIEQI_DB_PREFIX=='' || $fullname) return $tbname;
    	else return JIEQI_DB_PREFIX.'_'.$tbname;
    }
    
    /**
     * 使用反斜线引用字符串
     * 
     * @param      string     $str 输入的字符串
     * @param      string     $filter 不加反斜线的字符
     * @access     public
     * @return     string
     */
    function jieqi_setslashes($str, $filter=''){
    	if($filter == '"') return str_replace(array('\\', '\''), array('\\\\', '\\\''), $str);
    	elseif($filter == '\'') return str_replace(array('\\', '"'), array('\\\\', '\\"'), $str);
    	else return addslashes($str);
    }
    
    
    /**
     * 准备生成sql入库的数据反斜线处理
     * 
     * @param      string     $str 输入的字符串
     * @param      bool       $use_slashes 是否已经加过反斜线,默认否
     * @access     public
     * @return     string
     */
    function jieqi_dbslashes($str, $use_slashes=false){
    	if($use_slashes) return $str;
    	else{
    		//为了解决 许功盖 问题
    		if(JIEQI_SYSTEM_CHARSET == 'big5' && JIEQI_DB_CHARSET != 'big5'){
    			$str=strval($str);
    			$l=strlen($str);
    			$ret='';
    			for($i=0; $i<$l; $i++){
    				$o=ord($str[$i]);
    				if($o > 0x80) {
    					$ret.=$str[$i].$str[$i+1];
    					$i++;
    				}elseif($o == 0 || $o == 34 || $o == 39 || $o == 92){
    					$ret.=chr(92).$str[$i];
    				}else{
    					$ret.=$str[$i];
    				}
    			}
    			return $ret;
    		}else{
    			return addslashes($str);
    		}
    	}
    }
    
    /**
     * 把字符串数组转换成一个字符串
     * 
     * @param      array      $ary 字符串数组
     * @param      string     $equal 变量名称和值之间的分隔符
     * @param      string     $split 两个变量之间的分隔符
     * @access     public
     * @return     string
     */
    function jieqi_sarytostr($ary, $equal='=', $split=','){
    	$ret='';
    	foreach($ary as $k=>$v){
    		if(!empty($ret)) $ret.=$split;
    		$ret.=$k.$equal.$v;
    	}
    	return $ret;
    }
    
    /**
     * 把一个字符串还原成字符串数组
     * 
     * @param      string     $str 输入的字符串
     * @param      string     $equal 变量名称和值之间的分隔符
     * @param      string     $split 两个变量之间的分隔符
     * @access     public
     * @return     array
     */
    function jieqi_strtosary($str, $equal='=', $split=','){
    	$ret=array();
    	$tmpary=explode($split, $str);
    	foreach($tmpary as $v){
    		$idx=strpos($v, $equal);
    		if($idx>0) $ret[substr($v,0,$idx)]=substr($v,$idx+1);
    	}
    	return $ret;
    }
    
    //  ------------------------------------------------------------------------
    //  文件处理
    //  ------------------------------------------------------------------------
    
    /**
     * 读取一个文件内容
     * 
     * @param      string     $file_name 文件名
     * @access     public
     * @return     string      返回文件内容
     */
    function jieqi_readfile($file_name){
    	if (function_exists("file_get_contents")) {
    		return file_get_contents($file_name);
    	}else{
    		$filenum = @fopen($file_name, "rb");
    		@flock($filenum, LOCK_SH);
    		$file_data = @fread($filenum, @filesize($file_name));
    		@flock($filenum, LOCK_UN);
    		@fclose($filenum);
    		return $file_data;
    	}
    }
    
    /**
     * 把内容写到一个文件
     * 
     * @param      string     $file_name 文件名
     * @param      string     $data 内容
     * @param      string     $method 写的模式,默认 "wb" 是指二进制方式写
     * @access     public
     * @return     bool       成功返回true,失败返回false
     */
    function jieqi_writefile($file_name, &$data, $method = "wb"){
    	$filenum = @fopen($file_name, $method);
    	if(!$filenum) return false;
    	@flock($filenum, LOCK_EX);
    	$ret = @fwrite($filenum, $data);
    	@flock($filenum, LOCK_UN);
    	@fclose($filenum);
    	@chmod($file_name, 0777);
    	return $ret;
    }
    
    /**
     * 删除文件
     * 
     * @param      string     $file_name 文件名
     * @access     public
     * @return     bool       成功返回true,失败返回false
     */
    function jieqi_delfile($file_name){
    	$file_name = trim($file_name);
    	$matches = array();
    	if(!preg_match('/^(ftps?):\/\/([^:\/]+):([^:\/]*)@([0-9a-z\-\.]+)(:(\d+))?([0-9a-z_\-\/\.]*)/is', $file_name, $matches)){
    		return @unlink($file_name);
    	}else{
    		include_once(JIEQI_ROOT_PATH.'/lib/ftp/ftp.php');
    		$ftpssl = (strtolower($matches[1]) == 'ftps') ? 1 : 0;
    		$matches[6]=intval(trim($matches[6]));
    		$ftpport = ($matches[6] > 0) ? $matches[6] : 21;
    		$ftp =& JieqiFTP::getInstance($matches[4], $matches[2], $matches[3], '.', $ftpport, 0, $ftpssl);
    		if(!$ftp) return false;
    		$matches[7] = trim($matches[7]);
    		return $ftp->ftp_delete($matches[7]);
    	}
    }
    
    /**
     * 删除目录
     * 
     * @param      string     $dirname 目录名
     * @param      bool       $flag true表示删除目录本身(默认),false表示清空目录里面内容
     * @access     public
     * @return     bool       成功返回true,失败返回false
     */
    function jieqi_delfolder($dirname, $flag = true){
    	$dirname = trim($dirname);
    	$matches = array();
    	if(!preg_match('/^(ftps?):\/\/([^:\/]+):([^:\/]*)@([0-9a-z\-\.]+)(:(\d+))?([0-9a-z_\-\/\.]*)/is', $dirname, $matches)){
    		$handle = @opendir($dirname);
    		while (($file = @readdir($handle)) !== false) {
    			if($file != '.' && $file != '..'){
    				if (is_dir($dirname . DIRECTORY_SEPARATOR . $file)){
    					jieqi_delfolder($dirname . DIRECTORY_SEPARATOR . $file, true);
    				}else{
    					@unlink($dirname . DIRECTORY_SEPARATOR . $file);
    				}
    			}
    		}
    		@closedir($handle);
    		if ($flag) @rmdir($dirname);
    		return true;
    	}else{
    		include_once(JIEQI_ROOT_PATH.'/lib/ftp/ftp.php');
    		$ftpssl = (strtolower($matches[1]) == 'ftps') ? 1 : 0;
    		$matches[6]=intval(trim($matches[6]));
    		$ftpport = ($matches[6] > 0) ? $matches[6] : 21;
    		$ftp =& JieqiFTP::getInstance($matches[4], $matches[2], $matches[3], '.', $ftpport, 0, $ftpssl);
    		if(!$ftp) return false;
    		$matches[7] = trim($matches[7]);
    		return $ftp->ftp_delfolder($matches[7], $flag);
    	}
    }
    
    /**
     * 建立目录
     * 
     * @param      string     $dirname 目录名
     * @param      int        $mode 建立后的目录权限
     * @param      bool       $recursive 是否支持多级目录建立,默认否
     * @access     public
     * @return     bool       成功返回true,失败返回false
     */
    function jieqi_createdir($dirname, $mode=0777, $recursive = false){
    	if (!$recursive) {
    		$ret=@mkdir($dirname, $mode);
    		if($ret) @chmod($dirname, $mode);
    		return $ret;
    	}
    	if(is_dir($dirname)){
    		return true;
    	}elseif(jieqi_createdir(dirname($dirname), $mode, true)){
    		$ret=@mkdir($dirname, $mode);
    		if($ret) @chmod($dirname, $mode);
    		return $ret;
    	}else{
    		return false;
    	}
    }
    
    /**
     * 检查目录是否存在,不存在尝试自动建立
     * 
     * @param      string     $dirname 目录名
     * @param      bool       $autocreate 目录不存在是否尝试自动建立,默认否
     * @access     public
     * @return     bool       成功返回true,失败返回false
     */
    function jieqi_checkdir($dirname, $autocreate=false){
    	if(is_dir($dirname)){
    		return true;
    	}else{
    		if(empty($autocreate)) return false;
    		else return jieqi_createdir($dirname, 0777, true);
    	}
    }
    
    /**
     * 发送下载文件信息
     * 
     * @param      string     $filename 文件名
     * @param      string     $contenttype 文件mime类型
     * @access     public
     * @return     bool       成功返回true,失败返回false
     */
    function jieqi_downfile($filename, $contenttype='application/octet-stream'){
    	if(file_exists($filename)){
    		header("Content-type: ".$contenttype);
    		header("Accept-Ranges: bytes");
    		header("Content-Disposition: attachment; filename=".basename($filename));
    		echo jieqi_readfile($filename);
    		return true;
    	}else{
    		return false;
    	}
    }
    
    /**
     * 拷贝或者移动文件
     * 
     * @param      string     $from_file 原始文件名
     * @param      string     $to_file 拷贝到文件名,支持ftp模式,如 ftp://user:password@host/dir/file.txt
     * @param      int        $mode 保存后的文件权限
     * @param      bool       $move 是否移动文件,默认false表示拷贝,true表示移动
     * @access     public
     * @return     bool       成功返回true,失败返回false
     */
    function jieqi_copyfile($from_file, $to_file, $mode = 0777, $move = false){
    	$from_file = trim($from_file);
    	if(!is_file($from_file)) return false;
    	$to_file = trim($to_file);
    	$matches = array();
    	if(!preg_match('/^(ftps?):\/\/([^:\/]+):([^:\/]*)@([0-9a-z\-\.]+)(:(\d+))?([0-9a-z_\-\/\.]*)/is', $to_file, $matches)){
    		jieqi_checkdir(dirname($to_file), true);
    		if(is_file($to_file)) @unlink($to_file);
    		if($move) $ret = rename($from_file, $to_file);
    		else $ret = copy($from_file, $to_file);
    		if($ret && $mode) @chmod($to_file, $mode);
    		return $ret;
    	}else{
    		include_once(JIEQI_ROOT_PATH.'/lib/ftp/ftp.php');
    		$ftpssl = (strtolower($matches[1]) == 'ftps') ? 1 : 0;
    		$matches[6]=intval(trim($matches[6]));
    		$ftpport = ($matches[6] > 0) ? $matches[6] : 21;
    		$ftp =& JieqiFTP::getInstance($matches[4], $matches[2], $matches[3], '.', $ftpport, 0, $ftpssl);
    		if(!$ftp) return false;
    		$matches[7] = trim($matches[7]);
    		if(!$ftp->ftp_chdir(dirname($matches[7]))){
    			if(substr($matches[7],0,1) == '/') $matches[7] = substr($matches[7],1);
    			$pathary = explode('/', dirname($matches[7]));
    			foreach ($pathary as $v){
    				$v=trim($v);
    				if(strlen($v) > 0){
    					if($ftp->ftp_mkdir($v) !== false && $mode) $ftp->ftp_chmod($mode, $v);
    					$ftp->ftp_chdir($v);
    				}
    			}
    		}
    		$ret = $ftp->ftp_put(basename($matches[7]), $from_file);
    		if($ret && $mode) $ftp->ftp_chmod($mode, basename($matches[7]));
    		//$ftp->ftp_close();
    		if($move) @unlink($from_file);
    		return $ret;
    	}
    }
    
    /**
     * 将一个变量转换成可保存在设置文件的字符串
     * 
     * @param      string     $varname 变量名
     * @param      mixed      $vars 要保存的变量
     * @access     public
     * @return     string
     */
    function jieqi_extractvars($varname, &$vars){
    	$extract_array_str='';
    	if (is_array($vars)) {
    		foreach($vars as $key=>$val) {
    			if (is_array($val)) {
    				$extract_array_str .= jieqi_extractvars($varname."['".jieqi_setslashes($key, '"')."']", $vars[$key]);
    			}else {
    				$extract_array_str .= '$' . $varname . "['" . jieqi_setslashes($key, '"') . "'] = '" . jieqi_setslashes($val, '"') . "';\n";
    			}
    		}
    	}else{
    		$extract_array_str .= '$' .$varname . " = '" . jieqi_setslashes($vars, '"') . "';\n";
    	}
    	return  $extract_array_str;
    }
    
    
    /**
     * 保存配置文件(通常是把一个数组存成php文件)
     * 
     * @param      string     $fname 文件名,不带后缀
     * @param      string     $varname 变量名
     * @param      mixed      $vars 要保存的变量
     * @param      string     $module 模块名,默认'system'
     * @access     public
     * @return     bool
     */
    function jieqi_setconfigs($fname='', $varname, &$vars, $module='system'){
    	global $jieqiModules;
    	if(strlen($fname) > 0 && strlen($varname) > 0){
    		$dir = JIEQI_ROOT_PATH.'/configs';
    		if(!file_exists($dir)) @mkdir($dir, 0777);
    		@chmod($dir, 0777);
    		if($module != 'system' && isset($jieqiModules[$module])){
    			$dir.='/'.$module;
    			if(!file_exists($dir)) @mkdir($dir, 0777);
    			@chmod($dir, 0777);
    		}
    		$dir.='/'.$fname.'.php';
    		if(file_exists($dir)) @chmod($dir, 0777);
    		$varstring="<?php\n".jieqi_extractvars($varname, $vars)."\n?>";
    		return jieqi_writefile($dir, $varstring);
    	}
    	return false;
    }
    
    /**
     * 保存缓存变量
     * 
     * @param      string     $fname 文件名,不带后缀
     * @param      string     $varname 变量名
     * @param      mixed      $vars 要保存的变量
     * @param      string     $module 模块名,默认'system'
     * @param      int        $cacheid 缓存id
     * @access     public
     * @return     bool
     */
    function jieqi_setcachevars($fname='', $varname, &$vars, $module='system', $cacheid = 0){
    	global $jieqiModules;
    	global $jieqiCache;
    	if(empty($fname) || empty($varname)) return false;
    	$cachefile = JIEQI_CACHE_PATH.'/cachevars';
    	if(isset($jieqiModules[$module])) $cachefile .= '/'.$module;
    	if(empty($cacheid)){
    		$cachefile .= '/'.$fname.'.php';
    	}else{
    		$cacheid = intval($cacheid);
    		$cachefile .= '/'.$fname.jieqi_getsubdir($cacheid).'/'.$cacheid.'.php';
    	}
    	if(is_a($jieqiCache, 'JieqiCacheMemcached')){
    		return $jieqiCache->set($cachefile, $vars);
    	}else{
    		$varstring="<?php\n".jieqi_extractvars($varname, $vars)."\n?>";
    		return $jieqiCache->set($cachefile, $varstring);
    	}
    }
    
    /**
     * 从配置文件获得变量(一般是配置参数,放在configs目录下)
     * 
     * @param      string     $module 模块名
     * @param      string     $fname 文件名,不带后缀
     * @param      string     $vname 提取的变量名
     * @access     public
     * @return     bool
     */
    function jieqi_getconfigs($module, $fname, $vname=''){
    	if($vname !== false){
    		if($vname=='') $vname='jieqi'.ucfirst($fname);
    		global ${$vname};
    	}
    	//区块的参数只包含一次
    	if($vname == 'jieqiBlocks' && isset($jieqiBlocks)){
    		return true;
    	}else{
    		if($module=='system' || $module=='') $file=JIEQI_ROOT_PATH.'/configs/'.$fname.'.php';
    		else $file=JIEQI_ROOT_PATH.'/configs/'.$module.'/'.$fname.'.php';
    		$file = @realpath($file);
    		if (preg_match('/\.php$/i', $file)){
    			include_once($file);
    			return true;
    		}else return false;
    	}
    }
    
    /**
     * 获取缓存变量
     * 
     * @param      string     $module 模块名
     * @param      string     $fname 文件名,不带后缀
     * @param      string     $vname 提取的变量名
     * @param      int        $cacheid 缓存id
     * @access     public
     * @return     bool
     */
    function jieqi_getcachevars($module, $fname, $vname='', $cacheid = 0){
    	global $jieqiModules;
    	global $jieqiCache;
    	if(empty($module) || empty($fname)) return false;
    	if($vname !== false){
    		if($vname=='') $vname='jieqi'.ucfirst($fname);
    		global ${$vname};
    	}
    	$cachefile = JIEQI_CACHE_PATH.'/cachevars';
    	if(isset($jieqiModules[$module])) $cachefile .= '/'.$module;
    	if(empty($cacheid)){
    		$cachefile .= '/'.$fname.'.php';
    	}else{
    		$cacheid = intval($cacheid);
    		$cachefile .= '/'.$fname.jieqi_getsubdir($cacheid).'/'.$cacheid.'.php';
    	}
    	if(is_a($jieqiCache, 'JieqiCacheMemcached')){
    		${$vname} = $jieqiCache->get($cachefile);
    	}else{
    		$cachefile = @realpath($cachefile);
    		if(is_file($cachefile) && preg_match('/\.php$/i', $cachefile)) include_once($cachefile);
    	}
    }
    
    //******************************************************
    //基类
    //******************************************************
    
    /**
     * 通用的对象基类
     * 
     * @category   jieqicms
     * @package    system
     */
    class JieqiObject{
    	//保存所有变量
    	var $vars = array();
    	//错误数组
    	var $errors = array();
    
    	/**
    	 * 构造函数
    	 * 
    	 * @param      void       
    	 * @access     private
    	 * @return     void
    	 */
    	function JieqiObject(){
    
    	}
    
    	/**
    	 * 创建一个实例
    	 * 
    	 * @param      string     $classname 类名
    	 * @param      array      $valarray 初始化参数
    	 * @access     public
    	 * @return     object
    	 */
    	function &getInstance($classname, $valarray=''){
    		static $instance;
    		if (!isset($instance)) {
    			if (class_exists($classname)) {
    				if ($valarray==''){
    					$instance = new $classname();
    				}else{
    					if (is_array($valarray)){
    						$instance = new $classname(implode(', ',$valarray));
    					}else{
    						$instance = new $classname($valarray);
    					}
    				}
    			} else {
    				return false;
    			}
    		}
    		return $instance;
    	}
    
    	/**
    	 * 取得变量值
    	 * 
    	 * @param      string     $key 变量名
    	 * @param      string     $format 输出的格式化方式 's'-html显示格式, 'e'-html编辑格式, 'q'-数据库查询格式,'n'-不进行格式处理
    	 * @access     public
    	 * @return     mixed
    	 */
    	function getVar($key, $format = 's'){
    		if (isset($this->vars[$key])) {
    			if(is_string($this->vars[$key])){
    				switch (strtolower($format)) {
    					case 's':
    						return jieqi_htmlstr($this->vars[$key]);
    					case 'e':
    						return htmlspecialchars($this->vars[$key],ENT_QUOTES);
    					case 'q':
    						return jieqi_dbslashes($this->vars[$key]);
    					case 'n':
    					default:
    						return $this->vars[$key];
    				}
    			}else return $this->vars[$key];
    		}else{
    			return false;
    		}
    	}
    
    	/**
    	 * 取得所有变量
    	 * 
    	 * @param      void
    	 * @access     public
    	 * @return     mixed
    	 */
    	function getVars(){
    		return $this->vars;
    	}
    
    	/**
    	 * 设置一个变量
    	 * 
    	 * @param      string     $key 变量名
    	 * @param      mixed      $value 变量值
    	 * @access     public
    	 * @return     void
    	 */
    	function setVar($key, $value){
    		$this->vars[$key] = $value;
    	}
    
    	/**
    	 * 批量设置变量
    	 * 
    	 * @param      array      $var_arr 变量数组,键是变量名,值是变量值
    	 * @access     public
    	 * @return     void
    	 */
    	function setVars($var_arr){
    		foreach ($var_arr as $key => $value){
    			$this->setVar($key, $value);
    		}
    	}
    
    	/**
    	 * 取消所有变量设置
    	 * 
    	 * @param      void
    	 * @access     public
    	 * @return     void
    	 */
    	function clearVars(){
    		$this->vars=array();
    	}
    
    	/**
    	 * 产生一个错误
    	 * 
    	 * @param      string     $message 错误信息
    	 * @param      int        $mode 错误类型
    	 * @access     public
    	 * @return     void
    	 */
    	function raiseError($message='unknown error!', $mode=JIEQI_ERROR_DIE){
    		switch ($mode) {
    			case JIEQI_ERROR_DIE:
    				jieqi_printfail($message);
    				//$this->errors[$mode][] = $message;
    				break;
    			case JIEQI_ERROR_RETURN:
    			case JIEQI_ERROR_PRINT:
    				$this->errors[$mode][] = $message;
    				break;
    			default:
    				$this->errors[JIEQI_ERROR_RETURN][] = $message;
    				break;
    		}
    	}
    
    	/**
    	 * 检查是否有错误
    	 * 
    	 * @param      int        $mode 错误类型
    	 * @access     public
    	 * @return     int         返回0表示没错误,大于0表示有错误
    	 */
    	function isError($mode=0){
    		if (empty($mode)) return count($this->errors);
    		elseif(isset($this->errors[$mode])) return count($this->errors[$mode]);
    		else return 0;
    	}
    
    	/**
    	 * 获得错误信息
    	 * 
    	 * @param      int        $mode 错误类型
    	 * @access     public
    	 * @return     array      错误信息数组
    	 */
    	function getErrors($mode=''){
    		if (empty($mode)) return $this->errors;
    		return $this->errors[$mode];
    	}
    
    	/**
    	 * 清理错误信息
    	 * 
    	 * @param      int        $mode 错误类型
    	 * @access     public
    	 * @return     void
    	 */
    	function clearErrors($mode=''){
    		if (empty($mode)) $this->errors = array();
    		else $this->errors[$mode] = array();
    	}
    }
    
    //******************************************************
    //区块类
    //******************************************************
    /**
     * 区块类
     * 
     * @category   jieqicms
     * @package    system
     */
    class JieqiBlock extends JieqiObject{
    	var $blockvars = array(); //区块输入参数
    	var $module = '';  //区块所属模块
    	var $template = ''; //区块模板文件名(注意默认的模板名要和程序文件名一致,一个区块程序名是 block_file.php,模板名是 block_file.html)
    	var $cachetime = JIEQI_CACHE_LIFETIME; //缓存时间设置 -1 表示不缓存 0 表示默认系统缓存时间 >0 表示自定义缓存时间
    
    	/**
    	 * 构造函数,初始参数赋值
    	 * 
    	 * @param      array
    	 * @access     private
    	 * @return     void
    	 */
    	function JieqiBlock(&$vars){
    		global $jieqiModules;
    		global $jieqiTpl;
    		$this->blockvars=$vars;
    		if(empty($this->module)) $this->module = (empty($this->blockvars['module'])) ? 'system' : $this->blockvars['module'];
    		if(empty($this->blockvars['template'])) $this->blockvars['template'] = $this->template;
    		if(!empty($this->blockvars['template'])){
    			$this->blockvars['tlpfile'] = $jieqiModules[$this->module]['path'].'/templates/blocks/'.$this->blockvars['template'];
    		}else $this->blockvars['tlpfile'] = '';
    		if($this->cachetime == 0) $this->cachetime = JIEQI_CACHE_LIFETIME;
    		if(empty($this->blockvars['cachetime'])) $this->blockvars['cachetime'] = $this->cachetime;
    		if(empty($this->blockvars['overtime'])) $this->blockvars['overtime'] = 0;
    		if(empty($this->blockvars['cacheid'])) $this->blockvars['cacheid'] = NULL;
    		if(empty($this->blockvars['compileid'])) $this->blockvars['compileid'] = NULL;
    
    		if(!empty($this->blockvars['template'])) $this->template = $this->blockvars['template'];
    		if(!is_object($jieqiTpl) && !empty($this->blockvars['tlpfile'])){
    			include_once(JIEQI_ROOT_PATH.'/lib/template/template.php');
    			$jieqiTpl =& JieqiTpl::getInstance();
    		}
    	}
    
    	/**
    	 * 获得区块标题
    	 * 
    	 * @param      void
    	 * @access     private
    	 * @return     string
    	 */
    	function getTitle(){
    		return isset($this->blockvars['title']) ? $this->blockvars['title'] : '';
    	}
    
    	/**
    	 * 获得区块内容
    	 * 
    	 * @param      void
    	 * @access     private
    	 * @return     string
    	 */
    	function getContent(){
    		global $jieqiTpl;
    		if(JIEQI_USE_CACHE && !empty($this->blockvars['tlpfile']) && $this->blockvars['cachetime'] > 0 && $jieqiTpl->is_cached($this->blockvars['tlpfile'], $this->blockvars['cacheid'], $this->blockvars['compileid'], $this->blockvars['cachetime'], $this->blockvars['overtime'])){
    			$jieqiTpl->setCaching(1);
    			return $jieqiTpl->fetch($this->blockvars['tlpfile'], $this->blockvars['cacheid'], $this->blockvars['compileid'], $this->blockvars['cachetime'], $this->blockvars['overtime'], false);
    		}else{
    			return $this->updateContent(true);
    		}
    	}
    
    	/**
    	 * 更新区块缓存
    	 * 
    	 * @param      bool        $isreturn 是否返回内容
    	 * @access     private
    	 * @return     string
    	 */
    	function updateContent($isreturn=false){
    		global $jieqiTpl;
    		$this->setContent();
    		if(!empty($this->blockvars['tlpfile'])){
    			if(JIEQI_USE_CACHE && $this->blockvars['cachetime'] > 0){
    				$jieqiTpl->setCaching(2);
    				//$jieqiTpl->setCacheTime($this->blockvars['cachetime']);
    				//$jieqiTpl->setOverTime($this->blockvars['overtime']);
    			}else{
    				$jieqiTpl->setCaching(0);
    			}
    			$tmpvar=$jieqiTpl->fetch($this->blockvars['tlpfile'], $this->blockvars['cacheid'], $this->blockvars['compileid'], $this->blockvars['cachetime'], $this->blockvars['overtime'], false);
    			if($isreturn) return $tmpvar;
    		}
    	}
    
    	/**
    	 * 赋值区块内容
    	 * 
    	 * @param      void
    	 * @access     private
    	 * @return     void
    	 */
    	function setContent($isreturn=false){
    	}
    
    }
    
    //******************************************************
    //缓存类
    //******************************************************
    
    /**
     * 缓存类
     * 
     * @category   jieqicms
     * @package    system
     */
    class JieqiCache extends JieqiObject{
    	/**
    	 * 返回静态实例变量的引用
    	 * 
    	 * @param      void       
    	 * @access     private
    	 * @return     array
    	 */
    	function &retInstance(){
    		static $instance = array();
    		return $instance;
    	}
    
    	/**
    	 * 关闭所有连接
    	 * 
    	 * @param      void
    	 * @access     public
    	 * @return     bool
    	 */
    	function close($cache = NULL) {
    		if(is_object($cache)){
    			$cache->close();
    		}else{
    			$instance =& JieqiCache::retInstance();
    			if(!empty($instance)){
    				foreach($instance as $cache){
    					$cache->close();
    				}
    			}
    		}
    	}
    
    	//创建一个实例
    	function &getInstance($type = false, $options = array()){
    		if(in_array(strtolower($type), array('file', 'memcached'))) $type = strtolower($type);
    		else $type = 'file';
    		if(JIEQI_VERSION_TYPE == '' || JIEQI_VERSION_TYPE == 'Free') $type = 'file';
    		$class = 'JieqiCache'.ucfirst($type);
    		$instance =& JieqiCache::retInstance();
    		$inskey = md5($class.'::'.serialize($options));
    		if (!isset($instance[$inskey])) {
    			$instance[$inskey] = new $class($options);
    			if($type != 'file' && $instance[$inskey] === false) $instance[$inskey] = new JieqiCacheFile($options);
    		}
    		if(!defined('JIEQI_CACHE_CONNECTED')) @define('JIEQI_CACHE_CONNECTED',true);
    		return $instance[$inskey];
    	}
    }
    
    /**
     * 文件缓存类
     * 
     * @category   jieqicms
     * @package    system
     */
    class JieqiCacheFile extends JieqiCache{
    
    	/**
    	 * 构建函数
    	 * 
    	 * @access     public
    	 * @return     bool
    	 */
    	function JieqiCacheFile(){
    		return true;
    	}
    
    	/**
    	 * 关闭所有连接
    	 * 
    	 * @param      void
    	 * @access     public
    	 * @return     bool
    	 */
    	function close($cache = NULL) {
    		return true;
    	}
    
    	/**
    	 * 是否已经缓存
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @param      int         $ttl 缓存时间
    	 * @access     public
    	 * @return     boolean
    	 */
    	function iscached($name, $ttl = 0, $over = 0){
    		if(empty($ttl) && empty($over)){
    			return is_file($name);
    		}else{
    			$ftime = @filemtime($name);
    			if(!$ftime) return false;
    			if(($ttl > 0 && JIEQI_NOW_TIME - $ftime > $ttl) || ($over > 0 && $over > $ftime)){
    				jieqi_delfile($name);
    				return false;
    			}else{
    				return true;
    			}
    		}
    	}
    
    	/**
    	 * 返回缓存的时间
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @access     public
    	 * @return     boolean
    	 */
    	function cachedtime($name){
    		if(file_exists($name)) return filemtime($name);
    		else return 0;
    	}
    
    	/**
    	 * 更新缓存时间
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @access     public
    	 * @return     boolean
    	 */
    	function uptime($name){
    		@touch($name, time());
    		@clearstatcache();
    	}
    
    	/**
    	 * 获得缓存
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @param      int         $ttl 缓存时间
    	 * @access     public
    	 * @return     string
    	 */
    	function get($name, $ttl = 0, $over = 0){
    		if(empty($ttl) && empty($over)){
    			return jieqi_readfile($name);
    		}else{
    			$ftime = @filemtime($name);
    			if(!$ftime) return false;
    			if(($ttl > 0 && JIEQI_NOW_TIME - $ftime > $ttl) || ($over > 0 && $over > $ftime)){
    				jieqi_delfile($name);
    				return false;
    			}else{
    				return jieqi_readfile($name);
    			}
    		}
    	}
    
    	/**
    	 * 设置缓存
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @param      string      $value 缓存的内容
    	 * @param      int         $ttl 缓存时间
    	 * @access     public
    	 * @return     bool
    	 */
    	function set($name, $value, $ttl = 0, $over = 0){
    		if(jieqi_checkdir(dirname($name), true)) return jieqi_writefile($name, $value);
    		else return false;
    	}
    
    	/**
    	 * 删除缓存
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @access     public
    	 * @return     bool
    	 */
    	function delete($name){
    		return jieqi_delfile($name);
    	}
    
    	/**
    	 * 清理缓存
    	 * 
    	 * @param      void
    	 * @access     public
    	 * @return     bool
    	 */
    	function clear($path=''){
    		if(!empty($path) && is_dir($path)) jieqi_delfolder($path);
    	}
    }
    
    /**
     * memcached缓存类
     * 
     * @category   jieqicms
     * @package    system
     */
    class JieqiCacheMemcached extends JieqiCache{
    
    	var $_connected; //是否已经连接
    	var $_mc; //memcached对象
    	var $_md5key = true; //键值是否md5后保存
    	var $_keyext = '.mt'; //保存键值时候,附加一个后缀作为新的键保存时间
    
    	/**
    	 * 构建函数,连接memcached服务
    	 * 
    	 * @param      array      $options 参数数组
    	 * @access     public
    	 * @return     bool
    	 */
    	function JieqiCacheMemcached($options){
    		if(!class_exists('Memcache')) exit('Memcache class not exists');
    		if(!isset($options['host'])) $options['host'] = '127.0.0.1';
    		if(!isset($options['port'])) $options['port'] = 11211;
    		if(!isset($options['timeout'])) $options['timeout'] = false;
    		if(!isset($options['persistent'])) $options['persistent'] = false;
    
    		$func = $options['persistent'] ? 'pconnect' : 'connect';
    		$this->_mc  = &new Memcache;
    		$this->_connected = ($options['timeout'] === false) ? @$this->_mc->$func($options['host'], $options['port']) : @$this->_mc->func($options['host'], $options['port'], $options['timeout']);
    		if(!$this->_connected && JIEQI_ERROR_MODE > 0) echo 'Could not connect to memcache and try to use file cache now!<br />';
    		return $this->_connected;
    	}
    
    	/**
    	 * 关闭所有连接
    	 * 
    	 * @param      void
    	 * @access     public
    	 * @return     bool
    	 */
    	function close($cache = NULL) {
    		if(is_object($this->_mc)) return $this->_mc->close();
    		else return true;
    	}
    
    	/**
    	 * 是否已经缓存
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @param      int         $ttl 缓存时间
    	 * @access     public
    	 * @return     boolean
    	 */
    	function iscached($name, $ttl = 0, $over = 0){
    		return ($this->get($name, $ttl, $over) === false) ? false : true;
    	}
    
    	/**
    	 * 返回缓存的时间
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @access     public
    	 * @return     boolean
    	 */
    	function cachedtime($name){
    		if($this->_md5key) $name = md5($name);
    		return intval($this->_mc->get($name.$this->_keyext));
    	}
    
    	/**
    	 * 更新缓存时间
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @access     public
    	 * @return     boolean
    	 */
    	function uptime($name){
    		if($this->_md5key) $name = md5($name);
    		return $this->_mc->set($name.$this->_keyext, time(), 0, 0);
    	}
    
    	/**
    	 * 获得缓存
    	 * 
    	 * @param      string      $name 缓存的键名
    	 * @param      int         $ttl 缓存时间
    	 * @access     public
    	 * @return     string
    	 */
    	function get($name, $ttl = 0, $over = 0){
    		$key = ($this->_md5key == true) ? md5($name) : $name;
    		$ret = $this->_mc->get($key);
    		if($ret === false || (empty($ttl) && empty($over))) return $ret;
    		else{
    			$ctime = $this->cachedtime($name);
    			if(($ttl > 0 && JIEQI_NOW_TIME - $ctime > $ttl) || ($over > 0 && $over > $ctime)){
    				$this->delete($name);
    				return false;
    			}else{
    				return $ret;
    			}
    		}
    	}
    
    	/**
    	 * 设置缓存
    	 * 
    	 * @param      string      $name 缓存的键名
    	 * @param      string      $value 缓存的内容
    	 * @access     public
    	 * @return     bool
    	 */
    	function set($name, $value, $ttl=0, $over = 0){
    		if($ttl > 2592000) $ttl = 0;
    		if($this->_md5key) $name = md5($name);
    		if($over > JIEQI_NOW_TIME && $over - JIEQI_NOW_TIME < $ttl) $ttl = $over - JIEQI_NOW_TIME;
    		return ($this->_mc->set($name.$this->_keyext, time(), 0, $ttl) && $this->_mc->set($name, $value, 0, $ttl));
    	}
    
    	/**
    	 * 删除缓存
    	 * 
    	 * @param      string      $name 缓存的键名(这里是文件名)
    	 * @access     public
    	 * @return     bool
    	 */
    	function delete($name){
    		if($this->_md5key) $name = md5($name);
    		return ($this->_mc->delete($name.$this->_keyext) && $this->_mc->delete($name));
    	}
    
    	/**
    	 * 清理缓存
    	 * 
    	 * @param      void
    	 * @access     public
    	 * @return     bool
    	 */
    	function clear(){
    		return $this->_mc->flush();
    	}
    }
    
    ?>
  • 动态星空背景个人主页(带后台)网站源码

    动态星空背景个人主页(带后台)网站源码

    动态星空背景个人主页(带后台)网站源码

    源码下载地址:https://wwkz.lanzoum.com/iwtJ517e04wj

    后台地址:域名/home/admin
    后台账号:admin
    后台密码:123456
    登录后台后可以修改账号和密码

    上传网站源码到虚拟主机或者云服务器打开网址就是搭建教程

    演示站:http://e4f90139.iumd.cn/

    演示站后台:http://e4f90139.iumd.cn/home/admin/ (密码修改了,按照这格式就是后台)

  • 源码分享海外版区块链投资系统/元宇宙投资理财系统/云矿机投资源码

    源码分享海外版区块链投资系统/元宇宙投资理财系统/云矿机投资源码

    海外版区块链投资系统/元宇宙投资理财系统/云矿机投资

    下载地址:https://xiaok.lanzoum.com/izE4S17euzwf

    源码分享海外版区块链投资系统/元宇宙投资理财系统/云矿机投资源码源码分享海外版区块链投资系统/元宇宙投资理财系统/云矿机投资源码源码分享海外版区块链投资系统/元宇宙投资理财系统/云矿机投资源码源码分享海外版区块链投资系统/元宇宙投资理财系统/云矿机投资源码