收藏 分销(赏)

ecmall核心文件ecmall.php分析.doc

上传人:二*** 文档编号:4613182 上传时间:2024-10-07 格式:DOC 页数:89 大小:298KB
下载 相关 举报
ecmall核心文件ecmall.php分析.doc_第1页
第1页 / 共89页
亲,该文档总共89页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、php?php/* ECMall框架核心文件,包含最基础的类与函数* Streamlining comes from Sparrow PHP Garbin* author Garbin*/*-以下是系统常量-*/* 记录程序启动时间 */define(START_TIME, ecm_microtime();/* 判断请求方式 */define(IS_POST, (strtoupper($_SERVERREQUEST_METHOD) = POST);/* 判断请求方式 */define(IN_ECM, true);/* 定义PHP_SELF常量 */define(PHP_SELF, htmlen

2、tities(isset($_SERVERPHP_SELF) ? $_SERVERPHP_SELF : $_SERVERSCRIPT_NAME);/* 当前ECMall程序版本 */define(VERSION, 2.0 final);/* 当前ECMall程序Release */define(RELEASE, 20090821);/*-以下是PHP在不同版本,不同服务器上的兼容处理-*/* 在部分IIS上会没有REQUEST_URI变量 */$query_string = isset($_SERVERargv0) ? $_SERVERargv0 : $_SERVERQUERY_STRING;

3、if (!isset($_SERVERREQUEST_URI) $_SERVERREQUEST_URI = PHP_SELF . ? . $query_string;else if (strpos($_SERVERREQUEST_URI, ?) = false & $query_string) $_SERVERREQUEST_URI .= ? . $query_string; function view($mess) if(is_array($mess)=true) $mess = highlight_string( default, /默认执行文件, default_act = index,

4、 /默认执行方法 app_root = ROOT_PATH . /app, /默认执行文件的路径 external_libs = array( /通用引入文件 ROOT_PATH . /includes/global.lib.php, ROOT_PATH . /includes/libraries/time.lib.php, ROOT_PATH . /includes/ecapp.base.php, ROOT_PATH . /includes/plugin.base.php, ROOT_PATH . /app/frontend.base.php, ROOT_PATH . /includes/s

5、ubdomain.inc.php, ), ); */ /* 加载初始化文件 */ require(ROOT_PATH . /eccore/controller/app.base.php); /基础控制器类 require(ROOT_PATH . /eccore/model/model.base.php); /模型基础类 /每次都有一堆的文件引入. if (!empty($configexternal_libs) foreach ($configexternal_libs as $lib) require($lib); /* 数据过滤 */ if (!get_magic_quotes_gpc()

6、 $_GET = addslashes_deep($_GET); $_POST = addslashes_deep($_POST); $_COOKIE= addslashes_deep($_COOKIE); /* 请求转发 作用不大, 可直接写死*/ $default_app = $configdefault_app ? $configdefault_app : default; $default_act = $configdefault_act ? $configdefault_act : index; / 处理GET,抓取app及act参数. / http:/127.0.0.1/ecmal

7、l/index.php?app=message&act=inbox 很容易看得出来. $app = isset($_REQUESTapp) ? trim($_REQUESTapp) : $default_app; $act = isset($_REQUESTact) ? trim($_REQUESTact) : $default_act; /根据app参数来引入相应的文件. $configapp_root变量是路径. $app_file = $configapp_root . /$app.app.php; /文件判断 if (!is_file($app_file) exit(Missing c

8、ontroller); / 引入文件. require($app_file); /定义两个常量, 估计日后常用. define(APP, $app); define(ACT, $act); / ucfirst,假设第一个字为小写,即转大写. / 也是组合成相应的类名, class MessageApp extends MemberbaseApp 可以看得出来. $app_class_name = ucfirst($app) . App; /* 实例化控制器 */ $app = new $app_class_name(); / c()函数即将当前的实例引用给$GLOBALSECMALL_APP

9、c($app); /执行$act方法 $app-do_action($act); /转发至对应的Action /空白方法,未添加功能. $app-destruct(); /* 所有类的基础类* author Garbin* usage none*/class Object var $_errors = array(); var $_errnum = 0; function _construct() $this-Object(); function Object() #TODO /* * 触发错误 * * author Garbin * param string $errmsg * return

10、 void */ function _error($msg, $obj = ) if(is_array($msg) $this-_errors = array_merge($this-_errors, $msg); $this-_errnum += count($msg); else $this-_errors = compact(msg, obj); $this-_errnum+; /* * 检查是否存在错误 * * author Garbin * return int */ function has_error() return $this-_errnum; /* * 获取错误列表 * *

11、 author Garbin * return array */ function get_error() return $this-_errors; /* 语言项管理* author Garbin* param none* return void*/class Lang /* * 获取指定键的语言项 * * author Garbin * param none * return mixed */ function &get($key = ) $vkey = $key ? strtokey($key, $GLOBALS_ECLANG_) : $GLOBALS_ECLANG_; $tmp = e

12、val(if(isset( . $vkey . )return . $vkey . ;else return $key; ); return $tmp; /* * 加载指定的语言项至全局语言数据中 * * author Garbin * param none * return void */ function load($lang_file) static $loaded = array(); $old_lang = $new_lang = array(); $file_md5 = md5($lang_file); if (!isset($loaded$file_md5) $new_lang

13、= Lang:fetch($lang_file); $loaded$file_md5 = $lang_file; else return; $old_lang =& $GLOBALS_ECLANG_; if (is_array($old_lang) $new_lang = array_merge($old_lang, $new_lang); $GLOBALS_ECLANG_ = $new_lang; /* * 获取一个语言文件的内容 * * author Garbin * param string $lang_file * return array */ function fetch($lan

14、g_file) return include($lang_file); function lang_file($file) return ROOT_PATH . /languages/ . LANG . / . $file . .lang.php;/* 配置管理器* author Garbin* usage none*/class Conf /* * 加载配置项 * * author Garbin * param mixed $conf * return bool */ function load($conf) $old_conf = isset($GLOBALSECMALL_CONFIG)

15、? $GLOBALSECMALL_CONFIG : array(); if (is_string($conf) $conf = include($conf); if (is_array($old_conf) $GLOBALSECMALL_CONFIG = array_merge($old_conf, $conf); else $GLOBALSECMALL_CONFIG = $conf; /* * 获取配置项 * * author Garbin * param string $k * return mixed */ function get($key = ) $vkey = $key ? str

16、tokey($key, $GLOBALSECMALL_CONFIG) : $GLOBALSECMALL_CONFIG; return eval(if(isset( . $vkey . )return . $vkey . ;else return null; ); /* 获取视图链接* author Garbin* param string $engine* return object*/function &v($is_new = false, $engine = default) include_once(ROOT_PATH . /eccore/view/template.php); if (

17、$is_new) return new ecsTemplate(); else static $v = null; if ($v = null) switch ($engine) case default: $v = new ecsTemplate(); break; return $v; /* 获取一个模型* author Garbin* param string $model_name* param array $params* param book $is_new* return object*/function &m($model_name, $params = array(), $i

18、s_new = false) static $models = array(); $model_hash = md5($model_name . var_export($params, true); if ($is_new | !isset($models$model_hash) $model_file = ROOT_PATH . /includes/models/ . $model_name . .model.php; if (!is_file($model_file) /* 不存在该文件,则无法获取模型 */ return false; include_once($model_file);

19、 $model_name = ucfirst($model_name) . Model; if ($is_new) return new $model_name($params, db(); $models$model_hash = new $model_name($params, db(); return $models$model_hash;/* 获取一个业务模型* param string $model_name* param array $params* param bool $is_new* return object*/function &bm($model_name, $para

20、ms = array(), $is_new = false) static $models = array(); $model_hash = md5($model_name . var_export($params, true); if ($is_new | !isset($models$model_hash) $model_file = ROOT_PATH . /includes/models/ . $model_name . .model.php; if (!is_file($model_file) /* 不存在该文件,则无法获取模型 */ return false; include_on

21、ce($model_file); $model_name = ucfirst($model_name) . BModel; if ($is_new) return new $model_name($params, db(); $models$model_hash = new $model_name($params, db(); return $models$model_hash;/* 获取当前控制器实例* author Garbin* return void*/function c(&$app) $GLOBALSECMALL_APP =& $app;/* 获取当前控制器* author Gar

22、bin* return Object*/function &cc() return $GLOBALSECMALL_APP;/* 导入一个类* author Garbin* return void*/function import() $c = func_get_args(); if (empty($c) return; array_walk($c, create_function($item, $key, include_once(ROOT_PATH . /includes/libraries/ . $item . .php););/* 将default.abc类的字符串转为$defaulta

23、bc* author Garbin* param string $str* return string*/function strtokey($str, $owner = ) if (!$str) return ; if ($owner) return $owner . . str_replace(., , $str) . ; else $parts = explode(., $str); $owner = $ . $parts0; unset($parts0); return strtokey(implode(., $parts), $owner); /* 跟踪调试* author Garb

24、in* param mixed $var* return void*/function trace($var) static $i = 0; echo $i, ., var_dump($var), ; $i+;/* rdump的别名* author Garbin* param any* return void*/function dump($arr) $args = func_get_args(); call_user_func_array(rdump, $args);/* 格式化显示出变量* author Garbin* param any* return void*/function rd

25、ump($arr) echo ; array_walk(func_get_args(), create_function(&$item, $key, print_r($item);); echo ; exit();/* 格式化并显示出变量类型* author Garbin* param any* return void*/function vdump($arr) echo ; array_walk(func_get_args(), create_function(&$item, $key, var_dump($item);); echo ; exit();/* 创建MySQL数据库对象实例*

26、author wj* return object*/function &db() include_once(ROOT_PATH . /eccore/model/mysql.php); static $db = null; if ($db = null) $cfg = parse_url(DB_CONFIG); if ($cfgscheme = mysql) if (empty($cfgpass) $cfgpass = ; else $cfgpass = urldecode($cfgpass); $cfg user = urldecode($cfguser); if (empty($cfgpat

27、h) trigger_error(Invalid database name., E_USER_ERROR); else $cfgpath = str_replace(/, , $cfgpath); $charset = (CHARSET = utf-8) ? utf8 : CHARSET; $db = new cls_mysql(); $db-cache_dir = ROOT_PATH. /temp/query_caches/; $db-connect($cfghost. : .$cfgport, $cfguser, $cfgpass, $cfgpath, $charset); else t

28、rigger_error(Unkown database type., E_USER_ERROR); return $db;/* 获得当前的域名* return string*/function get_domain() /* 协议 */ $protocol = (isset($_SERVERHTTPS) & (strtolower($_SERVERHTTPS) != off) ? https:/ : http:/; /* 域名或IP地址 */ if (isset($_SERVERHTTP_X_FORWARDED_HOST) $host = $_SERVERHTTP_X_FORWARDED_H

29、OST; elseif (isset($_SERVERHTTP_HOST) $host = $_SERVERHTTP_HOST; else /* 端口 */ if (isset($_SERVERSERVER_PORT) $port = : . $_SERVERSERVER_PORT; if (:80 = $port & http:/ = $protocol) | (:443 = $port & https:/ = $protocol) $port = ; else $port = ; if (isset($_SERVERSERVER_NAME) $host = $_SERVERSERVER_N

30、AME . $port; elseif (isset($_SERVERSERVER_ADDR) $host = $_SERVERSERVER_ADDR . $port; return $protocol . $host;/* 获得网站的URL地址* return string*/function site_url() return get_domain() . substr(PHP_SELF, 0, strrpos(PHP_SELF, /);/* 截取UTF-8编码下字符串的函数* param string $str 被截取的字符串* param int $length 截取的长度* param bool $append 是否附加省略号* return string*/function sub_str($string, $length = 0, $append = true) if(strlen($string) = $length) return $string; $string = str_replace(array(&, , <, >), array(&, , ), $string); $strcut = ; if(strtolo

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 初中其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服