项目核心文件

core/shopld.php

 if (!@include(BASE_DATA_PATH.'/config/config.ini.php')) exit('config.ini.php isn\'t exists!');
if (file_exists(BASE_PATH.'/config/config.ini.php')){
include(BASE_PATH.'/config/config.ini.php');
}
global $config; //默认平台店铺id
define('DEFAULT_PLATFORM_STORE_ID', $config['default_store_id']); define('URL_MODEL',$config['url_model']);
define(SUBDOMAIN_SUFFIX, $config['subdomain_suffix']); define('SHOP_SITE_URL', $config['shop_site_url']);
define('CMS_SITE_URL', $config['cms_site_url']);
define('CIRCLE_SITE_URL', $config['circle_site_url']);
define('MICROSHOP_SITE_URL', $config['microshop_site_url']);
define('ADMIN_SITE_URL', $config['admin_site_url']);
define('MOBILE_SITE_URL', $config['mobile_site_url']);
define('WAP_SITE_URL', $config['wap_site_url']);
define('UPLOAD_SITE_URL',$config['upload_site_url']);
define('RESOURCE_SITE_URL',$config['resource_site_url']); define('BASE_DATA_PATH',BASE_ROOT_PATH.'/data');
define('BASE_UPLOAD_PATH',BASE_DATA_PATH.'/upload');
define('BASE_RESOURCE_PATH',BASE_DATA_PATH.'/resource'); define('CHARSET',$config['db'][1]['dbcharset']);
define('DBDRIVER',$config['dbdriver']);
define('SESSION_EXPIRE',$config['session_expire']);
define('LANG_TYPE',$config['lang_type']);
define('COOKIE_PRE',$config['cookie_pre']);
define('DBPRE',($config['db'][1]['dbname']).'`.`'.($config['tablepre'])); $_GET['act'] = $_GET['act'] ? strtolower($_GET['act']) : ($_POST['act'] ? strtolower($_POST['act']) : null);
$_GET['op'] = $_GET['op'] ? strtolower($_GET['op']) : ($_POST['op'] ? strtolower($_POST['op']) : null); if (empty($_GET['act'])){
require_once(BASE_CORE_PATH.'/framework/core/route.php');
new Route($config);
}
//统一ACTION
$_GET['act'] = preg_match('/^[\w]+$/i',$_GET['act']) ? $_GET['act'] : 'index';
$_GET['op'] = preg_match('/^[\w]+$/i',$_GET['op']) ? $_GET['op'] : 'index'; //对GET POST接收内容进行过滤,$ignore内的下标不被过滤
$ignore = array('article_content','pgoods_body','doc_content','content','sn_content','g_body','store_description','p_content','groupbuy_intro','remind_content','note_content','ref_url','adv_pic_url','adv_word_url','adv_slide_url','appcode','mail_content');
if (!class_exists('Security')) require(BASE_CORE_PATH.'/framework/libraries/security.php');
$_GET = !empty($_GET) ? Security::getAddslashesForInput($_GET,$ignore) : array();
$_POST = !empty($_POST) ? Security::getAddslashesForInput($_POST,$ignore) : array();
$_REQUEST = !empty($_REQUEST) ? Security::getAddslashesForInput($_REQUEST,$ignore) : array();
$_SERVER = !empty($_SERVER) ? Security::getAddSlashes($_SERVER) : array(); //启用ZIP压缩
if ($config['gzip'] == 1 && function_exists('ob_gzhandler') && $_GET['inajax'] != 1){
ob_start('ob_gzhandler');
}else {
ob_start();
} require_once(BASE_CORE_PATH.'/framework/function/core.php');
require_once(BASE_CORE_PATH.'/framework/core/base.php'); require_once(BASE_CORE_PATH.'/framework/function/goods.php'); if(function_exists('spl_autoload_register')) {
spl_autoload_register(array('Base', 'autoload'));
} else {
function __autoload($class) {
return Base::autoload($class);
}
}

路由解析文件位于core/framework/core/route.php 主要控制路由功能和伪静态功能

  

 <?php
/**
* 路由
*
* @copyright Copyright (c) 2014-2015 shopld Inc.
* @license
* @link
* @since File available since Release v1.0
*/
defined('InSC') or exit('Access Invalid!'); class Route { /**
* PATH_INFO 分隔符
*
* @var string
*/
private $_pathinfo_split = '-'; /**
* 系统配置信息
*
* @var array
*/ private $_config = array(); /**
* PATH_INFO内容分隔正则
*
* @var string
*/
private $_pathinfo_pattern = ''; /**
* 伪静态文件扩展名
*
* @var string
*/
private $_rewrite_extname = '.html'; /**
* 构造方法
*
*/
public function __construct($config = array()) {
$this->_config = $config;
$this->_pathinfo_pattern = "/{$this->_pathinfo_split}/";
$this->parseRule();
} /**
* 路由解析
*
*/
public function parseRule() {
if ($this->_config['url_model']) {
$this->_parseRuleRewrite();
} else {
$this->_parseRuleNormal();
}
} /**
* 默认URL模式
*
*/
private function _parseRuleNormal() {
//不进行任何处理
} /**
* 伪静态模式
*
*/
private function _parseRuleRewrite() {
       //$_SERVER['path_info']包含真实脚本名称之后,并且在查询语句之前的信息,如果当前脚本是通过 URL http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问,那么 $_SERVER['PATH_INFO'] 将包含 /some/stuff。  
       //$_SERVER['REDIRECT_REDIRECT_PATH_INFO']     
$path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : $_SERVER['REDIRECT_REDIRECT_PATH_INFO'];
$path_info = trim($path_info,'/'); //如果为二级目录去掉目录信息
if(strpos($path_info, '/')) {
$path_info_array = explode('/', $path_info);
$path_info = end($path_info_array);
} if (!empty($path_info) && $path_info != 'index.php' && strpos($path_info, $this->_rewrite_extname)){
//去掉伪静态扩展名
$path_info = substr($path_info,0,-strlen($this->_rewrite_extname)); //根据不同APP匹配url规则
$path_info_function = '_' . APP_ID . 'PathInfo';
$path_info = $this->$path_info_function($path_info); $split_array = preg_split($this->_pathinfo_pattern,$path_info);
//act,op强制赋值
$_GET['act'] = isset($split_array[0]) ? $split_array[0] : 'index';
$_GET['op'] = isset($split_array[1]) ? $split_array[1] : 'index';
unset($split_array[0]);
unset($split_array[1]); //其它参数也放入$_GET
while (current($split_array) !== false) {
$name = current($split_array);
$value = next($split_array);
$_GET[$name] = $value;
if (next($split_array) === false){
break;
}
}
} else {
$_GET['act'] = $_GET['op'] = 'index';
}
} /**
* 商城短网址还原成长网址
* @param unknown $path_info
* @return mixed
*/
private function _shopPathInfo($path_info) {
$reg_match_from = array(
'/^item-(\d+)$/',
'/^shop-(\d+)$/',
'/^shop_view-(\d+)-(\d+)-([0-5])-([0-2])-(\d+)$/',
'/^article-(\d+)$/',
'/^article_cate-(\d+)$/',
'/^document-([a-z_]+)$/',
'/^cate-(\d+)-([0-9_]+)-([0-9_]+)-([0-3])-([0-2])-([0-2])-(\d+)-(\d+)$/',
'/^brand-(\d+)-([0-3])-([0-2])-([0-2])-(\d+)-(\d+)$/',
'/^brand$/',
'/^groupbuy-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)$/',
'/^groupbuy_soon-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)$/',
'/^groupbuy_history-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)$/',
'/^groupbuy_detail-(\d+)$/',
'/^integral$/',
'/^integral_list$/',
'/^integral_item-(\d+)$/',
'/^voucher$/',
'/^comments-(\d+)-([0-3])-(\d+)$/',
'/^special-(\d+)$/'
);
$reg_match_to = array(
'goods-index-goods_id-\\1',
'show_store-index-store_id-\\1',
'show_store-goods_all-store_id-\\1-stc_id-\\2-key-\\3-order-\\4-curpage-\\5',
'article-show-article_id-\\1',
'article-article-ac_id-\\1',
'document-index-code-\\1',
'search-index-cate_id-\\1-b_id-\\2-a_id-\\3-key-\\4-order-\\5-type-\\6-area_id-\\7-curpage-\\8',
'brand-list-brand-\\1-key-\\2-order-\\3-type-\\4-area_id-\\5-curpage-\\6',
'brand-index',
'show_groupbuy-index-area_id-\\1-groupbuy_class-\\2-groupbuy_price-\\3-groupbuy_order_key-\\4-groupbuy_order-\\5-curpage-\\6',
'show_groupbuy-groupbuy_soon-area_id-\\1-groupbuy_class-\\2-groupbuy_price-\\3-groupbuy_order_key-\\4-groupbuy_order-\\5-curpage-\\6',
'show_groupbuy-groupbuy_history-area_id-\\1-groupbuy_class-\\2-groupbuy_price-\\3-groupbuy_order_key-\\4-groupbuy_order-\\5-curpage-\\6',
'show_groupbuy-groupbuy_detail-group_id-\\1',
'pointprod-index',
'pointprod-plist',
'pointprod-pinfo-id-\\1',
'pointvoucher-index',
'goods-comments_list-goods_id-\\1-type-\\2-curpage-\\3',
'special-special_detail-special_id-\\1'
);
return preg_replace($reg_match_from,$reg_match_to,$path_info);
} /**
* CMS短网址还原成长网址
* @param unknown $path_info
* @return mixed
*/
private function _cmsPathInfo($path_info) {
$reg_match_from = array(
'/^article-(\d+)$/',
'/^picture-(\d+)$/'
);
$reg_match_to = array(
'article-article_detail-article_id-\\1',
'picture-picture_detail-picture_id-\\1'
);
return preg_replace($reg_match_from,$reg_match_to,$path_info);
} }

最新文章

  1. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
  2. 服务器发布tomcat的WEB项目供外网访问
  3. Java 并发和多线程(一) Java并发性和多线程介绍[转]
  4. oracle 常见恢复
  5. android测试(转)
  6. PHP 把GBK编码转换为UTF8
  7. Ext基础一(转载)
  8. 获取TBitMap图像缓冲区,提高图像处理速度
  9. 研究一下FBrush,它是从TWinControl才有的属性(可能是因为需要句柄)——发现{$R *.dfm}在运行期执行,而且很有深意,读到属性后赋值还会触发事件,这些无法在VCL代码里直接看到
  10. 支付宝ios支付请求Java服务端签名报的一个错(ALI40247) 原创
  11. nodejs操作redis总结
  12. 视频流PS,PS封装H264
  13. sho
  14. Lab 1-1
  15. 详解管理root用户权限的sudo服务程序
  16. L1-035 情人节
  17. Postman 常用测试结果验证及使用技巧
  18. 【Thinkphp5】结合layer弹窗 定制操作结果页面
  19. ES6必知必会 (七)—— Generator 函数
  20. 在vue项目中正确的引入jquery和bootstrap

热门文章

  1. ==和equals方法
  2. Python web前端 08 字符串 数组 json
  3. 浅谈最近公共祖先(LCA)
  4. 关于AQS——独占锁特性+共享锁实现(二)
  5. 远程调试工具weinre使用教程
  6. mysql索引方式
  7. 3D旋转仿伪3D立体效果,手机端
  8. SpringMVC02 AbstractController And MultiActionController
  9. JsonModel&amp;AFNetWorking
  10. sql 2008 中不能创建数据库关系图