123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- <?php
- 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) {
-
- $_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__')) {
-
- if( strtoupper(APP_NAME) == strtoupper(basename(dirname(_PHP_FILE_))) ) {
- $_root = dirname(dirname(_PHP_FILE_));
- }else {
- $_root = dirname(_PHP_FILE_);
- }
- define('__ROOT__', (($_root=='/' || $_root=='\\')?'':$_root));
- }
-
- define('URL_COMMON', 0);
- define('URL_PATHINFO', 1);
- define('URL_REWRITE', 2);
- 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/');
- 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);
- }
- }
- 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?>");
-
- if(!is_file(LIB_PATH.'Action/IndexAction.class.php'))
- build_first_action();
- }else{
- header('Content-Type:text/html; charset=utf-8');
- exit('项目目录不可写,目录无法自动生成!<BR>请使用项目生成器或者手动生成项目目录~');
- }
- }
- 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();
|