-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
580 changed files
with
101,976 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,242 @@ | ||
<?php | ||
// +---------------------------------------------------------------------- | ||
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ] | ||
// +---------------------------------------------------------------------- | ||
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved. | ||
// +---------------------------------------------------------------------- | ||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) | ||
// +---------------------------------------------------------------------- | ||
// | Author: liu21st <[email protected]> | ||
// +---------------------------------------------------------------------- | ||
|
||
/** | ||
* ThinkPHP 运行时文件 编译后不再加载 | ||
* @category Think | ||
* @package Common | ||
* @author liu21st <[email protected]> | ||
*/ | ||
defined('THINK_PATH') or exit(); | ||
if(version_compare(PHP_VERSION,'5.2.0','<')) die('require PHP > 5.2.0 !'); | ||
|
||
// 版本信息 | ||
define('THINK_VERSION', '3.1.3'); | ||
|
||
// 系统信息 | ||
if(version_compare(PHP_VERSION,'5.4.0','<')) { | ||
ini_set('magic_quotes_runtime',0); | ||
define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()?True:False); | ||
}else{ | ||
define('MAGIC_QUOTES_GPC',false); | ||
} | ||
define('IS_CGI',substr(PHP_SAPI, 0,3)=='cgi' ? 1 : 0 ); | ||
define('IS_WIN',strstr(PHP_OS, 'WIN') ? 1 : 0 ); | ||
define('IS_CLI',PHP_SAPI=='cli'? 1 : 0); | ||
|
||
// 项目名称 | ||
defined('APP_NAME') or define('APP_NAME', basename(dirname($_SERVER['SCRIPT_FILENAME']))); | ||
|
||
if(!IS_CLI) { | ||
// 当前文件名 | ||
if(!defined('_PHP_FILE_')) { | ||
if(IS_CGI) { | ||
//CGI/FASTCGI模式下 | ||
$_temp = explode('.php',$_SERVER['PHP_SELF']); | ||
define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/')); | ||
}else { | ||
define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'],'/')); | ||
} | ||
} | ||
if(!defined('__ROOT__')) { | ||
// 网站URL根目录 | ||
if( strtoupper(APP_NAME) == strtoupper(basename(dirname(_PHP_FILE_))) ) { | ||
$_root = dirname(dirname(_PHP_FILE_)); | ||
}else { | ||
$_root = dirname(_PHP_FILE_); | ||
} | ||
define('__ROOT__', (($_root=='/' || $_root=='\\')?'':$_root)); | ||
} | ||
|
||
//支持的URL模式 | ||
define('URL_COMMON', 0); //普通模式 | ||
define('URL_PATHINFO', 1); //PATHINFO模式 | ||
define('URL_REWRITE', 2); //REWRITE模式 | ||
define('URL_COMPAT', 3); // 兼容模式 | ||
} | ||
|
||
// 路径设置 可在入口文件中重新定义 所有路径常量都必须以/ 结尾 | ||
defined('CORE_PATH') or define('CORE_PATH', THINK_PATH.'Lib/'); // 系统核心类库目录 | ||
defined('EXTEND_PATH') or define('EXTEND_PATH', THINK_PATH.'Extend/'); // 系统扩展目录 | ||
defined('MODE_PATH') or define('MODE_PATH', EXTEND_PATH.'Mode/'); // 模式扩展目录 | ||
defined('ENGINE_PATH') or define('ENGINE_PATH', EXTEND_PATH.'Engine/'); // 引擎扩展目录 | ||
defined('VENDOR_PATH') or define('VENDOR_PATH', EXTEND_PATH.'Vendor/'); // 第三方类库目录 | ||
defined('LIBRARY_PATH') or define('LIBRARY_PATH', EXTEND_PATH.'Library/'); // 扩展类库目录 | ||
defined('COMMON_PATH') or define('COMMON_PATH', APP_PATH.'Common/'); // 项目公共目录 | ||
defined('LIB_PATH') or define('LIB_PATH', APP_PATH.'Lib/'); // 项目类库目录 | ||
defined('CONF_PATH') or define('CONF_PATH', APP_PATH.'Conf/'); // 项目配置目录 | ||
defined('LANG_PATH') or define('LANG_PATH', APP_PATH.'Lang/'); // 项目语言包目录 | ||
defined('TMPL_PATH') or define('TMPL_PATH', APP_PATH.'Tpl/'); // 项目模板目录 | ||
defined('HTML_PATH') or define('HTML_PATH', APP_PATH.'Html/'); // 项目静态目录 | ||
defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH.'Logs/'); // 项目日志目录 | ||
defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH.'Temp/'); // 项目缓存目录 | ||
defined('DATA_PATH') or define('DATA_PATH', RUNTIME_PATH.'Data/'); // 项目数据目录 | ||
defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH.'Cache/'); // 项目模板缓存目录 | ||
|
||
// 为了方便导入第三方类库 设置Vendor目录到include_path | ||
set_include_path(get_include_path() . PATH_SEPARATOR . VENDOR_PATH); | ||
|
||
// 加载运行时所需要的文件 并负责自动目录生成 | ||
function load_runtime_file() { | ||
// 加载系统基础函数库 | ||
require THINK_PATH.'Common/common.php'; | ||
// 读取核心文件列表 | ||
$list = array( | ||
CORE_PATH.'Core/Think.class.php', | ||
CORE_PATH.'Core/ThinkException.class.php', // 异常处理类 | ||
CORE_PATH.'Core/Behavior.class.php', | ||
); | ||
// 加载模式文件列表 | ||
foreach ($list as $key=>$file){ | ||
if(is_file($file)) require_cache($file); | ||
} | ||
// 加载系统类库别名定义 | ||
alias_import(include THINK_PATH.'Conf/alias.php'); | ||
|
||
// 检查项目目录结构 如果不存在则自动创建 | ||
if(!is_dir(LIB_PATH)) { | ||
// 创建项目目录结构 | ||
build_app_dir(); | ||
}elseif(!is_dir(CACHE_PATH)){ | ||
// 检查缓存目录 | ||
check_runtime(); | ||
}elseif(APP_DEBUG){ | ||
// 调试模式切换删除编译缓存 | ||
if(is_file(RUNTIME_FILE)) unlink(RUNTIME_FILE); | ||
} | ||
} | ||
|
||
// 检查缓存目录(Runtime) 如果不存在则自动创建 | ||
function check_runtime() { | ||
if(!is_dir(RUNTIME_PATH)) { | ||
mkdir(RUNTIME_PATH); | ||
}elseif(!is_writeable(RUNTIME_PATH)) { | ||
header('Content-Type:text/html; charset=utf-8'); | ||
exit('目录 [ '.RUNTIME_PATH.' ] 不可写!'); | ||
} | ||
mkdir(CACHE_PATH); // 模板缓存目录 | ||
if(!is_dir(LOG_PATH)) mkdir(LOG_PATH); // 日志目录 | ||
if(!is_dir(TEMP_PATH)) mkdir(TEMP_PATH); // 数据缓存目录 | ||
if(!is_dir(DATA_PATH)) mkdir(DATA_PATH); // 数据文件目录 | ||
return true; | ||
} | ||
|
||
// 创建编译缓存 | ||
function build_runtime_cache($append='') { | ||
// 生成编译文件 | ||
$defs = get_defined_constants(TRUE); | ||
$content = '$GLOBALS[\'_beginTime\'] = microtime(TRUE);'; | ||
if(defined('RUNTIME_DEF_FILE')) { // 编译后的常量文件外部引入 | ||
file_put_contents(RUNTIME_DEF_FILE,'<?php '.array_define($defs['user'])); | ||
$content .= 'require \''.RUNTIME_DEF_FILE.'\';'; | ||
}else{ | ||
$content .= array_define($defs['user']); | ||
} | ||
$content .= 'set_include_path(get_include_path() . PATH_SEPARATOR . VENDOR_PATH);'; | ||
// 读取核心编译文件列表 | ||
$list = array( | ||
THINK_PATH.'Common/common.php', | ||
CORE_PATH.'Core/Think.class.php', | ||
CORE_PATH.'Core/ThinkException.class.php', | ||
CORE_PATH.'Core/Behavior.class.php', | ||
); | ||
foreach ($list as $file){ | ||
$content .= compile($file); | ||
} | ||
// 系统行为扩展文件统一编译 | ||
$content .= build_tags_cache(); | ||
|
||
$alias = include THINK_PATH.'Conf/alias.php'; | ||
$content .= 'alias_import('.var_export($alias,true).');'; | ||
// 编译框架默认语言包和配置参数 | ||
$content .= $append."\nL(".var_export(L(),true).");C(".var_export(C(),true).');G(\'loadTime\');Think::Start();'; | ||
file_put_contents(RUNTIME_FILE,strip_whitespace('<?php '.str_replace("defined('THINK_PATH') or exit();",' ',$content))); | ||
} | ||
|
||
// 编译系统行为扩展类库 | ||
function build_tags_cache() { | ||
$tags = C('extends'); | ||
$content = ''; | ||
foreach ($tags as $tag=>$item){ | ||
foreach ($item as $key=>$name) { | ||
$content .= is_int($key)?compile(CORE_PATH.'Behavior/'.$name.'Behavior.class.php'):compile($name); | ||
} | ||
} | ||
return $content; | ||
} | ||
|
||
// 创建项目目录结构 | ||
function build_app_dir() { | ||
// 没有创建项目目录的话自动创建 | ||
if(!is_dir(APP_PATH)) mkdir(APP_PATH,0755,true); | ||
if(is_writeable(APP_PATH)) { | ||
$dirs = array( | ||
LIB_PATH, | ||
RUNTIME_PATH, | ||
CONF_PATH, | ||
COMMON_PATH, | ||
LANG_PATH, | ||
CACHE_PATH, | ||
TMPL_PATH, | ||
TMPL_PATH.C('DEFAULT_THEME').'/', | ||
LOG_PATH, | ||
TEMP_PATH, | ||
DATA_PATH, | ||
LIB_PATH.'Model/', | ||
LIB_PATH.'Action/', | ||
LIB_PATH.'Behavior/', | ||
LIB_PATH.'Widget/', | ||
); | ||
foreach ($dirs as $dir){ | ||
if(!is_dir($dir)) mkdir($dir,0755,true); | ||
} | ||
// 写入目录安全文件 | ||
build_dir_secure($dirs); | ||
// 写入初始配置文件 | ||
if(!is_file(CONF_PATH.'config.php')) | ||
file_put_contents(CONF_PATH.'config.php',"<?php\nreturn array(\n\t//'配置项'=>'配置值'\n);\n?>"); | ||
// 写入测试Action | ||
if(!is_file(LIB_PATH.'Action/IndexAction.class.php')) | ||
build_first_action(); | ||
}else{ | ||
header('Content-Type:text/html; charset=utf-8'); | ||
exit('项目目录不可写,目录无法自动生成!<BR>请使用项目生成器或者手动生成项目目录~'); | ||
} | ||
} | ||
|
||
// 创建测试Action | ||
function build_first_action() { | ||
$content = file_get_contents(THINK_PATH.'Tpl/default_index.tpl'); | ||
file_put_contents(LIB_PATH.'Action/IndexAction.class.php',$content); | ||
} | ||
|
||
// 生成目录安全文件 | ||
function build_dir_secure($dirs=array()) { | ||
// 目录安全写入 | ||
if(defined('BUILD_DIR_SECURE') && BUILD_DIR_SECURE) { | ||
defined('DIR_SECURE_FILENAME') or define('DIR_SECURE_FILENAME', 'index.html'); | ||
defined('DIR_SECURE_CONTENT') or define('DIR_SECURE_CONTENT', ' '); | ||
// 自动写入目录安全文件 | ||
$content = DIR_SECURE_CONTENT; | ||
$files = explode(',', DIR_SECURE_FILENAME); | ||
foreach ($files as $filename){ | ||
foreach ($dirs as $dir) | ||
file_put_contents($dir.$filename,$content); | ||
} | ||
} | ||
} | ||
|
||
// 加载运行时所需文件 | ||
load_runtime_file(); | ||
// 记录加载文件时间 | ||
G('loadTime'); | ||
// 执行入口 | ||
Think::Start(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<?php | ||
// +---------------------------------------------------------------------- | ||
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ] | ||
// +---------------------------------------------------------------------- | ||
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved. | ||
// +---------------------------------------------------------------------- | ||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) | ||
// +---------------------------------------------------------------------- | ||
// | Author: liu21st <[email protected]> | ||
// +---------------------------------------------------------------------- | ||
|
||
defined('THINK_PATH') or exit(); | ||
// 系统别名定义文件 | ||
return array( | ||
'Model' => CORE_PATH.'Core/Model.class.php', | ||
'Db' => CORE_PATH.'Core/Db.class.php', | ||
'Log' => CORE_PATH.'Core/Log.class.php', | ||
'ThinkTemplate' => CORE_PATH.'Template/ThinkTemplate.class.php', | ||
'TagLib' => CORE_PATH.'Template/TagLib.class.php', | ||
'Cache' => CORE_PATH.'Core/Cache.class.php', | ||
'Widget' => CORE_PATH.'Core/Widget.class.php', | ||
'TagLibCx' => CORE_PATH.'Driver/TagLib/TagLibCx.class.php', | ||
); |
Oops, something went wrong.