<?php
/**************************************************
* Created: 2010-06-08
*
* 框架核心文件
*
* @Xweibo (C)1996-2099 SINA Inc.
* @Author xionghui <xionghui1@staff.sina.com.cn>
*
***************************************************/
class APP
{
//------------------------------------------------------------------
function APP(){
}
//------------------------------------------------------------------
/**
* 初始化 APP
* @return 无返回值
*/
function init(){
static $is_init;
if ($is_init) {return true;}
APP::_initConfig();
APP::_initRouteVar();
APP::_aclCheck();
APP::_doPreActions();
$is_init = true;
}
//------------------------------------------------------------------
/// 访问控制检查
function _aclCheck(){
$entry = V('-:aclTable/E');
// 入口控制配置不为空
if ( is_array($entry) && !empty($entry) ){
foreach($entry as $e){
}
}
$ips = V('-:aclTable/IP');
// IP控制配置不为空
if ( is_array($ips) && !empty($ips) ){
foreach($ips as $ip){
}
}
}
//------------------------------------------------------------------
/// 解释路由模式为 rewrite 时的 GET 变量
function _initRouteVar(){
if ( !in_array(R_MODE,array(2,3))) {return true;}
$ss = trim(V('S:PATH_INFO',''),'/');
if (empty($ss)) {return true;}
if (preg_match_all("#/([a-z0-9_]+)-([^/]+)#sim",$ss,$pv)){
foreach ($pv[1] as $i=>$ni){
// echo " $ni => ".($pv[2][$i])."\n"; //urldecode
$_GET[$ni] = urldecode($pv[2][$i]);
$_REQUEST[$ni] = urldecode($pv[2][$i]);
V('g:'.$ni, $_GET[$ni], true);
V('r:'.$ni, $_GET[$ni], true);
}
}
}
//------------------------------------------------------------------
/**
* 初始化配置
* @return 无返回值
*/
function _initConfig(){
if (!is_array($GLOBALS[V_GLOBAL_NAME])){
$GLOBALS[V_GLOBAL_NAME] = array();
}
if (APP::V('g:'.V_AJAX_FLAG_NAME, false)){
define('IS_IN_AJAX', true);
}else{
define('IS_IN_AJAX', false);
}
// 兼容 WIN 服务器中的 \ 路径问题
if (PHP_OS=='WINNT'){
$v1 = str_replace('\\','/',V('S:DOCUMENT_ROOT'));
$v2 = str_replace('\\','/',V('S:SCRIPT_FILENAME'));
V('S:DOCUMENT_ROOT',$v1,true);
V('s:DOCUMENT_ROOT',$v1,true);
V('S:SCRIPT_FILENAME',$v2,true);
V('s:SCRIPT_FILENAME',$v2,true);
}
// parse base url
/*
$p = V("s:SERVER_PORT")=='80' ? '' : ':'.V("s:SERVER_PORT");
$s = V("s:SCRIPT_NAME");
$baseUrl = 'http://' . V("s:HTTP_HOST") . $p . "/" . ltrim(substr($s,0,strrpos($s,"/")),"/");
define('W_BASE_URL',rtrim($baseUrl,"/ ") . "/" );
*/
$p = V("s:SERVER_PORT")=='80' ? '' : ':'.V("s:SERVER_PORT");
define('W_BASE_HTTP','http://' . V("s:HTTP_HOST") );
define('W_BASE_URL',preg_replace("#/[^/]+$#",'/',str_replace(V('S:DOCUMENT_ROOT'),'',V('S:SCRIPT_FILENAME'))));
define('W_BASE_FILENAME', basename(V('S:SCRIPT_FILENAME')));
}
//------------------------------------------------------------------
/**
* APP::request(); 处理用户请求
* @param $halt 执行完请求后是否退出
* @return 无返回值
*/
function request($halt=false){
APP::M(APP::getRequestRoute());
if ($halt) exit;
}
//------------------------------------------------------------------
/**
* APP::getRequestRoute(); 从当前请求中取得模块路由信息
* @param $is_acc 是否以数组的形式返回
* @return requestRoute
*/
function getRequestRoute($is_acc=false){
//--------------------------------------------------------------
$m = "";
if ( R_MODE == 0 ){
$m = APP::V("g:".R_GET_VAR_NAME);
$m = $m ? $m : R_DEF_MOD;
}
//--------------------------------------------------------------
if ( R_MODE == 1 ){
$m = ltrim(APP::V("s:PATH_INFO")," /");
$m = $m ? $m : R_DEF_MOD;
}
//--------------------------------------------------------------
if ( R_MODE == 2 ){
$ss = trim(V('S:PATH_INFO',''),'/');
if (empty($ss)) {
$m = R_DEF_MOD;
}else{
preg_match("#^([a-z_][a-z0-9_\./]*/|)([a-z0-9_]+)(?:\.([a-z_][a-z0-9_]*))?(?:/|\$)#sim",$ss,$mm);
//print_r($mm);
$m = trim($mm[0], '/');
}
}
//--------------------------------------------------------------
if ( R_MODE == 3 ){
$m = APP::V("g:".R_GET_VAR_NAME);
if ( empty($m) ){
$ss = trim(V('S:PATH_INFO',''),'/');
if (empty($ss)) {
$m = R_DEF_MOD;
}else{
preg_match("#^([a-z_][a-z0-9_\./]*/|)([a-z0-9_]+)(?:\.([a-z_][a-z0-9_]*))?(?:/|\$)#sim",$ss,$mm);
$m = trim($mm[0], '/');
}
}
}
//--------------------------------------------------------------
if (!empty($m)) {
if (!$is_acc) {
return $m;
}else{
$r = APP::_parseRoute($m);
return array('path'=>$r[1], 'class'=>$r[2], 'function'=>$r[3]);
}
}
//--------------------------------------------------------------
trigger_error("Unknow route type: [ ".R_TYPE." ]", E_USER_ERROR);
}
//------------------------------------------------------------------
/**
* APP::gerRuningRoute();
* 获取当前正在执行的 mRoute
* @param $is_acc 是否以数组的形式返回
*/
function getRuningRoute($is_acc=false){
$m = APP::getData('RuningRoute');
return ($is_acc) ? $m : $m['path'].$m['class'].".".$m['function'] ;
}
//------------------------------------------------------------------
/**
* APP::addPreAction($doRoute, $type, $args=false);
* 此方法必须在 APP::init();之前执行
* @param $doRoute 模块路由,如 demo/index.show
* @param $type 模块类型,可选值为: m , f , c ; 分别表示 模块 函数 和 类库
* @param $args 模块所需要的参数,统一用数据传递,$type 为 m 时无效
* @param $except 例外模块,在这些模块中 将不执行此预处理程序 默认为空 可以是数组或者字符串
* @return 无返回值
*/
function addPreDoAction($doRoute, $type, $args=array(), $except='') {
APP::setData($doRoute . ',' . $type, array($doRoute,$type, $args, $except), '_PreDoActions');
}
//------------------------------------------------------------------
/// 处理预加载模块
function _doPreActions() {
$as = APP::getData(false,'_PreDoActions');
if (empty($as) || !is_array($as)) {return true;}
foreach($as as $v ){
$route = trim($v[0]);
$type = strtoupper($v[1]);
$arg = $v[2];
$noRun = $v[3];
if (!empty($noRun)){
if (!is_array($noRun)) { $noRun = array($v[3]); }
//print_r($noRun);exit;
if (in_array(APP::getRequestRoute(),$noRun)){ continue;}
}
switch ($type) {
case 'M' :
APP::M($route);
break;
case 'C' :
$rData = APP::_parseRoute($route);
$c = APP::N($rData[2]);
$c->$rData[3]($arg);
break;
case 'F' :
APP::F($route,$arg);
break;
default :
trigger_error("Unknow preDoAction type: [ ".$type." ]", E_USER_ERROR);
break;
}
}
}
//------------------------------------------------------------------
/**
* APP::setData($k,$v=false,$category='STATIC_STORE');
* 保存一个静态全局数据
*/
function setData($k,$v=false,$category='STATIC_STORE'){
if (!is_array($GLOBALS[V_GLOBAL_NAME])){
$GLOBALS[V_GLOBAL_NAME] = array();
}
if (!is_array($GLOBALS[V_GLOBAL_NAME][$category])){
$GLOBALS[V_GLOBAL_NAME][$category] = array();
}
if (is_array($k)){
$GLOBALS[V_GLOBAL_NAME][$category] = array_merge($GLOBALS[V_GLOBAL_NAME][$category], $k);
}else{
$GLOBALS[V_GLOBAL_NAME][$category][$k] = $v;
}
}
//------------------------------------------------------------------
/**
* APP::getData($k=false, $category='STATIC_STORE');
* 获取一个静态存储数据
*/
function getData($k=false, $category='STATIC_STORE'){
if (!is_array($GLOBALS[V_GLOBAL_NAME][$category])){
$GLOBALS[V_GLOBA
没有合适的资源?快使用搜索试试~ 我知道了~
微博系统微博系统微博系统微博系统微博系统
共402个文件
php:149个
gif:101个
js:67个
3星 · 超过75%的资源 需积分: 50 20 下载量 84 浏览量
2011-04-12
10:41:50
上传
评论 2
收藏 6.68MB ZIP 举报
温馨提示
用的是php语言开发的一个微博系统,微博系统微博系统微博系统微博系统微博系统
资源推荐
资源详情
资源评论
收起资源包目录
微博系统微博系统微博系统微博系统微博系统 (402个子文件)
cron_lock_follow_count 12B
base.css 28KB
admin.css 12KB
style.css 7KB
skin.css 7KB
skin.css 6KB
flora.datepick.css 4KB
form.css 4KB
teahouse.css 4KB
jquery.datepick.css 4KB
smoothness.datepick.css 4KB
redmond.datepick.css 4KB
humanity.datepick.css 4KB
ui.datepick.css 2KB
ui-uilightness.datepick.css 596B
ui-uidarkness.datepick.css 595B
ui-swankypurse.datepick.css 595B
ui-southstreet.datepick.css 595B
ui-trontastic.datepick.css 594B
ui-excitebike.datepick.css 594B
ui-smoothness.datepick.css 594B
ui-hotsneaks.datepick.css 593B
ui-cupertino.datepick.css 593B
ui-blacktie.datepick.css 592B
ui-humanity.datepick.css 592B
ui-mintchoc.datepick.css 592B
ui-redmond.datepick.css 591B
ui-blitzer.datepick.css 591B
ui-dotluv.datepick.css 590B
ui-vader.datepick.css 589B
ui-start.datepick.css 589B
private.css 41B
small.cur 2KB
big.cur 2KB
Thumbs.db 69KB
bg.gif 104KB
bg.gif 104KB
skin_bg.gif 36KB
wind_thumb.gif 16KB
skin_bg.gif 15KB
all_bg.gif 14KB
Transparent.gif 7KB
Transparent.gif 7KB
crazy.gif 6KB
sunny_thumb.gif 6KB
laugh.gif 5KB
white.gif 4KB
white.gif 4KB
nav-bg.gif 4KB
sleepy.gif 4KB
sweat.gif 4KB
cheer.gif 4KB
cry.gif 3KB
icon_bg.gif 3KB
love.gif 3KB
btn_bg.gif 3KB
sun.gif 3KB
tooth.gif 3KB
m_thumb.gif 2KB
btn7.gif 2KB
btn1.gif 2KB
hate.gif 2KB
btn2.gif 2KB
bg3_on.gif 2KB
heart.gif 2KB
ad_2.gif 2KB
dizzy.gif 2KB
bg1_on.gif 2KB
bg4_on.gif 2KB
all_bg.gif 2KB
bg2_on.gif 2KB
bg3.gif 2KB
angry.gif 2KB
icon1.gif 2KB
icon3.gif 2KB
bg1.gif 2KB
icon4.gif 2KB
bg4.gif 2KB
icon2.gif 2KB
bg2.gif 2KB
btn8.gif 2KB
btn4.gif 2KB
sad.gif 2KB
smile.gif 1KB
moon.gif 1KB
rain.gif 1KB
bingo_thumb.gif 1KB
music_thumb.gif 1KB
fan.gif 1KB
cake.gif 1KB
warning.gif 1KB
umb_thumb.gif 1KB
repeat.gif 1KB
pig.gif 1KB
movie_thumb.gif 1KB
tv_thumb.gif 1KB
football.gif 1KB
star_thumb.gif 1KB
dumpling.gif 1KB
redcard.gif 1KB
共 402 条
- 1
- 2
- 3
- 4
- 5
资源评论
- wlcw162012-03-08这个貌似是记事狗的微博,下次应该注明一下。
普通网友
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功