/** * @brief head 输出头部信息 * * @return void */ public function head() { $head = '<meta http-equiv="content-type" content="text/html; charset=UTF-8" />' . "\n"; $head .= '<meta name="description" content="'; $head .= $this->description ? $this->description : OptionLibrary::get('description'); $head .= '" />' . "\n"; $head .= '<meta name="keywords" content="'; $head .= $this->keywords ? $this->keywords . ',' . OptionLibrary::get('keywords') : OptionLibrary::get('keywords'); $head .= '" />' . "\n"; $head .= '<meta name="generator" content="LogX V' . LOGX_VERSION . '" />' . "\n"; echo Plugin::call('head', $head); }
/** * @brief register 用户注册 * * @return void */ public function register() { if (OptionLibrary::get('register') == 'close') { $r = array('success' => FALSE, 'message' => _t('Register closed.')); Response::ajaxReturn($r); return; } $u = array(); $u['username'] = Request::P('username', 'string'); $u['email'] = Request::P('email', 'string'); if ($u['username'] == NULL || $u['email'] == NULL) { $r = array('success' => FALSE, 'message' => _t('Username or Email missed.')); Response::ajaxReturn($r); return; } $u['password'] = LogX::randomString(8); $u['website'] = ''; $u['group'] = 1; $user = new UserLibrary(); if ($uid = $user->addUser($u)) { $r = array('success' => TRUE, 'message' => sprintf(_t('Register successed, you password is <b>%s</b>.'), $u['password'])); } else { $r = array('success' => FALSE, 'message' => _t('Username or Email existed.')); } Response::ajaxReturn($r); }
?> </label> </li> </ul> <p class="description"><?php _e('Please make sure that your server supports rewrite.'); ?> </p> </li> <li> <label class="add-post-label" for="timezone"><?php _e('Timezone'); ?> </label> <?php $timezone = OptionLibrary::get('timezone'); ?> <ul class="clearfix"> <li> <select name="timezone" id="timezone"> <option value="Etc/GMT"<?php if ($timezone == 'Etc/GMT') { ?> selected="true"<?php } ?> >格林威治(子午线)标准时间 (GMT)</option> <option value="Etc/GMT-1"<?php if ($timezone == 'Etc/GMT-1') { ?> selected="true"<?php
/** * @brief patch 路由组装 * * @param $routeName 路由名 * @param $params 路由规则参数 * * @return string */ public static function patch($routeName, $params) { if ($route = self::getRoute($routeName)) { $pattern = array(); foreach ($route['params'] as $row) { $pattern[$row] = isset($params[$row]) ? $params[$row] : '{' . $row . '}'; } if (OptionLibrary::get('rewrite') == 'open') { return Request::getDomain() . substr(LOGX_PATH, 0, strlen(LOGX_PATH) - 1) . vsprintf($route['format'], $pattern); } else { return Request::getDomain() . LOGX_PATH . 'index.php' . vsprintf($route['format'], $pattern); } } else { return ''; } }
/** * @brief showAttachment 防盗链显示、下载附件 * * @param $params 参数 * * @return void */ public function showAttachment($params) { $meta = new MetaLibrary(); $meta->setType(3); $meta->setMID($params['mid']); if (!($m = $meta->getMeta())) { Response::error(404); return; } $m = $m[0]; // 判断 referer 防盗链 $referer = Request::S('HTTP_REFERER', 'string'); if ($referer) { $referer = parse_url($referer); $host = parse_url(OptionLibrary::get('domain')); if (LogX::getDomain($referer['host']) != LogX::getDomain($host['host'])) { Response::error(403); exit; } } $m['alias'] = LOGX_FILE . $m['alias']; // 通过判断getimagesize取出的图片信息是否存在类型标记和色彩位深来防止伪造。 $isimage = false; if (stristr($m['description'], 'image')) { if (function_exists('getimagesize')) { $imginfo = @getimagesize($m['alias']); if (isset($imginfo[2]) && isset($imginfo['bits'])) { $isimage = true; } unset($imginfo); } else { $isimage = true; } } // 附件读取形式,inline直接读取,attachment下载到本地 $disposition = $isimage ? 'inline' : 'attachment'; // 统计附件下载次数 if ($disposition == 'attachment') { $meta->incReply($params['mid']); } $m['description'] = $m['description'] ? $m['description'] : 'application/octet-stream'; if (is_readable($m['alias'])) { @ob_end_clean(); if ($disposition == 'inline') { Response::setExpire(60 * 24 * 365); } header('content-Encoding: none'); header('content-type: ' . $m['description']); header('content-Disposition: ' . $disposition . '; filename=' . urlencode($m['name'])); header('content-Length: ' . abs(filesize($m['alias']))); $fp = @fopen($m['alias'], 'rb'); @fpassthru($fp); @fclose($fp); exit; } else { Response::error(404); } }
/** * @brief postPath 输出文章路径 * * @return void */ public function postPath() { // 检查是否有文章 if (!$this->postHave()) { return; } $path = $this->postTitle(0, FALSE); $meta = new MetaLibrary(); $meta->setType(1); $meta->setPID($this->postID(FALSE)); $metas = $meta->getMeta(); $me = isset($metas[0]['mid']) ? $metas[0]['mid'] : 0; $m = isset($metas[0]) ? $metas[0] : array(); $meta->setPID(0); while ($me) { $path = '<a href="' . Router::patch('Category', array('alias' => $m['alias'])) . '">' . $m['name'] . '</a> » ' . $path; if ($m['parent'] == 0) { break; } $meta->setMID($m['parent']); $metas = $meta->getMeta(); $me = isset($metas[0]['mid']) ? $metas[0]['mid'] : 0; $m = isset($metas[0]) ? $metas[0] : array(); } $path = '<a href="' . LOGX_PATH . '">' . OptionLibrary::get('title') . '</a> » ' . $path; echo $path; }
}, success: function(data){ data = eval('('+data+')'); if( data.success ) { $("#tabRegister").html('<div class="success">'+data.message+'</div>'); } else { $("#login-tips").html('<font color="red">'+data.message+'</font>'); $("#r_submit").attr('disabled',false); } }}); }); </script> </head> <body style="background-color: #F6F8FF;"> <?php $register = OptionLibrary::get('register') == 'close' ? FALSE : TRUE; ?> <div id="content"> <div id="content-in"> <dl class="Tabs login-box"> <dt id="AdminTabs"><a href="#tabLogin" class="select"><?php _e('Login'); ?> </a> <?php if ($register) { ?> <a href="#tabRegister"><?php _e('Register'); ?> </a><?php }
/** * @brief advancedSettingsDo 保存高级设置 * * @return void */ private function advancedSettingsDo() { // 验证用户权限 if (!Widget::getWidget('User')->isAdmin()) { Response::ajaxReturn(array('success' => FALSE, 'message' => _t('Permission denied.'))); return; } $rewrite = Request::P('rewrite', 'string'); $timezone = Request::P('timezone', 'string'); $register = Request::P('register', 'string'); if (!$rewrite || !$timezone || !$register) { $r = array('success' => FALSE, 'message' => _t('Option can not be null.')); Response::ajaxReturn($r); } else { if ($rewrite == 'close') { if (file_exists(LOGX_ROOT . '.htaccess') && !@unlink(LOGX_ROOT . '.htaccess')) { $r = array('success' => FALSE, 'message' => _t('Can not delete .htaccess file.')); Response::ajaxReturn($r); return; } } else { $content = "# BEGIN LogX\n\n<IfModule mod_rewrite.c>\nRewriteEngine On\nRewriteBase " . LOGX_PATH . "\nRewriteCond \$1 ^(index\\.php)?\$ [OR]\nRewriteCond \$1 \\.(gif|jpg|png|css|js|ico)\$ [NC,OR]\nRewriteCond %{REQUEST_FILENAME} -f [OR]\nRewriteCond %{REQUEST_FILENAME} -d\nRewriteRule ^(.*)\$ - [S=1]\nRewriteRule . " . LOGX_PATH . "index.php [L]\n</IfModule>\n\n# END LogX"; if (!file_exists(LOGX_ROOT . '.htaccess') && !@file_put_contents(LOGX_ROOT . '.htaccess', $content)) { $r = array('success' => FALSE, 'message' => _t('Can not create .htaccess file.')); Response::ajaxReturn($r); return; } } OptionLibrary::set('rewrite', $rewrite); OptionLibrary::set('timezone', $timezone); OptionLibrary::set('register', $register); $r = array('success' => TRUE, 'message' => _t('Settings Saved.')); Response::ajaxReturn($r); } }
/** * @brief init LogX 全局初始化方法 * * @return void */ public static function init() { // 输出 Logo if (isset($_GET['591E-D5FC-8065-CD36-D3E8-E45C-DB86-9197'])) { Response::logo(); } // 非 DEBUG 模式下关闭错误输出 if (defined('LOGX_DEBUG')) { error_reporting(E_ALL); } else { error_reporting(0); } // 设置自动载入函数 function __autoLoad($className) { if (substr($className, -7) == 'Library' && is_file(LOGX_LIB . $className . '.php')) { @(require_once LOGX_LIB . $className . '.php'); } } // 设置错误与异常处理函数 set_error_handler(array(__CLASS__, 'error')); set_exception_handler(array(__CLASS__, 'exception')); // 运行环境检查 if (!version_compare(PHP_VERSION, '5.0.0', '>=')) { throw new LogXException(sprintf(_t('LogX needs PHP 5.0.x or higher to run. You are currently running PHP %s.'), PHP_VERSION)); } if (!version_compare(PHP_VERSION, '5.2.0', '>=')) { // 针对低版本 PHP 的兼容代码 @(require_once LOGX_CORE . 'Compat.php'); } // 设置语言 if (defined('LOGX_LANGUAGE')) { Language::set(LOGX_LANGUAGE); } else { Language::set('zh-cn'); } // 预编译核心文件 global $coreFiles; if (!defined('LOGX_DEBUG') && !file_exists(LOGX_CACHE . '~core.php')) { Compile::build(LOGX_CACHE, $coreFiles, 'core'); } elseif (!defined('LOGX_DEBUG')) { $file_time = filemtime(LOGX_CACHE . '~core.php'); foreach ($coreFiles as $file) { if (filemtime($file) > $file_time) { Compile::build(LOGX_CACHE, $coreFiles, 'core'); break; } } } self::$_globalVars = array('RUN' => array('TIME' => microtime(TRUE), 'MEM' => function_exists('memory_get_usage') ? memory_get_usage() : 0, 'LANG' => 'zh-cn'), 'SYSTEM' => array('OS' => PHP_OS, 'HTTP' => Request::S('SERVER_SOFTWARE', 'string'), 'PHP' => PHP_VERSION, 'MYSQL' => ''), 'SUPPORT' => array('MYSQL' => function_exists('mysql_connect'), 'GD' => function_exists('imagecreate'), 'MEMCACHE' => function_exists('memcache_connect'), 'SHMOP' => function_exists('shmop_open'), 'GZIP' => function_exists('ob_gzhandler'), 'TIMEZONE' => function_exists('date_default_timezone_set'), 'AUTOLOAD' => function_exists('spl_autoload_register')), 'INI' => array('ALLOW_CALL_TIME_PASS_REFERENCE' => ini_get('allow_call_time_pass_reference'), 'MAGIC_QUOTES_GPC' => ini_get('magic_quotes_gpc'), 'REGISTER_GLOBALS' => ini_get('register_globals'), 'ALLOW_URL_FOPEN' => ini_get('allow_url_fopen'), 'ALLOW_URL_INCLUDE' => ini_get('allow_url_include'), 'SAFE_MODE' => ini_get('safe_mode'), 'MAX_EXECUTION_TIME' => ini_get('max_execution_time'), 'MEMORY_LIMIT' => ini_get('memory_limit'), 'POST_MAX_SIZE' => ini_get('post_max_size'), 'FILE_UPLOADS' => ini_get('file_uploads'), 'UPLOAD_MAX_FILESIZE' => ini_get('upload_max_filesize'), 'MAX_FILE_UPLOADS' => ini_get('max_file_uploads'))); // 清除不需要的变量,防止变量注入 $defined_vars = get_defined_vars(); foreach ($defined_vars as $key => $value) { if (!in_array($key, array('_POST', '_GET', '_COOKIE', '_SERVER', '_FILES'))) { ${$key} = ''; unset(${$key}); } } // 对用户输入进行转义处理 if (!get_magic_quotes_gpc()) { $_GET = self::addSlashes($_GET); $_POST = self::addSlashes($_POST); $_COOKIE = self::addSlashes($_COOKIE); } // 开启输出缓存 if (defined('LOGX_GZIP') && self::$_globalVars['SUPPORT']['GZIP']) { ob_start('ob_gzhandler'); } else { ob_start(); } // 连接到数据库 Database::connect(DB_HOST, DB_USER, DB_PWD, DB_NAME, DB_PCONNECT); self::$_globalVars['SYSTEM']['MYSQL'] = Database::version(); // 设定时区 if (self::$_globalVars['SUPPORT']['TIMEZONE']) { date_default_timezone_set(OptionLibrary::get('timezone')); } // 连接到缓存 Cache::connect(CACHE_TYPE); // 初始化路由表 Router::init(); // 初始化主题控制器 Theme::init(); // 初始化 Plugin Plugin::initPlugins(); // 初始化全局组件 Widget::initWidget('Global'); Widget::initWidget('Widget'); Widget::initWidget('Page'); Widget::initWidget('User'); // 尝试自动登录 Widget::getWidget('User')->autoLogin(); // 启动路由分发 Router::dispatch(); }
/** * @brief setTheme 设置默认主题 * * @param $theme 主题名称 * * @return bool */ public static function setTheme($theme) { if (in_array($theme, self::$_themes)) { OptionLibrary::set('theme', $theme); return TRUE; } else { return FALSE; } }