From 7dffa184ef2228e62223353276ac6cb538d33823 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 13:55:16 +0800 Subject: [PATCH 01/39] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..70e0dae54 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +Extend/* \ No newline at end of file From 219a070ad3e40de800367f36c7d8b585c086f11b Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 13:55:32 +0800 Subject: [PATCH 02/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9README=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.txt => README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README.txt => README.md (100%) diff --git a/README.txt b/README.md similarity index 100% rename from README.txt rename to README.md From ce98a3b2aace842fd03d7b32ae3067220a1b4a6f Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 14:00:04 +0800 Subject: [PATCH 03/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9Thinkphp=E7=9A=84Readme?= =?UTF-8?q?=E6=96=87=E4=BB=B6=EF=BC=8C=E6=9B=B4=E7=AC=A6=E5=90=88Markdown?= =?UTF-8?q?=E8=AF=AD=E6=B3=95=EF=BC=8C=E5=B9=B6=E6=A0=B9=E6=8D=AE=E6=84=8F?= =?UTF-8?q?=E4=B9=89=EF=BC=8C=E8=80=8C=E4=B8=8D=E6=98=AF=E7=A9=BA=E5=A4=B4?= =?UTF-8?q?=E4=BB=8B=E7=BB=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 200b27d71..56856c14c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,17 @@ -ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。 +#MinoWu Thinkphp# -[ 全面的WEB开发特性支持 ] +官网参考:http://www.thinkphp.cn +文档参考:http://doc.think.cn + +--------------------------------- + +#ThinkPHP官方介绍# + +##简介## + +ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。 + +##全面的WEB开发特性支持## 最新的ThinkPHP为WEB应用开发提供了强有力的支持,这些支持包括: MVC支持-基于模型(M)、视图(V)、控制器(C)的设计模式 @@ -14,23 +25,23 @@ MongoDb支持-提供NoSQL的支持 缓存支持-提供了包括文件、数据库、Memcache、Xcache、Redis等多种类型的缓存支持 -[ 大道至简的开发理念 ] +##大道至简的开发理念## ThinkPHP从诞生以来一直秉承大道至简的开发理念,无论从底层实现还是应用开发,我们都倡导用最少的代码完成相同的功能,正是由于对简单的执着和代码的修炼,让我们长期保持出色的性能和极速的开发体验。在主流PHP开发框架的评测数据中表现卓越,简单和快速开发是我们不变的宗旨。 -[ 安全性 ] +##安全性## 框架在系统层面提供了众多的安全特性,确保你的网站和产品安全无忧。这些特性包括: - XSS安全防护 - 表单自动验证 - 强制数据类型转换 - 输入数据过滤 - 表单令牌验证 - 防SQL注入 - 图像上传检测 +* XSS安全防护 +* 表单自动验证 +* 强制数据类型转换 +* 输入数据过滤 +* 表单令牌验证 +* 防SQL注入 +* 图像上传检测 -[ 商业友好的开源协议 ] +##商业友好的开源协议## ThinkPHP遵循Apache2开源协议发布。Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再作为开源或商业软件发布。 \ No newline at end of file From fbb040fddafd6f4605804a560a6b87360211da13 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 14:03:22 +0800 Subject: [PATCH 04/39] Fix README Bug. --- README.md | 54 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 56856c14c..f687d5e92 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,49 @@ #MinoWu Thinkphp# -官网参考:http://www.thinkphp.cn -文档参考:http://doc.think.cn +官网参考:[http://www.thinkphp.cn](http://www.thinkphp.cn) + +文档参考:[http://doc.thinkphp.cn](http://doc.thinkphp.cn) --------------------------------- -#ThinkPHP官方介绍# +##ThinkPHP官方介绍## -##简介## +###简介### ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。 -##全面的WEB开发特性支持## +###全面的WEB开发特性支持### 最新的ThinkPHP为WEB应用开发提供了强有力的支持,这些支持包括: - MVC支持-基于模型(M)、视图(V)、控制器(C)的设计模式 - ORM支持-提供了全功能和高性能的ORM支持,支持大部分数据库 - 模板引擎支持-内置了高性能的基于标签库和XML标签的编译型模板引擎 - RESTFul支持-REST模式提供了RESTFul支持,为你打造全新的URL设计和访问体验 - SAE支持-提供了新浪SAE平台的强力支持,具备“横跨性”和“平滑性”,支持本地化开发和调试以及部署切换,打造全新的SAE开发体验 - CLI支持-支持基于命令行的应用开发 - AMF支持-支持Flex开发和Flash通讯,打造互联网富应用 - PHPRPC支持-提供基于PHPRpc的WEBService解决方案 - MongoDb支持-提供NoSQL的支持 - 缓存支持-提供了包括文件、数据库、Memcache、Xcache、Redis等多种类型的缓存支持 - -##大道至简的开发理念## + +1. MVC支持-基于模型(M)、视图(V)、控制器(C)的设计模式 +2. ORM支持-提供了全功能和高性能的ORM支持,支持大部分数据库 +3. 模板引擎支持-内置了高性能的基于标签库和XML标签的编译型模板引擎 +4. RESTFul支持-REST模式提供了RESTFul支持,为你打造全新的URL设计和访问体验 +5. SAE支持-提供了新浪SAE平台的强力支持,具备“横跨性”和“平滑性”,支持本地化开发和调试以及部署切换,打造全新的SAE开发体验 +6. CLI支持-支持基于命令行的应用开发 +7. AMF支持-支持Flex开发和Flash通讯,打造互联网富应用 +8. PHPRPC支持-提供基于PHPRpc的WEBService解决方案 +9. MongoDb支持-提供NoSQL的支持 +10. 缓存支持-提供了包括文件、数据库、Memcache、Xcache、Redis等多种类型的缓存支持 + +###大道至简的开发理念### ThinkPHP从诞生以来一直秉承大道至简的开发理念,无论从底层实现还是应用开发,我们都倡导用最少的代码完成相同的功能,正是由于对简单的执着和代码的修炼,让我们长期保持出色的性能和极速的开发体验。在主流PHP开发框架的评测数据中表现卓越,简单和快速开发是我们不变的宗旨。 -##安全性## +###安全性### 框架在系统层面提供了众多的安全特性,确保你的网站和产品安全无忧。这些特性包括: -* XSS安全防护 -* 表单自动验证 -* 强制数据类型转换 -* 输入数据过滤 -* 表单令牌验证 -* 防SQL注入 -* 图像上传检测 +1. XSS安全防护 +2. 表单自动验证 +3. 强制数据类型转换 +4. 输入数据过滤 +5. 表单令牌验证 +6. 防SQL注入 +7. 图像上传检测 -##商业友好的开源协议## +###商业友好的开源协议### ThinkPHP遵循Apache2开源协议发布。Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再作为开源或商业软件发布。 \ No newline at end of file From 94867d573ea6231bdcb9fbc6fddf7aa3345a10dd Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 14:08:22 +0800 Subject: [PATCH 05/39] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=EF=BC=8C=E5=B0=86=E4=B8=BB=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=A7=BB=E5=88=B0=E6=A0=B9=E7=9B=AE=E5=BD=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {ThinkPHP/Common => Common}/common.php | 0 {ThinkPHP/Common => Common}/functions.php | 0 {ThinkPHP/Common => Common}/runtime.php | 0 {ThinkPHP/Conf => Conf}/alias.php | 0 {ThinkPHP/Conf => Conf}/convention.php | 0 {ThinkPHP/Conf => Conf}/debug.php | 0 {ThinkPHP/Conf => Conf}/tags.php | 0 ThinkPHP/LICENSE.txt => LICENSE.txt | 0 {ThinkPHP/Lang => Lang}/en-us.php | 0 {ThinkPHP/Lang => Lang}/zh-cn.php | 0 .../Behavior/CheckRouteBehavior.class.php | 0 .../Behavior/ContentReplaceBehavior.class.php | 0 .../LocationTemplateBehavior.class.php | 0 .../Behavior/ParseTemplateBehavior.class.php | 0 .../Behavior/ReadHtmlCacheBehavior.class.php | 0 .../Behavior/ShowPageTraceBehavior.class.php | 0 .../Behavior/ShowRuntimeBehavior.class.php | 0 .../Behavior/TokenBuildBehavior.class.php | 0 .../Behavior/WriteHtmlCacheBehavior.class.php | 0 {ThinkPHP/Lib => Lib}/Core/Action.class.php | 0 {ThinkPHP/Lib => Lib}/Core/App.class.php | 0 {ThinkPHP/Lib => Lib}/Core/Behavior.class.php | 0 {ThinkPHP/Lib => Lib}/Core/Cache.class.php | 0 {ThinkPHP/Lib => Lib}/Core/Db.class.php | 0 .../Lib => Lib}/Core/Dispatcher.class.php | 0 {ThinkPHP/Lib => Lib}/Core/Log.class.php | 0 {ThinkPHP/Lib => Lib}/Core/Model.class.php | 0 {ThinkPHP/Lib => Lib}/Core/Think.class.php | 0 .../Lib => Lib}/Core/ThinkException.class.php | 0 {ThinkPHP/Lib => Lib}/Core/View.class.php | 0 {ThinkPHP/Lib => Lib}/Core/Widget.class.php | 0 .../Driver/Cache/CacheFile.class.php | 0 .../Lib => Lib}/Driver/Db/DbMysql.class.php | 0 .../Lib => Lib}/Driver/Db/DbMysqli.class.php | 0 .../Driver/TagLib/TagLibCx.class.php | 0 .../Lib => Lib}/Template/TagLib.class.php | 0 .../Template/ThinkTemplate.class.php | 0 ThinkPHP/ThinkPHP.php => ThinkPHP.php | 0 ThinkPHP/Extend/README.txt | 24 ---- ThinkPHP/README.txt | 127 ------------------ ThinkPHP/logo.png | Bin 7396 -> 0 bytes {ThinkPHP/Tpl => Tpl}/default_index.tpl | 0 {ThinkPHP/Tpl => Tpl}/dispatch_jump.tpl | 0 {ThinkPHP/Tpl => Tpl}/page_trace.tpl | 0 {ThinkPHP/Tpl => Tpl}/think_exception.tpl | 0 45 files changed, 151 deletions(-) rename {ThinkPHP/Common => Common}/common.php (100%) rename {ThinkPHP/Common => Common}/functions.php (100%) rename {ThinkPHP/Common => Common}/runtime.php (100%) rename {ThinkPHP/Conf => Conf}/alias.php (100%) rename {ThinkPHP/Conf => Conf}/convention.php (100%) rename {ThinkPHP/Conf => Conf}/debug.php (100%) rename {ThinkPHP/Conf => Conf}/tags.php (100%) rename ThinkPHP/LICENSE.txt => LICENSE.txt (100%) rename {ThinkPHP/Lang => Lang}/en-us.php (100%) rename {ThinkPHP/Lang => Lang}/zh-cn.php (100%) rename {ThinkPHP/Lib => Lib}/Behavior/CheckRouteBehavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Behavior/ContentReplaceBehavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Behavior/LocationTemplateBehavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Behavior/ParseTemplateBehavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Behavior/ReadHtmlCacheBehavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Behavior/ShowPageTraceBehavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Behavior/ShowRuntimeBehavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Behavior/TokenBuildBehavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Behavior/WriteHtmlCacheBehavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/Action.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/App.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/Behavior.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/Cache.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/Db.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/Dispatcher.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/Log.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/Model.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/Think.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/ThinkException.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/View.class.php (100%) rename {ThinkPHP/Lib => Lib}/Core/Widget.class.php (100%) rename {ThinkPHP/Lib => Lib}/Driver/Cache/CacheFile.class.php (100%) rename {ThinkPHP/Lib => Lib}/Driver/Db/DbMysql.class.php (100%) rename {ThinkPHP/Lib => Lib}/Driver/Db/DbMysqli.class.php (100%) rename {ThinkPHP/Lib => Lib}/Driver/TagLib/TagLibCx.class.php (100%) rename {ThinkPHP/Lib => Lib}/Template/TagLib.class.php (100%) rename {ThinkPHP/Lib => Lib}/Template/ThinkTemplate.class.php (100%) rename ThinkPHP/ThinkPHP.php => ThinkPHP.php (100%) delete mode 100644 ThinkPHP/Extend/README.txt delete mode 100644 ThinkPHP/README.txt delete mode 100644 ThinkPHP/logo.png rename {ThinkPHP/Tpl => Tpl}/default_index.tpl (100%) rename {ThinkPHP/Tpl => Tpl}/dispatch_jump.tpl (100%) rename {ThinkPHP/Tpl => Tpl}/page_trace.tpl (100%) rename {ThinkPHP/Tpl => Tpl}/think_exception.tpl (100%) diff --git a/ThinkPHP/Common/common.php b/Common/common.php similarity index 100% rename from ThinkPHP/Common/common.php rename to Common/common.php diff --git a/ThinkPHP/Common/functions.php b/Common/functions.php similarity index 100% rename from ThinkPHP/Common/functions.php rename to Common/functions.php diff --git a/ThinkPHP/Common/runtime.php b/Common/runtime.php similarity index 100% rename from ThinkPHP/Common/runtime.php rename to Common/runtime.php diff --git a/ThinkPHP/Conf/alias.php b/Conf/alias.php similarity index 100% rename from ThinkPHP/Conf/alias.php rename to Conf/alias.php diff --git a/ThinkPHP/Conf/convention.php b/Conf/convention.php similarity index 100% rename from ThinkPHP/Conf/convention.php rename to Conf/convention.php diff --git a/ThinkPHP/Conf/debug.php b/Conf/debug.php similarity index 100% rename from ThinkPHP/Conf/debug.php rename to Conf/debug.php diff --git a/ThinkPHP/Conf/tags.php b/Conf/tags.php similarity index 100% rename from ThinkPHP/Conf/tags.php rename to Conf/tags.php diff --git a/ThinkPHP/LICENSE.txt b/LICENSE.txt similarity index 100% rename from ThinkPHP/LICENSE.txt rename to LICENSE.txt diff --git a/ThinkPHP/Lang/en-us.php b/Lang/en-us.php similarity index 100% rename from ThinkPHP/Lang/en-us.php rename to Lang/en-us.php diff --git a/ThinkPHP/Lang/zh-cn.php b/Lang/zh-cn.php similarity index 100% rename from ThinkPHP/Lang/zh-cn.php rename to Lang/zh-cn.php diff --git a/ThinkPHP/Lib/Behavior/CheckRouteBehavior.class.php b/Lib/Behavior/CheckRouteBehavior.class.php similarity index 100% rename from ThinkPHP/Lib/Behavior/CheckRouteBehavior.class.php rename to Lib/Behavior/CheckRouteBehavior.class.php diff --git a/ThinkPHP/Lib/Behavior/ContentReplaceBehavior.class.php b/Lib/Behavior/ContentReplaceBehavior.class.php similarity index 100% rename from ThinkPHP/Lib/Behavior/ContentReplaceBehavior.class.php rename to Lib/Behavior/ContentReplaceBehavior.class.php diff --git a/ThinkPHP/Lib/Behavior/LocationTemplateBehavior.class.php b/Lib/Behavior/LocationTemplateBehavior.class.php similarity index 100% rename from ThinkPHP/Lib/Behavior/LocationTemplateBehavior.class.php rename to Lib/Behavior/LocationTemplateBehavior.class.php diff --git a/ThinkPHP/Lib/Behavior/ParseTemplateBehavior.class.php b/Lib/Behavior/ParseTemplateBehavior.class.php similarity index 100% rename from ThinkPHP/Lib/Behavior/ParseTemplateBehavior.class.php rename to Lib/Behavior/ParseTemplateBehavior.class.php diff --git a/ThinkPHP/Lib/Behavior/ReadHtmlCacheBehavior.class.php b/Lib/Behavior/ReadHtmlCacheBehavior.class.php similarity index 100% rename from ThinkPHP/Lib/Behavior/ReadHtmlCacheBehavior.class.php rename to Lib/Behavior/ReadHtmlCacheBehavior.class.php diff --git a/ThinkPHP/Lib/Behavior/ShowPageTraceBehavior.class.php b/Lib/Behavior/ShowPageTraceBehavior.class.php similarity index 100% rename from ThinkPHP/Lib/Behavior/ShowPageTraceBehavior.class.php rename to Lib/Behavior/ShowPageTraceBehavior.class.php diff --git a/ThinkPHP/Lib/Behavior/ShowRuntimeBehavior.class.php b/Lib/Behavior/ShowRuntimeBehavior.class.php similarity index 100% rename from ThinkPHP/Lib/Behavior/ShowRuntimeBehavior.class.php rename to Lib/Behavior/ShowRuntimeBehavior.class.php diff --git a/ThinkPHP/Lib/Behavior/TokenBuildBehavior.class.php b/Lib/Behavior/TokenBuildBehavior.class.php similarity index 100% rename from ThinkPHP/Lib/Behavior/TokenBuildBehavior.class.php rename to Lib/Behavior/TokenBuildBehavior.class.php diff --git a/ThinkPHP/Lib/Behavior/WriteHtmlCacheBehavior.class.php b/Lib/Behavior/WriteHtmlCacheBehavior.class.php similarity index 100% rename from ThinkPHP/Lib/Behavior/WriteHtmlCacheBehavior.class.php rename to Lib/Behavior/WriteHtmlCacheBehavior.class.php diff --git a/ThinkPHP/Lib/Core/Action.class.php b/Lib/Core/Action.class.php similarity index 100% rename from ThinkPHP/Lib/Core/Action.class.php rename to Lib/Core/Action.class.php diff --git a/ThinkPHP/Lib/Core/App.class.php b/Lib/Core/App.class.php similarity index 100% rename from ThinkPHP/Lib/Core/App.class.php rename to Lib/Core/App.class.php diff --git a/ThinkPHP/Lib/Core/Behavior.class.php b/Lib/Core/Behavior.class.php similarity index 100% rename from ThinkPHP/Lib/Core/Behavior.class.php rename to Lib/Core/Behavior.class.php diff --git a/ThinkPHP/Lib/Core/Cache.class.php b/Lib/Core/Cache.class.php similarity index 100% rename from ThinkPHP/Lib/Core/Cache.class.php rename to Lib/Core/Cache.class.php diff --git a/ThinkPHP/Lib/Core/Db.class.php b/Lib/Core/Db.class.php similarity index 100% rename from ThinkPHP/Lib/Core/Db.class.php rename to Lib/Core/Db.class.php diff --git a/ThinkPHP/Lib/Core/Dispatcher.class.php b/Lib/Core/Dispatcher.class.php similarity index 100% rename from ThinkPHP/Lib/Core/Dispatcher.class.php rename to Lib/Core/Dispatcher.class.php diff --git a/ThinkPHP/Lib/Core/Log.class.php b/Lib/Core/Log.class.php similarity index 100% rename from ThinkPHP/Lib/Core/Log.class.php rename to Lib/Core/Log.class.php diff --git a/ThinkPHP/Lib/Core/Model.class.php b/Lib/Core/Model.class.php similarity index 100% rename from ThinkPHP/Lib/Core/Model.class.php rename to Lib/Core/Model.class.php diff --git a/ThinkPHP/Lib/Core/Think.class.php b/Lib/Core/Think.class.php similarity index 100% rename from ThinkPHP/Lib/Core/Think.class.php rename to Lib/Core/Think.class.php diff --git a/ThinkPHP/Lib/Core/ThinkException.class.php b/Lib/Core/ThinkException.class.php similarity index 100% rename from ThinkPHP/Lib/Core/ThinkException.class.php rename to Lib/Core/ThinkException.class.php diff --git a/ThinkPHP/Lib/Core/View.class.php b/Lib/Core/View.class.php similarity index 100% rename from ThinkPHP/Lib/Core/View.class.php rename to Lib/Core/View.class.php diff --git a/ThinkPHP/Lib/Core/Widget.class.php b/Lib/Core/Widget.class.php similarity index 100% rename from ThinkPHP/Lib/Core/Widget.class.php rename to Lib/Core/Widget.class.php diff --git a/ThinkPHP/Lib/Driver/Cache/CacheFile.class.php b/Lib/Driver/Cache/CacheFile.class.php similarity index 100% rename from ThinkPHP/Lib/Driver/Cache/CacheFile.class.php rename to Lib/Driver/Cache/CacheFile.class.php diff --git a/ThinkPHP/Lib/Driver/Db/DbMysql.class.php b/Lib/Driver/Db/DbMysql.class.php similarity index 100% rename from ThinkPHP/Lib/Driver/Db/DbMysql.class.php rename to Lib/Driver/Db/DbMysql.class.php diff --git a/ThinkPHP/Lib/Driver/Db/DbMysqli.class.php b/Lib/Driver/Db/DbMysqli.class.php similarity index 100% rename from ThinkPHP/Lib/Driver/Db/DbMysqli.class.php rename to Lib/Driver/Db/DbMysqli.class.php diff --git a/ThinkPHP/Lib/Driver/TagLib/TagLibCx.class.php b/Lib/Driver/TagLib/TagLibCx.class.php similarity index 100% rename from ThinkPHP/Lib/Driver/TagLib/TagLibCx.class.php rename to Lib/Driver/TagLib/TagLibCx.class.php diff --git a/ThinkPHP/Lib/Template/TagLib.class.php b/Lib/Template/TagLib.class.php similarity index 100% rename from ThinkPHP/Lib/Template/TagLib.class.php rename to Lib/Template/TagLib.class.php diff --git a/ThinkPHP/Lib/Template/ThinkTemplate.class.php b/Lib/Template/ThinkTemplate.class.php similarity index 100% rename from ThinkPHP/Lib/Template/ThinkTemplate.class.php rename to Lib/Template/ThinkTemplate.class.php diff --git a/ThinkPHP/ThinkPHP.php b/ThinkPHP.php similarity index 100% rename from ThinkPHP/ThinkPHP.php rename to ThinkPHP.php diff --git a/ThinkPHP/Extend/README.txt b/ThinkPHP/Extend/README.txt deleted file mode 100644 index 1c150dfeb..000000000 --- a/ThinkPHP/Extend/README.txt +++ /dev/null @@ -1,24 +0,0 @@ - -Extend目录为系统扩展目录(核心版不含任何扩展),子目录结构为: - -|-Action 控制器扩展 -|-Behavior 行为扩展 -|-Driver 驱动扩展 -| ├Driver/Cache 缓存驱动 -| ├Driver/Db 数据库驱动 -| ├Driver/Session SESSION驱动 -| ├Driver/TagLib 标签库驱动 -| ├Driver/Template 模板引擎驱动 -| -|-Engine 引擎扩展 -|-Function 函数扩展 -|-Library 类库扩展 -| ├ORG ORG类库包 -| ├COM COM类库包 -| -|-Mode 模式扩展 -|-Model 模型扩展 -|-Tool 其他扩展或工具 -|-Vendor 第三方类库目录 - -关于扩展的详细使用,请参考开发手册的扩展章节。 \ No newline at end of file diff --git a/ThinkPHP/README.txt b/ThinkPHP/README.txt deleted file mode 100644 index 5c3522617..000000000 --- a/ThinkPHP/README.txt +++ /dev/null @@ -1,127 +0,0 @@ -+------------------------------------------------------------------- -| 感谢您使用ThinkPHP开发框架 ^_^ -+------------------------------------------------------------------- -| 大道至简 开发由我 WE CAN DO IT,JUST THINK -+------------------------------------------------------------------- -| 版本信息:ThinkPHP 3.1 Release 2012/9/5 -+------------------------------------------------------------------- -| Copyright(c) 2006-2012 http://thinkphp.cn All rights reserved. -+------------------------------------------------------------------- - -[ 简介 ] -ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架, -遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而 -诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性 -能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在 -社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,众多 -的典型案例确保可以稳定用于商业以及门户级的开发。 - -经过6年的不断积累和重构,3.0版本在框架底层的定制和扩展方面趋于完善, -使得应用的开发范围和需求适应度更加扩大,能够满足不同程度的开发人员的 -需求。而且引入了全新的CBD(核心+行为+驱动)架构模式,旨在打造DIY框架 -和AOP编程体验,让ThinkPHP能够在不同方面都能快速满足项目和应用的需求, -并且正式引入SAE、REST和Mongo支持。 - -使用ThinkPHP,你可以更方便和快捷的开发和部署应用。当然不仅仅是企业级 -应用,任何PHP应用开发都可以从ThinkPHP的简单和快速的特性中受益。 -ThinkPHP本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念, -用最少的代码完成更多的功能,宗旨就是让WEB应用开发更简单、更快速。 -为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应 -用开发的最佳实践!经过6年来的不断重构和改进,ThinkPHP达到了一个新的 -阶段,能够满足企业开发中复杂的项目需求,足以达到企业级和门户级的开 -发标准。 - -[ 协议 ] -ThinkPHP遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP, -甚至允许把你的ThinkPHP应用采用商业闭源发布。 -具体参考LICENSE.txt内容 - -[ 特性 ] -CBD架构:ThinkPHP3.0版本引入了全新的CBD(核心+行为+驱动)架构模式, -打造框架底层DIY定制和类AOP编程体验。利用这一新的特性,开发人员可以 -方便地通过模式扩展为自己量身定制一套属于自己或者企业的开发框架。 -编译机制:独创的项目编译机制,有效减少OOP开发中文件加载的性能开销。 -改进后的项目编译机制,可以支持编译文件直接作为入口载入,并且支持常量 -外部载入,利于产品发布。 - -类库导入:采用基于类库包和命名空间的方式导入类库,让类库导入看起来更 -加简单清晰,而且还支持自动加载和别名导入。为了方便项目的跨平台移植, -系统还可以严格检查加载文件的大小写。 - -URL和路由:系统支持普通模式、PATHINFO模式、REWRITE模式和兼容模式的 -URL方式,支持不同的服务器和运行模式的部署,配合URL路由功能,让你随心 -所欲的构建需要的URL地址和进行SEO优化工作。支持灵活的规则路由和正则路 -由,以及路由重定向支持,带给开发人员更方便灵活的URL优化体验。 -调试模式:框架提供的调试模式可以方便用于开发过程的不同阶段,包括开发、 -测试和演示等任何需要的情况,不同的应用模式可以配置独立的项目配置文件。 -只是小小的性能牺牲就能满足调试开发过程中的日志和分析需要,并确保将来的 -部署顺利,一旦切换到部署模式则可以迅速提升性能。 - -ORM :简洁轻巧的ORM实现,配合简单的CURD以及AR模式,让开发效率无处不在。 - -数据库:支持包括Mysql、Sqlite、Pgsql、Oracle、SqlServer、Mongo等数据库, -并且内置分布式数据库和读写分离功能支持。系统支持多数据库连接和动态切换 -机制,犹如企业开发的一把利刃,跨数据库应用和分布式支持从此无忧。 - -查询语言:内建丰富的查询机制,包括组合查询、快捷查询、复合查询、区间 -查询、统计查询、定位查询、多表查询、子查询、动态查询和原生查询,让你的 -数据查询简洁高效。 - -动态模型:无需创建任何对应的模型类,轻松完成CURD操作,支持多种模型之间 -的动态切换,让你领略数据操作的无比畅快和最佳体验。 - -扩展模型:提供了丰富的扩展模型,包括:支持序列化字段、文本字段、只读字 -段、延迟写入、乐观锁、数据分表等高级特性的高级模型;可以轻松动态地创建 -数据库视图的视图模型;支持关联操作的关联模型;支持Mongo数据库的Mongo模 -型等等,都可以方便的使用。 - -模块分组:不用担心大项目的分工协调和部署问题,分组帮你解决跨项目的难题, -还可以支持对分组的二级域名部署支持。 - -模板引擎:系统内建了一款卓越的基于XML的编译型模板引擎,支持两种类型的 -模板标签,融合了Smarty和JSP标签库的思想,并内置布局模板功能和标签库扩展 -支持。通过驱动还可以支持Smarty、EaseTemplate、TemplateLite、Smart等其他第 -三方模板引擎。 - -AJAX支持:内置和客户端无关的AJAX数据返回方法,支持JSON、XML和EVAL类型 -返回客户端,而且可以扩展返回数据格式,系统不绑定任何AJAX类库,可随意使 -用自己熟悉的AJAX类库进行操作。 - -SAE支持:提供了新浪SAE平台的强力支持,具备“横跨性”和“平滑性”,支持本地化 -开发和调试以及部署切换,让你轻松过渡到SAE开发,打造全新的SAE开发体验。 - -RESTFul支持:REST模式提供了RESTFul支持,为你打造全新的URL设计和访问体验, -同时为接口应用提供了支持。 - -多语言支持:系统支持语言包功能,项目和分组都可以有单独的语言包,并且可以 -自动检测浏览器语言自动载入对应的语言包。 - -模式扩展:除了标准模式外,还提供了AMF、PHPRpc、Lite、Thin和Cli模式扩展支 -持,针对不同级别的应用开发提供最佳核心框架,还可以自定义模式扩展。 - -自动验证和完成:自动完成表单数据的验证和过滤,新版新增了IP验证和有效期验 -证等更多的验证方式,配合自动完成可以生成安全的数据对象。 - -字段类型检测:系统会自动缓存字段信息和字段类型,支持非法字段过滤和字段类 -型强制转换,确保数据写入和查询更安全。 - -缓存机制:系统支持包括文件方式、APC、Db、Memcache、Shmop、Sqlite、Redis、 -Eaccelerator和Xcache在内的动态数据缓存类型,以及可定制的静态缓存规则,并 -提供了快捷方法进行存取操作。 - -扩展机制:系统支持包括模式扩展、行为扩展、类库扩展、驱动扩展、模型扩展、 -控制器扩展、Widget扩展在内的强大灵活的扩展机制,让你不再受限于核心的不足 -和无所适从,随心DIY自己的框架和扩展应用,满足企业开发中更加复杂的项目需求。 - -[ 要求 ] -ThinkPHP3.1需要PHP5.2.0以上版本支持,可以运行在任何系统环境下面。 - -[ 安装 ] -ThinkPHP无需安装,下载ThinkPHP核心包或者完整版之后,把解压后的目录拷贝到 -你的WEB服务器或者WEB目录即可。 - -[ 鸣谢 ] -特别要鸣谢ThinkPHP团队和所有关注和支持ThinkPHP的用户。 - -[ 支持 ] -更多内容和支持请访问ThinkPHP官方网站http://thinkphp.cn/ 和论坛 http://bbs.thinkphp.cn。 \ No newline at end of file diff --git a/ThinkPHP/logo.png b/ThinkPHP/logo.png deleted file mode 100644 index e0b195d82d339b3f479a7a79700b6dc5a381ec45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7396 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 Date: Fri, 8 Feb 2013 14:11:08 +0800 Subject: [PATCH 06/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE.md | 18 ++++++++++++++++++ LICENSE.txt | 32 -------------------------------- 2 files changed, 18 insertions(+), 32 deletions(-) create mode 100644 LICENSE.md delete mode 100644 LICENSE.txt diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 000000000..9933273c9 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,18 @@ +ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 + +版权所有Copyright © 2006-2012 by ThinkPHP All rights reserved。 + +ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 + +Apache Licence是著名的非盈利开源组织Apache采用的协议。 +该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, +允许代码修改,再作为开源或商业软件发布。需要满足 +的条件: +1. 需要给代码的用户一份Apache Licence ; +2. 如果你修改了代码,需要在被修改的文件中说明; +3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明; +4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有本协议内容。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。 + +具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOTLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THECOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVERCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING INANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 0275e8463..000000000 --- a/LICENSE.txt +++ /dev/null @@ -1,32 +0,0 @@ - -ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 -版权所有Copyright © 2006-2012 by ThinkPHP (http://thinkphp.cn) -All rights reserved。 -ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 - -Apache Licence是著名的非盈利开源组织Apache采用的协议。 -该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, -允许代码修改,再作为开源或商业软件发布。需要满足 -的条件: -1. 需要给代码的用户一份Apache Licence ; -2. 如果你修改了代码,需要在被修改的文件中说明; -3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 -带有原来代码中的协议,商标,专利声明和其他原来作者规 -定需要包含的说明; -4. 如果再发布的产品中包含一个Notice文件,则在Notice文 -件中需要带有本协议内容。你可以在Notice中增加自己的 -许可,但不可以表现为对Apache Licence构成更改。 -具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. From d1e1e7394941dd9bf7392732e1d80c26cc6b3af7 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 14:11:31 +0800 Subject: [PATCH 07/39] =?UTF-8?q?=E5=88=A0=E9=99=A4gitignore=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E9=87=8C=E7=9A=84=E5=BF=BD=E7=95=A5=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 70e0dae54..e69de29bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +0,0 @@ -Extend/* \ No newline at end of file From d3ac60caf488b48d90ba5e872ac770e8d6182cfd Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 14:19:37 +0800 Subject: [PATCH 08/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9thinkphp=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E6=96=87=E4=BB=B6=E7=9A=84=E6=B3=A8=E9=87=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ThinkPHP.php | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/ThinkPHP.php b/ThinkPHP.php index 940b48dd9..fd5c104ee 100644 --- a/ThinkPHP.php +++ b/ThinkPHP.php @@ -10,27 +10,41 @@ // +---------------------------------------------------------------------- // ThinkPHP 入口文件 + // 记录开始运行时间 $GLOBALS['_beginTime'] = microtime(TRUE); + // 记录内存初始使用 -define('MEMORY_LIMIT_ON',function_exists('memory_get_usage')); +define('MEMORY_LIMIT_ON', function_exists('memory_get_usage')); if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage(); -// 系统目录定义 -defined('THINK_PATH') or define('THINK_PATH', dirname(__FILE__).'/'); -defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/'); -defined('RUNTIME_PATH') or define('RUNTIME_PATH',APP_PATH.'Runtime/'); -defined('APP_DEBUG') or define('APP_DEBUG',false); // 是否调试模式 + +// Thinkphp框架目录 +// 项目目录 +// 临时运行文件目录 +defined('THINK_PATH') or define('THINK_PATH', dirname(__FILE__) . '/'); +defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . '/'); +defined('RUNTIME_PATH') or define('RUNTIME_PATH', APP_PATH . 'Runtime/'); + +// 是否开启调试模式 +defined('APP_DEBUG') or define('APP_DEBUG', false); + +// 运行 if(defined('ENGINE_NAME')) { + defined('ENGINE_PATH') or define('ENGINE_PATH',THINK_PATH.'Extend/Engine/'); require ENGINE_PATH.strtolower(ENGINE_NAME).'.php'; }else{ + $runtime = defined('MODE_NAME')?'~'.strtolower(MODE_NAME).'_runtime.php':'~runtime.php'; defined('RUNTIME_FILE') or define('RUNTIME_FILE',RUNTIME_PATH.$runtime); + if(!APP_DEBUG && is_file(RUNTIME_FILE)) { - // 部署模式直接载入运行缓存 + + // 生产环境,直接载入生成的运行文件 require RUNTIME_FILE; }else{ - // 加载运行时文件 + + // 开发环境 require THINK_PATH.'Common/runtime.php'; } } From 8e652d2979dd7b099260625a6909c1d03e89f8c9 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 14:37:45 +0800 Subject: [PATCH 09/39] =?UTF-8?q?=E5=B0=86runtime.php=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E9=87=8C=E7=9A=84EXTEND=5FPATH=E7=9A=84=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=A7=BB=E5=88=B0ThinkPHP.php=E6=96=87=E4=BB=B6=E5=86=85?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/runtime.php | 4 +++- ThinkPHP.php | 24 ++++++++++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Common/runtime.php b/Common/runtime.php index 95075621c..a59c0d470 100644 --- a/Common/runtime.php +++ b/Common/runtime.php @@ -65,17 +65,19 @@ // 路径设置 可在入口文件中重新定义 所有路径常量都必须以/ 结尾 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/'); // 项目数据目录 diff --git a/ThinkPHP.php b/ThinkPHP.php index fd5c104ee..b12480e80 100644 --- a/ThinkPHP.php +++ b/ThinkPHP.php @@ -9,7 +9,7 @@ // | Author: liu21st // +---------------------------------------------------------------------- -// ThinkPHP 入口文件 +// Thinkphp框架入口 // 记录开始运行时间 $GLOBALS['_beginTime'] = microtime(TRUE); @@ -19,25 +19,33 @@ if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage(); // Thinkphp框架目录 +// Thinkphp扩展目录 // 项目目录 // 临时运行文件目录 defined('THINK_PATH') or define('THINK_PATH', dirname(__FILE__) . '/'); +defined('EXTEND_PATH') or define('EXTEND_PATH', THINK_PATH . 'Extend/'); defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . '/'); defined('RUNTIME_PATH') or define('RUNTIME_PATH', APP_PATH . 'Runtime/'); // 是否开启调试模式 defined('APP_DEBUG') or define('APP_DEBUG', false); -// 运行 +// 运行模式,是否使用sae等引擎 if(defined('ENGINE_NAME')) { - defined('ENGINE_PATH') or define('ENGINE_PATH',THINK_PATH.'Extend/Engine/'); - require ENGINE_PATH.strtolower(ENGINE_NAME).'.php'; -}else{ + // 第三方引擎运行 + defined('ENGINE_PATH') or define('ENGINE_PATH', EXTEND_PATH . 'Engine/'); + require ENGINE_PATH . strtolower(ENGINE_NAME) . '.php'; +} else { - $runtime = defined('MODE_NAME')?'~'.strtolower(MODE_NAME).'_runtime.php':'~runtime.php'; - defined('RUNTIME_FILE') or define('RUNTIME_FILE',RUNTIME_PATH.$runtime); + // 普通方式运行 + // 应用运行模式和定义RUNTIME_FILE + // MODE_NAME, Cli, Lite, Thin, AMF, PHPPRC, REST + $runtime = defined('MODE_NAME') ? '~' . strtolower(MODE_NAME) . '_runtime.php' : '~runtime.php'; + defined('RUNTIME_FILE') or define('RUNTIME_FILE', RUNTIME_PATH . $runtime); + + // 开始运行 if(!APP_DEBUG && is_file(RUNTIME_FILE)) { // 生产环境,直接载入生成的运行文件 @@ -46,5 +54,5 @@ // 开发环境 require THINK_PATH.'Common/runtime.php'; - } + } } From 103768e095eecb59a0d6f4dce6d9c1fa62afa27d Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 14:56:39 +0800 Subject: [PATCH 10/39] =?UTF-8?q?=E5=9C=A8'URL=5FCASE=5FINSENSITIVE'?= =?UTF-8?q?=E4=B8=BAtrue=E7=9A=84=E6=A8=A1=E5=BC=8F=E4=B8=8B=EF=BC=8C=5F?= =?UTF-8?q?=5FGROUP=5F=5F=E5=AE=9A=E4=B9=89=E4=B8=BA=E5=B0=8F=E5=86=99?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Core/Dispatcher.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/Core/Dispatcher.class.php b/Lib/Core/Dispatcher.class.php index ea37af130..26b5ca87b 100644 --- a/Lib/Core/Dispatcher.class.php +++ b/Lib/Core/Dispatcher.class.php @@ -132,7 +132,7 @@ static public function dispatch() { if (C('APP_GROUP_LIST')) { define('GROUP_NAME', self::getGroup(C('VAR_GROUP'))); // 分组URL地址 - define('__GROUP__',(!empty($domainGroup) || strtolower(GROUP_NAME) == strtolower(C('DEFAULT_GROUP')) )?__APP__ : __APP__.'/'.GROUP_NAME); + define('__GROUP__', (!empty($domainGroup) || strtolower(GROUP_NAME) == strtolower(C('DEFAULT_GROUP')) ) ? __APP__ : __APP__ . '/' . (C('URL_CASE_INSENSITIVE') ? strtolower(GROUP_NAME) : GROUP_NAME) ); } // 定义项目基础加载路径 From d65538dbd738bf134c2adbe7145200fb5c20bf84 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 15:02:51 +0800 Subject: [PATCH 11/39] =?UTF-8?q?=5F=5FURL=5F=5F=E7=9A=84$moduleName?= =?UTF-8?q?=E5=9C=A8URL=E5=B0=8F=E5=86=99=E6=A8=A1=E5=BC=8F=E4=B8=8B?= =?UTF-8?q?=E8=BE=93=E5=87=BA=E6=94=B9=E4=B8=BA=E5=B0=8F=E5=86=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Core/Dispatcher.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Lib/Core/Dispatcher.class.php b/Lib/Core/Dispatcher.class.php index 26b5ca87b..2d20b6c44 100644 --- a/Lib/Core/Dispatcher.class.php +++ b/Lib/Core/Dispatcher.class.php @@ -162,7 +162,9 @@ static public function dispatch() { define('ACTION_NAME',self::getAction(C('VAR_ACTION'))); // 当前模块和分组地址 - $moduleName = defined('MODULE_ALIAS')?MODULE_ALIAS:MODULE_NAME; + $moduleName = defined('MODULE_ALIAS') ? MODULE_ALIAS : MODULE_NAME; + if(C('URL_CASE_INSENSITIVE')) $moduleName = strtolower($moduleName); + if(defined('GROUP_NAME')) { define('__URL__',!empty($domainModule)?__GROUP__.$depr : __GROUP__.$depr.$moduleName); }else{ From 4752f36ebea4fc3bb849ce7549f0bf5314775851 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 15:44:25 +0800 Subject: [PATCH 12/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9README=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f687d5e92..182eac37f 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,13 @@ -#MinoWu Thinkphp# - -官网参考:[http://www.thinkphp.cn](http://www.thinkphp.cn) - -文档参考:[http://doc.thinkphp.cn](http://doc.thinkphp.cn) - ---------------------------------- - -##ThinkPHP官方介绍## +##ThinkPHP官方介绍## ###简介### ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。 +官网参考:[http://www.thinkphp.cn](http://www.thinkphp.cn) + +文档参考:[http://doc.thinkphp.cn](http://doc.thinkphp.cn) + ###全面的WEB开发特性支持### 最新的ThinkPHP为WEB应用开发提供了强有力的支持,这些支持包括: From 78ce6727dacb9f9dbf6cb2cdea8a608e1219a98f Mon Sep 17 00:00:00 2001 From: MinoWu Date: Fri, 8 Feb 2013 15:45:50 +0800 Subject: [PATCH 13/39] =?UTF-8?q?README=20Markdown=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 182eac37f..a79bc383a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -##ThinkPHP官方介绍## +#ThinkPHP官方介绍# -###简介### +##简介## ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。 @@ -8,7 +8,7 @@ ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级P 文档参考:[http://doc.thinkphp.cn](http://doc.thinkphp.cn) -###全面的WEB开发特性支持### +##全面的WEB开发特性支持## 最新的ThinkPHP为WEB应用开发提供了强有力的支持,这些支持包括: @@ -23,12 +23,11 @@ ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级P 9. MongoDb支持-提供NoSQL的支持 10. 缓存支持-提供了包括文件、数据库、Memcache、Xcache、Redis等多种类型的缓存支持 -###大道至简的开发理念### +##大道至简的开发理念## ThinkPHP从诞生以来一直秉承大道至简的开发理念,无论从底层实现还是应用开发,我们都倡导用最少的代码完成相同的功能,正是由于对简单的执着和代码的修炼,让我们长期保持出色的性能和极速的开发体验。在主流PHP开发框架的评测数据中表现卓越,简单和快速开发是我们不变的宗旨。 - -###安全性### +##安全性## 框架在系统层面提供了众多的安全特性,确保你的网站和产品安全无忧。这些特性包括: @@ -40,6 +39,6 @@ ThinkPHP从诞生以来一直秉承大道至简的开发理念,无论从底层 6. 防SQL注入 7. 图像上传检测 -###商业友好的开源协议### +##商业友好的开源协议## ThinkPHP遵循Apache2开源协议发布。Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再作为开源或商业软件发布。 \ No newline at end of file From 0de6675f8933026f8ebb96cc816d4b7523f37a37 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sat, 9 Feb 2013 00:53:36 +0800 Subject: [PATCH 14/39] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E5=88=B0=E4=B8=8B=E4=B8=AA=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=9A=84JUMP=5FMODE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Conf/convention.php | 8 +++- Lib/Core/Action.class.php | 79 ++++++++++++++++++++++++++------------- 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/Conf/convention.php b/Conf/convention.php index c37379113..6a911311d 100644 --- a/Conf/convention.php +++ b/Conf/convention.php @@ -135,9 +135,15 @@ 'VAR_PATHINFO' => 's', // PATHINFO 兼容模式获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_DEPR 'VAR_URL_PARAMS' => '_URL_', // PATHINFO URL参数变量 'VAR_TEMPLATE' => 't', // 默认模板切换变量 - 'VAR_FILTERS' => 'filter_exp', // 全局系统变量的默认过滤方法 多个用逗号分割 + 'VAR_FILTERS' => 'filter_exp', // 全局系统变量的默认过滤方法 多个用逗号分割 'OUTPUT_ENCODE' => true, // 页面压缩输出 'HTTP_CACHE_CONTROL' => 'private', // 网页缓存控制 + /* URL 跳转设置 */ + 'JUMP_MODE' => 0, // 跳转方式,0(普通模式),1(直接模式) + 'JUMP_SESSION' => false, + 'JUMP_SESSION_INFO' => 'jump_session_info', + 'JUMP_SESSION_STATUS' => 'jump_session_status' + ); \ No newline at end of file diff --git a/Lib/Core/Action.class.php b/Lib/Core/Action.class.php index 079e0addc..d48117790 100644 --- a/Lib/Core/Action.class.php +++ b/Lib/Core/Action.class.php @@ -379,39 +379,64 @@ protected function redirect($url,$params=array(),$delay=0,$msg='') { * @access private * @return void */ - private function dispatchJump($message,$status=1,$jumpUrl='',$ajax=false) { - if(true === $ajax || IS_AJAX) {// AJAX提交 + private function dispatchJump($message, $status = 1, $jumpUrl = '', $ajax = false) { + + // 在ajax提交或要求ajax返回下,返回json + if(true === $ajax || IS_AJAX) { $data = is_array($ajax)?$ajax:array(); $data['info'] = $message; $data['status'] = $status; $data['url'] = $jumpUrl; $this->ajaxReturn($data); } - if(is_int($ajax)) $this->assign('waitSecond',$ajax); - if(!empty($jumpUrl)) $this->assign('jumpUrl',$jumpUrl); - // 提示标题 - $this->assign('msgTitle',$status? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_')); - //如果设置了关闭窗口,则提示完毕后自动关闭窗口 - if($this->get('closeWin')) $this->assign('jumpUrl','javascript:window.close();'); - $this->assign('status',$status); // 状态 - //保证输出不受静态缓存影响 - C('HTML_CACHE_ON',false); - if($status) { //发送成功信息 - $this->assign('message',$message);// 提示信息 - // 成功操作后默认停留1秒 - if(!isset($this->waitSecond)) $this->assign('waitSecond','1'); - // 默认操作成功自动返回操作前页面 - if(!isset($this->jumpUrl)) $this->assign("jumpUrl",$_SERVER["HTTP_REFERER"]); - $this->display(C('TMPL_ACTION_SUCCESS')); - }else{ - $this->assign('error',$message);// 提示信息 - //发生错误时候默认停留3秒 - if(!isset($this->waitSecond)) $this->assign('waitSecond','3'); - // 默认发生错误的话自动返回上页 - if(!isset($this->jumpUrl)) $this->assign('jumpUrl',"javascript:history.back(-1);"); - $this->display(C('TMPL_ACTION_ERROR')); - // 中止执行 避免出错后继续执行 - exit ; + + // 页面跳转直接模式 + if(C('JUMP_MODE') == 1) { + + // 设置路径 + if(!$jumpUrl) + $jumpUrl = empty($_SERVER["HTTP_REFERER"]) ? __APP__ : $_SERVER["HTTP_REFERER"]; + + // 设置提示信息session + // 写入两个session,分别是提示信息和操作状态 + if(C('JUMP_SESSION')) { + session(C('JUMP_SESSION_INFO'), $message); + session(C('JUMP_SESSION_STATUS'), $status); + } + + // 重定向 + $this->redirect($jumpUrl); + } + + // 页面跳转普通模式 + elseif(C('JUMP_MODE') == 0) { + + if(is_int($ajax)) $this->assign('waitSecond',$ajax); + if(!empty($jumpUrl)) $this->assign('jumpUrl',$jumpUrl); + // 提示标题 + $this->assign('msgTitle',$status? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_')); + //如果设置了关闭窗口,则提示完毕后自动关闭窗口 + if($this->get('closeWin')) $this->assign('jumpUrl','javascript:window.close();'); + $this->assign('status',$status); // 状态 + //保证输出不受静态缓存影响 + C('HTML_CACHE_ON',false); + if($status) { //发送成功信息 + $this->assign('message',$message);// 提示信息 + // 成功操作后默认停留1秒 + if(!isset($this->waitSecond)) $this->assign('waitSecond','1'); + // 默认操作成功自动返回操作前页面 + if(!isset($this->jumpUrl)) $this->assign("jumpUrl",$_SERVER["HTTP_REFERER"]); + $this->display(C('TMPL_ACTION_SUCCESS')); + }else{ + $this->assign('error',$message);// 提示信息 + //发生错误时候默认停留3秒 + if(!isset($this->waitSecond)) $this->assign('waitSecond','3'); + // 默认发生错误的话自动返回上页 + if(!isset($this->jumpUrl)) $this->assign('jumpUrl',"javascript:history.back(-1);"); + $this->display(C('TMPL_ACTION_ERROR')); + // 中止执行 避免出错后继续执行 + exit ; + } } } From d6e90f8d836b4c7f6b5b79ac5f400cc98c7b7629 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Tue, 19 Feb 2013 16:41:26 +0800 Subject: [PATCH 15/39] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=8B=93=E5=B1=95=E5=87=BD=E6=95=B0=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/functions.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Common/functions.php b/Common/functions.php index bcf045718..1d0888731 100644 --- a/Common/functions.php +++ b/Common/functions.php @@ -696,6 +696,17 @@ function load_ext_file() { if(is_file($file)) include $file; } } + + // 加载外部拓展函数 + if(true) { + $files = explode(',', C('LOAD_EXT_FUNCTION')); + array_push($files, 'helper'); + foreach ($files as $file) { + $file = EXTEND_PATH . '/Function/' . $file . '.php'; + if(is_file($file)) include $file; + } + } + // 加载自定义的动态配置文件 if(C('LOAD_EXT_CONFIG')) { $configs = C('LOAD_EXT_CONFIG'); From 19fa0484e73ef129a64fb8525b8b69f1d483e984 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Tue, 19 Feb 2013 16:44:29 +0800 Subject: [PATCH 16/39] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=90=8D=E4=B8=BA'LOAD?= =?UTF-8?q?=5FEXT=5FFUNCTION'=E7=9A=84=E5=8F=98=E9=87=8F=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8A=A0=E8=BD=BD=E6=9C=BA=E5=88=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/functions.php | 4 ++-- Conf/convention.php | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Common/functions.php b/Common/functions.php index 1d0888731..74b50276f 100644 --- a/Common/functions.php +++ b/Common/functions.php @@ -698,9 +698,9 @@ function load_ext_file() { } // 加载外部拓展函数 - if(true) { + if(C('LOAD_EXT_FUNCTION')) { $files = explode(',', C('LOAD_EXT_FUNCTION')); - array_push($files, 'helper'); + // array_push($files, 'helper'); foreach ($files as $file) { $file = EXTEND_PATH . '/Function/' . $file . '.php'; if(is_file($file)) include $file; diff --git a/Conf/convention.php b/Conf/convention.php index 6a911311d..f8abd79e2 100644 --- a/Conf/convention.php +++ b/Conf/convention.php @@ -144,6 +144,9 @@ 'JUMP_MODE' => 0, // 跳转方式,0(普通模式),1(直接模式) 'JUMP_SESSION' => false, 'JUMP_SESSION_INFO' => 'jump_session_info', - 'JUMP_SESSION_STATUS' => 'jump_session_status' + 'JUMP_SESSION_STATUS' => 'jump_session_status', + + /* 加载设置 */ + 'LOAD_EXT_FUNCTION' => 'helper,extend' ); \ No newline at end of file From dfd5f16692f8dc1d0c66ee03f3e597d3895f7aca Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sat, 23 Feb 2013 01:05:05 +0800 Subject: [PATCH 17/39] =?UTF-8?q?=E6=B7=BB=E5=8A=A0session=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/functions.php | 136 ++++++++++++++++++++++++++++++------------- 1 file changed, 96 insertions(+), 40 deletions(-) diff --git a/Common/functions.php b/Common/functions.php index 74b50276f..72197830e 100644 --- a/Common/functions.php +++ b/Common/functions.php @@ -533,17 +533,33 @@ function data_to_xml($data, $item='item', $id='id') { * @param string|array $name session名称 如果为数组则表示进行session设置 * @param mixed $value session值 * @return mixed + * + * @conf SESSION_PREFIX + * @conf VAR_SESSION_ID sessionID的提交变量 + * @conf SESSION_TYPE + * @conf SESSION_AUTO_START */ function session($name,$value='') { - $prefix = C('SESSION_PREFIX'); - if(is_array($name)) { // session初始化 在session_start 之前调用 - if(isset($name['prefix'])) C('SESSION_PREFIX',$name['prefix']); - if(C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])){ + + // 获得前缀,默认空值 + $prefix = C('SESSION_PREFIX'); + + // name是数组则表示使用详细配置,在session_start前先配置好session再启用 + // id, name, path, prefix, expire, domain, use_cookies, use_trans_sid,type + if(is_array($name)) { + + // 如果设置了前缀,则替换conf + if(isset($name['prefix'])) C('SESSION_PREFIX', $name['prefix']); + + // 根据默认值设置获得根据定义的id设置 + if(C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])) session_id($_REQUEST[C('VAR_SESSION_ID')]); - }elseif(isset($name['id'])) { + elseif(isset($name['id'])) session_id($name['id']); - } + + // 配置参考,http://www.php.net/manual/zh/session.configuration.php ini_set('session.auto_start', 0); + if(isset($name['name'])) session_name($name['name']); if(isset($name['path'])) session_save_path($name['path']); if(isset($name['domain'])) ini_set('session.cookie_domain', $name['domain']); @@ -553,64 +569,104 @@ function session($name,$value='') { if(isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']); if(isset($name['cache_expire'])) session_cache_expire($name['cache_expire']); if(isset($name['type'])) C('SESSION_TYPE',$name['type']); - if(C('SESSION_TYPE')) { // 读取session驱动 - $class = 'Session'. ucwords(strtolower(C('SESSION_TYPE'))); - // 检查驱动类 + + // 如果存在其他session类型 + if(C('SESSION_TYPE')) { + + // 读取session驱动 + $class = 'Session'. ucwords(strtolower(C('SESSION_TYPE'))); + + // 检查驱动类是否存在并加载,不存在则抛出错误 if(require_cache(EXTEND_PATH.'Driver/Session/'.$class.'.class.php')) { + $hander = new $class(); $hander->execute(); + }else { // 类没有定义 throw_exception(L('_CLASS_NOT_EXIST_').': ' . $class); } } + // 启动session if(C('SESSION_AUTO_START')) session_start(); - }elseif('' === $value){ - if(0===strpos($name,'[')) { // session 操作 - if('[pause]'==$name){ // 暂停session + + // 启用session管理 + } elseif('' === $value) { + + // session 操作 + if(0===strpos($name,'[')) { + + // 暂停session + if('[pause]' == $name) { + session_write_close(); - }elseif('[start]'==$name){ // 启动session + + // 启动session + } elseif('[start]' == $name) { + session_start(); - }elseif('[destroy]'==$name){ // 销毁session + + // 销毁session + } elseif('[destroy]' == $name) { + $_SESSION = array(); session_unset(); session_destroy(); - }elseif('[regenerate]'==$name){ // 重新生成id + + // 重新生成id + } elseif('[regenerate]' == $name) { + session_regenerate_id(); } - }elseif(0===strpos($name,'?')){ // 检查session - $name = substr($name,1); - if($prefix) { + + // 检查session是否存在,以?起头 + } elseif(0 === strpos($name, '?')) { + + $name = substr($name, 1); + + if($prefix) return isset($_SESSION[$prefix][$name]); - }else{ + else return isset($_SESSION[$name]); - } - }elseif(is_null($name)){ // 清空session - if($prefix) { + + // 清空所有的session + } elseif(is_null($name)) { + + if($prefix) unset($_SESSION[$prefix]); - }else{ + else $_SESSION = array(); - } - }elseif($prefix){ // 获取session - return isset($_SESSION[$prefix][$name])?$_SESSION[$prefix][$name]:null; - }else{ - return isset($_SESSION[$name])?$_SESSION[$name]:null; + + // 获取session,当存在前缀和不存在前缀的情况下 + } elseif($prefix) { + + return isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null; + + } else { + + return isset($_SESSION[$name]) ? $_SESSION[$name] : null; } - }elseif(is_null($value)){ // 删除session - if($prefix){ + + // 删除session + } elseif(is_null($value)) { + + if($prefix) unset($_SESSION[$prefix][$name]); - }else{ + else unset($_SESSION[$name]); - } - }else{ // 设置session - if($prefix){ - if (!is_array($_SESSION[$prefix])) { - $_SESSION[$prefix] = array(); - } - $_SESSION[$prefix][$name] = $value; - }else{ - $_SESSION[$name] = $value; + + // 设置session + } else { + + if($prefix) { + + if(!is_array($_SESSION[$prefix])) $_SESSION[$prefix] = array(); + $_SESSION[$prefix][$name] = $value; + + } else { + + $_SESSION[$name] = $value; } } } From 236f82d3e5bb9a6c3884d265a658d508573f6b46 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sat, 23 Feb 2013 01:25:20 +0800 Subject: [PATCH 18/39] =?UTF-8?q?=E4=B8=BAsession=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/functions.php | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/Common/functions.php b/Common/functions.php index 72197830e..a2fbb9fa9 100644 --- a/Common/functions.php +++ b/Common/functions.php @@ -529,17 +529,44 @@ function data_to_xml($data, $item='item', $id='id') { } /** - * session管理函数 - * @param string|array $name session名称 如果为数组则表示进行session设置 - * @param mixed $value session值 + * @session管理函数 + * + * @详细配置 + * @param array $name + * @return void + * + * @session管理 + * @param string $name session名称,'[start]', '[pause]', '[destory]', '[regenerate]' + * @return void + * + * @获得session + * @param string $name session名称,得到该名称的session值 * @return mixed * + * @查询session + * @param string $name 带'?'前缀的session名称,查询是否存在该名称的session + * @return bealoon + * + * @删除所有session + * @param null + * @return void + * + * @删除指定session + * @param string $name session名称 + * @param null + * @return void + * + * @设置一个session + * @param string $name session名称 + * @param string|array 保存的内容 + * @return void + * * @conf SESSION_PREFIX * @conf VAR_SESSION_ID sessionID的提交变量 * @conf SESSION_TYPE * @conf SESSION_AUTO_START */ -function session($name,$value='') { +function session($name, $value = '') { // 获得前缀,默认空值 $prefix = C('SESSION_PREFIX'); @@ -554,12 +581,14 @@ function session($name,$value='') { // 根据默认值设置获得根据定义的id设置 if(C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])) session_id($_REQUEST[C('VAR_SESSION_ID')]); + elseif(isset($name['id'])) session_id($name['id']); - // 配置参考,http://www.php.net/manual/zh/session.configuration.php + // session 函数参考,http://www.php.net/manual/zh/ref.session.php + // session runtime 配置参考,http://www.php.net/manual/zh/session.configuration.php ini_set('session.auto_start', 0); - + if(isset($name['name'])) session_name($name['name']); if(isset($name['path'])) session_save_path($name['path']); if(isset($name['domain'])) ini_set('session.cookie_domain', $name['domain']); From da95e55bc257ad461b06b44c31e593b4fb0aea6a Mon Sep 17 00:00:00 2001 From: MinoWu Date: Wed, 27 Feb 2013 22:24:20 +0800 Subject: [PATCH 19/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B0=E7=9A=84READM?= =?UTF-8?q?E=EF=BC=8C=E5=88=A0=E9=99=A4LICENSE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE.md | 18 ------------------ README.md | 48 +++++++++--------------------------------------- 2 files changed, 9 insertions(+), 57 deletions(-) delete mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 9933273c9..000000000 --- a/LICENSE.md +++ /dev/null @@ -1,18 +0,0 @@ -ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 - -版权所有Copyright © 2006-2012 by ThinkPHP All rights reserved。 - -ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 - -Apache Licence是著名的非盈利开源组织Apache采用的协议。 -该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, -允许代码修改,再作为开源或商业软件发布。需要满足 -的条件: -1. 需要给代码的用户一份Apache Licence ; -2. 如果你修改了代码,需要在被修改的文件中说明; -3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明; -4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有本协议内容。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。 - -具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOTLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THECOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVERCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING INANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/README.md b/README.md index a79bc383a..455ce6462 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,14 @@ -#ThinkPHP官方介绍# +#Smart Thinkphp Plan# -##简介## +Thanks for thinkphp -ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。 +##安装和使用## -官网参考:[http://www.thinkphp.cn](http://www.thinkphp.cn) +待... -文档参考:[http://doc.thinkphp.cn](http://doc.thinkphp.cn) +##修改计划## -##全面的WEB开发特性支持## - -最新的ThinkPHP为WEB应用开发提供了强有力的支持,这些支持包括: - -1. MVC支持-基于模型(M)、视图(V)、控制器(C)的设计模式 -2. ORM支持-提供了全功能和高性能的ORM支持,支持大部分数据库 -3. 模板引擎支持-内置了高性能的基于标签库和XML标签的编译型模板引擎 -4. RESTFul支持-REST模式提供了RESTFul支持,为你打造全新的URL设计和访问体验 -5. SAE支持-提供了新浪SAE平台的强力支持,具备“横跨性”和“平滑性”,支持本地化开发和调试以及部署切换,打造全新的SAE开发体验 -6. CLI支持-支持基于命令行的应用开发 -7. AMF支持-支持Flex开发和Flash通讯,打造互联网富应用 -8. PHPRPC支持-提供基于PHPRpc的WEBService解决方案 -9. MongoDb支持-提供NoSQL的支持 -10. 缓存支持-提供了包括文件、数据库、Memcache、Xcache、Redis等多种类型的缓存支持 - -##大道至简的开发理念## - -ThinkPHP从诞生以来一直秉承大道至简的开发理念,无论从底层实现还是应用开发,我们都倡导用最少的代码完成相同的功能,正是由于对简单的执着和代码的修炼,让我们长期保持出色的性能和极速的开发体验。在主流PHP开发框架的评测数据中表现卓越,简单和快速开发是我们不变的宗旨。 - -##安全性## - -框架在系统层面提供了众多的安全特性,确保你的网站和产品安全无忧。这些特性包括: - -1. XSS安全防护 -2. 表单自动验证 -3. 强制数据类型转换 -4. 输入数据过滤 -5. 表单令牌验证 -6. 防SQL注入 -7. 图像上传检测 - -##商业友好的开源协议## - -ThinkPHP遵循Apache2开源协议发布。Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再作为开源或商业软件发布。 \ No newline at end of file +* 修改默认配置,默认开启语言系统,分组模式。 +* 废弃区分分组模式和非分组模式的代码,统一存在分组模式。 +* 彻底废弃ThinkTemplate模板引擎,改用Smarty模板引擎,删除冗余代码。 +* 重新定义Model和Action的读取文件夹,改Action类文件为Controller类。 \ No newline at end of file From ba2478b6595699161332d20409032045519f5360 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Thu, 28 Feb 2013 00:15:15 +0800 Subject: [PATCH 20/39] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E9=A2=9D=E5=A4=96=E6=89=A9=E5=B1=95=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E8=83=BD=E5=8A=9B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Core/Think.class.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Lib/Core/Think.class.php b/Lib/Core/Think.class.php index 4ced81495..8fae472ad 100644 --- a/Lib/Core/Think.class.php +++ b/Lib/Core/Think.class.php @@ -54,9 +54,16 @@ static private function buildApp() { }else{ $mode = array(); } + // 加载核心惯例配置文件 C(include THINK_PATH.'Conf/convention.php'); - if(isset($mode['config'])) {// 加载模式配置文件 + + // 加载扩展配置文件 + if(is_file(EXTEND_PATH . 'Conf/convention.php')) + C(include EXTEND_PATH . 'Conf/convention.php'); + + // 加载模式配置文件 + if(isset($mode['config'])) { C( is_array($mode['config'])?$mode['config']:include $mode['config'] ); } From 9f41089027c9064153b227e40ad6219e103eae81 Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 11:03:13 +0800 Subject: [PATCH 21/39] =?UTF-8?q?=E4=B8=BACommon=E7=9A=84L=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/common.php | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Common/common.php b/Common/common.php index 63a53cfcd..a515100b5 100644 --- a/Common/common.php +++ b/Common/common.php @@ -364,24 +364,36 @@ function R($url,$vars=array(),$layer='') { * @param string $value 语言值 * @return mixed */ -function L($name=null, $value=null) { +function L($name = null, $value = null) { + + // 定义静态数组 static $_lang = array(); + // 空参数返回所有定义 if (empty($name)) return $_lang; + // 判断语言获取(或设置) // 若不存在,直接返回全大写$name if (is_string($name)) { + $name = strtoupper($name); + + // 如果空的则读取 if (is_null($value)) return isset($_lang[$name]) ? $_lang[$name] : $name; - $_lang[$name] = $value; // 语言定义 - return; + + // 定义语言 + $_lang[$name] = $value; + + return $value; } + // 批量定义 if (is_array($name)) $_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER)); - return; + + return $name; } /** From a874ec5b9f890063a7e54ae477aa6d8930dc0659 Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 11:03:54 +0800 Subject: [PATCH 22/39] =?UTF-8?q?=E6=B7=BB=E5=8A=A0CheckLang=E7=9A=84?= =?UTF-8?q?=E8=A1=8C=E4=B8=BA=E7=B1=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Behavior/CheckLangBehavior.class.php | 110 +++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Lib/Behavior/CheckLangBehavior.class.php diff --git a/Lib/Behavior/CheckLangBehavior.class.php b/Lib/Behavior/CheckLangBehavior.class.php new file mode 100644 index 000000000..9f1a09539 --- /dev/null +++ b/Lib/Behavior/CheckLangBehavior.class.php @@ -0,0 +1,110 @@ + +// +---------------------------------------------------------------------- + +defined('THINK_PATH') or exit(); +/** + * 语言检测 并自动加载语言包 + * @category Extend + * @package Extend + * @subpackage Behavior + * @author liu21st + */ +class CheckLangBehavior extends Behavior { + + // 行为参数定义(默认值) 可在项目配置中覆盖 + protected $options = array( + 'LANG_SWITCH_ON' => false, // 默认关闭语言包功能 + 'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效 + 'LANG_LIST' => 'zh-cn', // 允许切换的语言列表 用逗号分隔 + 'VAR_LANGUAGE' => 'l', // 默认语言切换变量 + ); + + // 行为扩展的执行入口必须是run + public function run(&$params){ + + // 开启静态缓存 + $this->checkLanguage(); + } + + /** + * 语言检查 + * 检查浏览器支持语言,并自动加载语言包 + * @access private + * @return void + */ + private function checkLanguage() { + + // 不开启语言包功能,仅仅加载框架语言文件直接返回 + if(!C('LANG_SWITCH_ON')) { + return; + } + + // 默认语言 + $langSet = C('DEFAULT_LANG'); + + // 启用语言包 + // 自动侦查语言 + if(C('LANG_AUTO_DETECT')) { + + // url中设置了语言变量 + if(isset($_GET[C('VAR_LANGUAGE')])){ + + $langSet = $_GET[C('VAR_LANGUAGE')]; + cookie('think_language',$langSet,3600); + + } + + // 获取上次用户的选择 + elseif(cookie('think_language')) { + + $langSet = cookie('think_language'); + + // 自动侦测浏览器语言 + }elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + + preg_match('/^([a-z\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); + $langSet = $matches[1]; + cookie('think_language', $langSet, 3600); + } + + // 非法语言参数,请用默认设置 + if(false === stripos(C('LANG_LIST'),$langSet)) { + + $langSet = C('DEFAULT_LANG'); + } + } + + // 定义当前语言 + define('LANG_SET',strtolower($langSet)); + + // echo LANG_PATH . LANG_SET . '/common.php'; + // 读取项目公共语言包 + if (is_file(LANG_PATH . LANG_SET . '/common.php')) { + + L(include LANG_PATH . LANG_SET . '/common.php'); + } + + $group = ''; + $lang_path = (C('APP_GROUP_MODE') == 1) ? BASE_LIB_PATH . 'Lang/' . LANG_SET . '/' : LANG_PATH . LANG_SET . '/'; + + // 读取当前分组公共语言包 + if (defined('GROUP_NAME')){ + if (is_file($lang_path.GROUP_NAME.'.php')) + L(include $lang_path.GROUP_NAME.'.php'); + + $group = GROUP_NAME . C('TMPL_FILE_DEPR'); + } + + // 读取当前模块语言包 + if (is_file($lang_path . $group . strtolower(MODULE_NAME) . '.php')) + L(include $lang_path . $group . strtolower(MODULE_NAME) . '.php'); + } +} \ No newline at end of file From b8eb6007454fe1bc74bfd5b9dd9c95daaceda884 Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 11:04:13 +0800 Subject: [PATCH 23/39] =?UTF-8?q?=E4=B8=BA=E8=A1=8C=E4=B8=BA=E7=B1=BB?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Core/Behavior.class.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Lib/Core/Behavior.class.php b/Lib/Core/Behavior.class.php index 86354e75c..3f4c12de8 100644 --- a/Lib/Core/Behavior.class.php +++ b/Lib/Core/Behavior.class.php @@ -21,25 +21,30 @@ abstract class Behavior { // 行为参数 和配置参数设置相同 protected $options = array(); - /** + /** * 架构函数 * @access public */ public function __construct() { + if(!empty($this->options)) { - foreach ($this->options as $name=>$val){ - if(NULL !== C($name)) { // 参数已设置 则覆盖行为参数 - $this->options[$name] = C($name); - }else{ // 参数未设置 则传入默认值到配置 + foreach($this->options as $name => $val) { + + // 参数已设置 则覆盖行为参数 + if(NULL !== C($name)) + $this->options[$name] = C($name); + + // 参数未设置 则传入默认值到配置 + else C($name,$val); - } } + array_change_key_case($this->options); } } // 获取行为参数 - public function __get($name){ + public function __get($name) { return $this->options[strtolower($name)]; } @@ -50,5 +55,4 @@ public function __get($name){ * @return void */ abstract public function run(&$params); - } \ No newline at end of file From 6ec65813d0e1ba71ae269da4989bf66698850845 Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 11:04:24 +0800 Subject: [PATCH 24/39] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=89=A7=E8=A1=8CLang?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Conf/tags.php | 1 + 1 file changed, 1 insertion(+) diff --git a/Conf/tags.php b/Conf/tags.php index f9b1c8dd7..e75e0645f 100644 --- a/Conf/tags.php +++ b/Conf/tags.php @@ -15,6 +15,7 @@ ), 'app_begin' => array( 'ReadHtmlCache', // 读取静态缓存 + 'CheckLang' // 读取Lang ), 'route_check' => array( 'CheckRoute', // 路由检测 From 7ecaed374cb32b8f6614b492d3fafe47a22422d2 Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 11:33:07 +0800 Subject: [PATCH 25/39] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/functions.php b/Common/functions.php index a2fbb9fa9..53efd0859 100644 --- a/Common/functions.php +++ b/Common/functions.php @@ -773,6 +773,7 @@ function cookie($name, $value='', $option=null) { * @return void */ function load_ext_file() { + // 加载自定义外部文件 if(C('LOAD_EXT_FILE')) { $files = explode(',',C('LOAD_EXT_FILE')); @@ -785,7 +786,6 @@ function load_ext_file() { // 加载外部拓展函数 if(C('LOAD_EXT_FUNCTION')) { $files = explode(',', C('LOAD_EXT_FUNCTION')); - // array_push($files, 'helper'); foreach ($files as $file) { $file = EXTEND_PATH . '/Function/' . $file . '.php'; if(is_file($file)) include $file; From 50757059a2b755bd723df40c68e49d9518552374 Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 11:33:36 +0800 Subject: [PATCH 26/39] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E4=B8=8D=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Conf/convention.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Conf/convention.php b/Conf/convention.php index f8abd79e2..8d78e49db 100644 --- a/Conf/convention.php +++ b/Conf/convention.php @@ -147,6 +147,6 @@ 'JUMP_SESSION_STATUS' => 'jump_session_status', /* 加载设置 */ - 'LOAD_EXT_FUNCTION' => 'helper,extend' + 'LOAD_EXT_FUNCTION' => '' ); \ No newline at end of file From fd3ca3d6c8a98f16d10b709f9f787fd0708f9c4c Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 11:33:45 +0800 Subject: [PATCH 27/39] =?UTF-8?q?Revert=20"=E9=BB=98=E8=AE=A4=E4=B8=8D?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E3=80=82"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 50757059a2b755bd723df40c68e49d9518552374. --- Conf/convention.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Conf/convention.php b/Conf/convention.php index 8d78e49db..f8abd79e2 100644 --- a/Conf/convention.php +++ b/Conf/convention.php @@ -147,6 +147,6 @@ 'JUMP_SESSION_STATUS' => 'jump_session_status', /* 加载设置 */ - 'LOAD_EXT_FUNCTION' => '' + 'LOAD_EXT_FUNCTION' => 'helper,extend' ); \ No newline at end of file From e63d6ce0a6178dec8a59ff4179558cbb80295b27 Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 11:34:02 +0800 Subject: [PATCH 28/39] =?UTF-8?q?Revert=20"Revert=20"=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E4=B8=8D=E5=8A=A0=E8=BD=BD=E3=80=82""?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit fd3ca3d6c8a98f16d10b709f9f787fd0708f9c4c. --- Conf/convention.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Conf/convention.php b/Conf/convention.php index f8abd79e2..8d78e49db 100644 --- a/Conf/convention.php +++ b/Conf/convention.php @@ -147,6 +147,6 @@ 'JUMP_SESSION_STATUS' => 'jump_session_status', /* 加载设置 */ - 'LOAD_EXT_FUNCTION' => 'helper,extend' + 'LOAD_EXT_FUNCTION' => '' ); \ No newline at end of file From 9a9fdc278dba5da741323f95f8deeabdc478a7ce Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 12:58:13 +0800 Subject: [PATCH 29/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9CheckLang=E7=B1=BB?= =?UTF-8?q?=E5=86=85=E7=9A=84=E9=BB=98=E8=AE=A4=E5=80=BC=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Behavior/CheckLangBehavior.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/Behavior/CheckLangBehavior.class.php b/Lib/Behavior/CheckLangBehavior.class.php index 9f1a09539..6ab6e9277 100644 --- a/Lib/Behavior/CheckLangBehavior.class.php +++ b/Lib/Behavior/CheckLangBehavior.class.php @@ -21,10 +21,10 @@ class CheckLangBehavior extends Behavior { // 行为参数定义(默认值) 可在项目配置中覆盖 protected $options = array( - 'LANG_SWITCH_ON' => false, // 默认关闭语言包功能 - 'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效 - 'LANG_LIST' => 'zh-cn', // 允许切换的语言列表 用逗号分隔 - 'VAR_LANGUAGE' => 'l', // 默认语言切换变量 + 'LANG_SWITCH_ON' => false, // 默认关闭语言包功能 + 'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效 + 'LANG_LIST' => 'zh-cn,en-us', // 允许切换的语言列表 用逗号分隔 + 'VAR_LANGUAGE' => 'lang', // 默认语言切换变量 ); // 行为扩展的执行入口必须是run From 82ac0aba91352c66365b14a56d1a511c6b8b642c Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 12:58:40 +0800 Subject: [PATCH 30/39] =?UTF-8?q?=E7=AE=80=E5=8C=96ParseTemplate=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=E7=B1=BB=EF=BC=8C=E5=88=A0=E9=99=A4ThinkTemplate?= =?UTF-8?q?=E9=83=A8=E5=88=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Behavior/ParseTemplateBehavior.class.php | 134 ++++--------------- 1 file changed, 29 insertions(+), 105 deletions(-) diff --git a/Lib/Behavior/ParseTemplateBehavior.class.php b/Lib/Behavior/ParseTemplateBehavior.class.php index 79fdf42d0..d12931756 100644 --- a/Lib/Behavior/ParseTemplateBehavior.class.php +++ b/Lib/Behavior/ParseTemplateBehavior.class.php @@ -1,121 +1,45 @@ -// +---------------------------------------------------------------------- defined('THINK_PATH') or exit(); /** - * 系统行为扩展:模板解析 - * @category Think - * @package Think + * 系统行为类:模板解析引擎 + * @category Think + * @package Think * @subpackage Behavior - * @author liu21st + * @author minowu */ class ParseTemplateBehavior extends Behavior { - // 行为参数定义(默认值) 可在项目配置中覆盖 - protected $options = array( - // 布局设置 - 'TMPL_ENGINE_TYPE' => 'Think', // 默认模板引擎 以下设置仅对使用Think模板引擎有效 - 'TMPL_CACHFILE_SUFFIX' => '.php', // 默认模板缓存后缀 - 'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函数 - 'TMPL_DENY_PHP' => false, // 默认模板引擎是否禁用PHP原生代码 - 'TMPL_L_DELIM' => '{', // 模板引擎普通标签开始标记 - 'TMPL_R_DELIM' => '}', // 模板引擎普通标签结束标记 - 'TMPL_VAR_IDENTIFY' => 'array', // 模板变量识别。留空自动判断,参数为'obj'则表示对象 - 'TMPL_STRIP_SPACE' => true, // 是否去除模板文件里面的html空格与换行 - 'TMPL_CACHE_ON' => true, // 是否开启模板编译缓存,设为false则每次都会重新编译 - 'TMPL_CACHE_PREFIX' => '', // 模板缓存前缀标识,可以动态改变 - 'TMPL_CACHE_TIME' => 0, // 模板缓存有效期 0 为永久,(以数字为值,单位:秒) - 'TMPL_LAYOUT_ITEM' => '{__CONTENT__}', // 布局模板的内容替换标识 - 'LAYOUT_ON' => false, // 是否启用布局 - 'LAYOUT_NAME' => 'layout', // 当前布局名称 默认为layout - // Think模板引擎标签库相关设定 - 'TAGLIB_BEGIN' => '<', // 标签库标签开始标记 - 'TAGLIB_END' => '>', // 标签库标签结束标记 - 'TAGLIB_LOAD' => true, // 是否使用内置标签库之外的其它标签库,默认自动检测 - 'TAGLIB_BUILD_IN' => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序 - 'TAGLIB_PRE_LOAD' => '', // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔 - ); + protected $options = array( - // 行为扩展的执行入口必须是run - public function run(&$_data){ - $engine = strtolower(C('TMPL_ENGINE_TYPE')); - $_content = empty($_data['content'])?$_data['file']:$_data['content']; - $_data['prefix'] = !empty($_data['prefix'])?$_data['prefix']:C('TMPL_CACHE_PREFIX'); - if('think'==$engine){ // 采用Think模板引擎 - if((!empty($_data['content']) && $this->checkContentCache($_data['content'],$_data['prefix'])) - || $this->checkCache($_data['file'],$_data['prefix'])) { // 缓存有效 - // 分解变量并载入模板缓存 - extract($_data['var'], EXTR_OVERWRITE); - //载入模版缓存文件 - include C('CACHE_PATH').$_data['prefix'].md5($_content).C('TMPL_CACHFILE_SUFFIX'); - }else{ - $tpl = Think::instance('ThinkTemplate'); - // 编译并加载模板文件 - $tpl->fetch($_content,$_data['var'],$_data['prefix']); - } - }else{ - // 调用第三方模板引擎解析和输出 - $class = 'Template'.ucwords($engine); - if(class_exists($class)) { - $tpl = new $class; - $tpl->fetch($_content,$_data['var']); - }else { // 类没有定义 - throw_exception(L('_NOT_SUPPERT_').': ' . $class); - } - } - } + 'TMPL_ENGINE_TYPE' => 'Smarty', // 默认模板引擎,改用Smarty + ); + /** - * 检查缓存文件是否有效 - * 如果无效则需要重新编译 - * @access public - * @param string $tmplTemplateFile 模板文件名 - * @return boolen + * 行为入口 */ - protected function checkCache($tmplTemplateFile,$prefix='') { - if (!C('TMPL_CACHE_ON')) // 优先对配置设定检测 - return false; - $tmplCacheFile = C('CACHE_PATH').$prefix.md5($tmplTemplateFile).C('TMPL_CACHFILE_SUFFIX'); - if(!is_file($tmplCacheFile)){ - return false; - }elseif (filemtime($tmplTemplateFile) > filemtime($tmplCacheFile)) { - // 模板文件如果有更新则缓存需要更新 - return false; - }elseif (C('TMPL_CACHE_TIME') != 0 && time() > filemtime($tmplCacheFile)+C('TMPL_CACHE_TIME')) { - // 缓存是否在有效期 - return false; - } - // 开启布局模板 - if(C('LAYOUT_ON')) { - $layoutFile = THEME_PATH.C('LAYOUT_NAME').C('TMPL_TEMPLATE_SUFFIX'); - if(filemtime($layoutFile) > filemtime($tmplCacheFile)) { - return false; - } + public function run(&$_data){ + + // 配置引擎 + $engine = strtolower(C('TMPL_ENGINE_TYPE')); + $_content = empty($_data['content']) ? $_data['file'] : $_data['content']; + $_data['prefix'] = !empty($_data['prefix']) ? $_data['prefix'] : C('TMPL_CACHE_PREFIX'); + + // 调用第三方模板引擎解析和输出 + $class = 'Template'.ucwords($engine); + + // 加载类 + if(class_exists($class)) { + + $tpl = new $class; + $tpl->fetch($_content, $_data['var']); } - // 缓存有效 - return true; - } - /** - * 检查缓存内容是否有效 - * 如果无效则需要重新编译 - * @access public - * @param string $tmplContent 模板内容 - * @return boolen - */ - protected function checkContentCache($tmplContent,$prefix='') { - if(is_file(C('CACHE_PATH').$prefix.md5($tmplContent).C('TMPL_CACHFILE_SUFFIX'))){ - return true; - }else{ - return false; + // 类没有定义 + else { + + throw_exception(L('_NOT_SUPPERT_').': ' . $class); } - } + } } \ No newline at end of file From e95c36d14e1cf0ee5135a7cf527f797ce4df2614 Mon Sep 17 00:00:00 2001 From: Mino Wu Date: Fri, 1 Mar 2013 12:59:37 +0800 Subject: [PATCH 31/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=EF=BC=8C=E5=B0=86URL=5FCAS?= =?UTF-8?q?E=5FINSENSITIVE=E8=AF=A5=E4=B8=BAfalse=EF=BC=8C=E5=B0=86URL=5FM?= =?UTF-8?q?ODEL=E6=94=B9=E4=B8=BA2=EF=BC=8CREWRITE=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Conf/convention.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Conf/convention.php b/Conf/convention.php index 8d78e49db..bb58ba07c 100644 --- a/Conf/convention.php +++ b/Conf/convention.php @@ -117,8 +117,8 @@ 'TMPL_FILE_DEPR' => '/', //模板文件MODULE_NAME与ACTION_NAME之间的分割符 /* URL设置 */ - 'URL_CASE_INSENSITIVE' => false, // 默认false 表示URL区分大小写 true则表示不区分大小写 - 'URL_MODEL' => 1, // URL访问模式,可选参数0、1、2、3,代表以下四种模式: + 'URL_CASE_INSENSITIVE' => true, // 默认false 表示URL区分大小写 true则表示不区分大小写 + 'URL_MODEL' => 2, // URL访问模式,可选参数0、1、2、3,代表以下四种模式: // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 默认为PATHINFO 模式,提供最好的用户体验和SEO支持 'URL_PATHINFO_DEPR' => '/', // PATHINFO模式下,各参数之间的分割符号 'URL_PATHINFO_FETCH' => 'ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL', // 用于兼容判断PATH_INFO 参数的SERVER替代变量列表 @@ -147,6 +147,10 @@ 'JUMP_SESSION_STATUS' => 'jump_session_status', /* 加载设置 */ - 'LOAD_EXT_FUNCTION' => '' + 'LOAD_EXT_FUNCTION' => '', // 加载扩展函数 + + /* 跳转模式 */ + 'JUMP_MODE' => 1, // 跳转模式 + 'JUMP_SESSION' => true // 是否开启跳转时的session记录 ); \ No newline at end of file From b96ad873bcf61d01b6daceb18209553e55256a3f Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sat, 2 Mar 2013 03:53:15 +0800 Subject: [PATCH 32/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9README=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 455ce6462..59c1afe96 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,6 @@ Thanks for thinkphp -##安装和使用## +##不同于Thinkphp的地方## -待... - -##修改计划## - -* 修改默认配置,默认开启语言系统,分组模式。 -* 废弃区分分组模式和非分组模式的代码,统一存在分组模式。 -* 彻底废弃ThinkTemplate模板引擎,改用Smarty模板引擎,删除冗余代码。 -* 重新定义Model和Action的读取文件夹,改Action类文件为Controller类。 \ No newline at end of file +待... \ No newline at end of file From 34d66a1e6dc2878bae3cd26ba070c3adf7abaa2f Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sat, 2 Mar 2013 18:04:54 +0800 Subject: [PATCH 33/39] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8A=9B=E5=87=BA?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=A1=B5=E9=9D=A2=E7=9A=84=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tpl/think_exception.tpl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Tpl/think_exception.tpl b/Tpl/think_exception.tpl index 84b27e977..3ede528b2 100644 --- a/Tpl/think_exception.tpl +++ b/Tpl/think_exception.tpl @@ -8,7 +8,7 @@ html{ overflow-y: scroll; } body{ background: #fff; font-family: '微软雅黑'; color: #333; font-size: 16px; } img{ border: 0; } .error{ padding: 24px 48px; } -.face{ font-size: 100px; font-weight: normal; line-height: 120px; margin-bottom: 12px; } +.face{ font-size: 60px; font-weight: normal; line-height: 120px; margin-bottom: 12px; } h1{ font-size: 32px; line-height: 48px; } .error .content{ padding-top: 10px} .error .info{ margin-bottom: 12px; } @@ -21,7 +21,7 @@ h1{ font-size: 32px; line-height: 48px; }
-

:(

+

App error

@@ -47,7 +47,6 @@ h1{ font-size: 32px; line-height: 48px; }
\ No newline at end of file From 7414a72342220428b1c3da14464a69965592338b Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sat, 2 Mar 2013 18:07:24 +0800 Subject: [PATCH 34/39] =?UTF-8?q?=E5=88=A0=E9=99=A4ThinkTemplate=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=96=87=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Template/TagLib.class.php | 231 --------- Lib/Template/ThinkTemplate.class.php | 690 --------------------------- 2 files changed, 921 deletions(-) delete mode 100644 Lib/Template/TagLib.class.php delete mode 100644 Lib/Template/ThinkTemplate.class.php diff --git a/Lib/Template/TagLib.class.php b/Lib/Template/TagLib.class.php deleted file mode 100644 index ea3993c4d..000000000 --- a/Lib/Template/TagLib.class.php +++ /dev/null @@ -1,231 +0,0 @@ - -// +---------------------------------------------------------------------- - -/** - * ThinkPHP标签库TagLib解析基类 - * @category Think - * @package Think - * @subpackage Template - * @author liu21st - */ -class TagLib { - - /** - * 标签库定义XML文件 - * @var string - * @access protected - */ - protected $xml = ''; - protected $tags = array();// 标签定义 - /** - * 标签库名称 - * @var string - * @access protected - */ - protected $tagLib =''; - - /** - * 标签库标签列表 - * @var string - * @access protected - */ - protected $tagList = array(); - - /** - * 标签库分析数组 - * @var string - * @access protected - */ - protected $parse = array(); - - /** - * 标签库是否有效 - * @var string - * @access protected - */ - protected $valid = false; - - /** - * 当前模板对象 - * @var object - * @access protected - */ - protected $tpl; - - protected $comparison = array(' nheq '=>' !== ',' heq '=>' === ',' neq '=>' != ',' eq '=>' == ',' egt '=>' >= ',' gt '=>' > ',' elt '=>' <= ',' lt '=>' < '); - - /** - * 架构函数 - * @access public - */ - public function __construct() { - $this->tagLib = strtolower(substr(get_class($this),6)); - $this->tpl = Think::instance('ThinkTemplate'); - } - - /** - * TagLib标签属性分析 返回标签属性数组 - * @access public - * @param string $tagStr 标签内容 - * @return array - */ - public function parseXmlAttr($attr,$tag) { - //XML解析安全过滤 - $attr = str_replace('&','___', $attr); - $xml = ''; - $xml = simplexml_load_string($xml); - if(!$xml) { - throw_exception(L('_XML_TAG_ERROR_').' : '.$attr); - } - $xml = (array)($xml->tag->attributes()); - $array = array_change_key_case($xml['@attributes']); - if($array) { - $attrs = explode(',',$this->tags[strtolower($tag)]['attr']); - if(isset($this->tags[strtolower($tag)]['must'])){ - $must = explode(',',$this->tags[strtolower($tag)]['must']); - }else{ - $must = array(); - } - foreach($attrs as $name) { - if( isset($array[$name])) { - $array[$name] = str_replace('___','&',$array[$name]); - }elseif(false !== array_search($name,$must)){ - throw_exception(L('_PARAM_ERROR_').':'.$name); - } - } - return $array; - } - } - - /** - * 解析条件表达式 - * @access public - * @param string $condition 表达式标签内容 - * @return array - */ - public function parseCondition($condition) { - $condition = str_ireplace(array_keys($this->comparison),array_values($this->comparison),$condition); - $condition = preg_replace('/\$(\w+):(\w+)\s/is','$\\1->\\2 ',$condition); - switch(strtolower(C('TMPL_VAR_IDENTIFY'))) { - case 'array': // 识别为数组 - $condition = preg_replace('/\$(\w+)\.(\w+)\s/is','$\\1["\\2"] ',$condition); - break; - case 'obj': // 识别为对象 - $condition = preg_replace('/\$(\w+)\.(\w+)\s/is','$\\1->\\2 ',$condition); - break; - default: // 自动判断数组或对象 只支持二维 - $condition = preg_replace('/\$(\w+)\.(\w+)\s/is','(is_array($\\1)?$\\1["\\2"]:$\\1->\\2) ',$condition); - } - if(false !== strpos($condition, '$Think')) - $condition = preg_replace('/(\$Think.*?)\s/ies',"\$this->parseThinkVar('\\1');" , $condition); - return $condition; - } - - /** - * 自动识别构建变量 - * @access public - * @param string $name 变量描述 - * @return string - */ - public function autoBuildVar($name) { - if('Think.' == substr($name,0,6)){ - // 特殊变量 - return $this->parseThinkVar($name); - }elseif(strpos($name,'.')) { - $vars = explode('.',$name); - $var = array_shift($vars); - switch(strtolower(C('TMPL_VAR_IDENTIFY'))) { - case 'array': // 识别为数组 - $name = '$'.$var; - foreach ($vars as $key=>$val){ - if(0===strpos($val,'$')) { - $name .= '["{'.$val.'}"]'; - }else{ - $name .= '["'.$val.'"]'; - } - } - break; - case 'obj': // 识别为对象 - $name = '$'.$var; - foreach ($vars as $key=>$val) - $name .= '->'.$val; - break; - default: // 自动判断数组或对象 只支持二维 - $name = 'is_array($'.$var.')?$'.$var.'["'.$vars[0].'"]:$'.$var.'->'.$vars[0]; - } - }elseif(strpos($name,':')){ - // 额外的对象方式支持 - $name = '$'.str_replace(':','->',$name); - }elseif(!defined($name)) { - $name = '$'.$name; - } - return $name; - } - - /** - * 用于标签属性里面的特殊模板变量解析 - * 格式 以 Think. 打头的变量属于特殊模板变量 - * @access public - * @param string $varStr 变量字符串 - * @return string - */ - public function parseThinkVar($varStr){ - $vars = explode('.',$varStr); - $vars[1] = strtoupper(trim($vars[1])); - $parseStr = ''; - if(count($vars)>=3){ - $vars[2] = trim($vars[2]); - switch($vars[1]){ - case 'SERVER': $parseStr = '$_SERVER[\''.$vars[2].'\']';break; - case 'GET': $parseStr = '$_GET[\''.$vars[2].'\']';break; - case 'POST': $parseStr = '$_POST[\''.$vars[2].'\']';break; - case 'COOKIE': - if(isset($vars[3])) { - $parseStr = '$_COOKIE[\''.$vars[2].'\'][\''.$vars[3].'\']'; - }elseif(C('COOKIE_PREFIX')){ - $parseStr = '$_COOKIE[\''.C('COOKIE_PREFIX').$vars[2].'\']'; - }else{ - $parseStr = '$_COOKIE[\''.$vars[2].'\']'; - } - break; - case 'SESSION': - if(isset($vars[3])) { - $parseStr = '$_SESSION[\''.$vars[2].'\'][\''.$vars[3].'\']'; - }elseif(C('SESSION_PREFIX')){ - $parseStr = '$_SESSION[\''.C('SESSION_PREFIX').'\'][\''.$vars[2].'\']'; - }else{ - $parseStr = '$_SESSION[\''.$vars[2].'\']'; - } - break; - case 'ENV': $parseStr = '$_ENV[\''.$vars[2].'\']';break; - case 'REQUEST': $parseStr = '$_REQUEST[\''.$vars[2].'\']';break; - case 'CONST': $parseStr = strtoupper($vars[2]);break; - case 'LANG': $parseStr = 'L("'.$vars[2].'")';break; - case 'CONFIG': $parseStr = 'C("'.$vars[2].'")';break; - } - }else if(count($vars)==2){ - switch($vars[1]){ - case 'NOW': $parseStr = "date('Y-m-d g:i a',time())";break; - case 'VERSION': $parseStr = 'THINK_VERSION';break; - case 'TEMPLATE':$parseStr = 'C("TEMPLATE_NAME")';break; - case 'LDELIM': $parseStr = 'C("TMPL_L_DELIM")';break; - case 'RDELIM': $parseStr = 'C("TMPL_R_DELIM")';break; - default: if(defined($vars[1])) $parseStr = $vars[1]; - } - } - return $parseStr; - } - - // 获取标签定义 - public function getTags(){ - return $this->tags; - } -} \ No newline at end of file diff --git a/Lib/Template/ThinkTemplate.class.php b/Lib/Template/ThinkTemplate.class.php deleted file mode 100644 index 397d0c32a..000000000 --- a/Lib/Template/ThinkTemplate.class.php +++ /dev/null @@ -1,690 +0,0 @@ - -// +---------------------------------------------------------------------- - -/** - * ThinkPHP内置模板引擎类 - * 支持XML标签和普通标签的模板解析 - * 编译型模板引擎 支持动态缓存 - * @category Think - * @package Think - * @subpackage Template - * @author liu21st - */ -class ThinkTemplate { - - // 模板页面中引入的标签库列表 - protected $tagLib = array(); - // 当前模板文件 - protected $templateFile = ''; - // 模板变量 - public $tVar = array(); - public $config = array(); - private $literal = array(); - private $block = array(); - - /** - * 架构函数 - * @access public - */ - public function __construct(){ - $this->config['cache_path'] = C('CACHE_PATH'); - $this->config['template_suffix'] = C('TMPL_TEMPLATE_SUFFIX'); - $this->config['cache_suffix'] = C('TMPL_CACHFILE_SUFFIX'); - $this->config['tmpl_cache'] = C('TMPL_CACHE_ON'); - $this->config['cache_time'] = C('TMPL_CACHE_TIME'); - $this->config['taglib_begin'] = $this->stripPreg(C('TAGLIB_BEGIN')); - $this->config['taglib_end'] = $this->stripPreg(C('TAGLIB_END')); - $this->config['tmpl_begin'] = $this->stripPreg(C('TMPL_L_DELIM')); - $this->config['tmpl_end'] = $this->stripPreg(C('TMPL_R_DELIM')); - $this->config['default_tmpl'] = C('TEMPLATE_NAME'); - $this->config['layout_item'] = C('TMPL_LAYOUT_ITEM'); - } - - private function stripPreg($str) { - return str_replace( - array('{','}','(',')','|','[',']','-','+','*','.','^','?'), - array('\{','\}','\(','\)','\|','\[','\]','\-','\+','\*','\.','\^','\?'), - $str); - } - - // 模板变量获取和设置 - public function get($name) { - if(isset($this->tVar[$name])) - return $this->tVar[$name]; - else - return false; - } - - public function set($name,$value) { - $this->tVar[$name]= $value; - } - - /** - * 加载模板 - * @access public - * @param string $tmplTemplateFile 模板文件 - * @param array $templateVar 模板变量 - * @param string $prefix 模板标识前缀 - * @return void - */ - public function fetch($templateFile,$templateVar,$prefix='') { - $this->tVar = $templateVar; - $templateCacheFile = $this->loadTemplate($templateFile,$prefix); - // 模板阵列变量分解成为独立变量 - extract($templateVar, EXTR_OVERWRITE); - //载入模版缓存文件 - include $templateCacheFile; - } - - /** - * 加载主模板并缓存 - * @access public - * @param string $tmplTemplateFile 模板文件 - * @param string $prefix 模板标识前缀 - * @return string - * @throws ThinkExecption - */ - public function loadTemplate ($tmplTemplateFile,$prefix='') { - if(is_file($tmplTemplateFile)) { - $this->templateFile = $tmplTemplateFile; - // 读取模板文件内容 - $tmplContent = file_get_contents($tmplTemplateFile); - }else{ - $tmplContent = $tmplTemplateFile; - } - // 根据模版文件名定位缓存文件 - $tmplCacheFile = $this->config['cache_path'].$prefix.md5($tmplTemplateFile).$this->config['cache_suffix']; - - // 判断是否启用布局 - if(C('LAYOUT_ON')) { - if(false !== strpos($tmplContent,'{__NOLAYOUT__}')) { // 可以单独定义不使用布局 - $tmplContent = str_replace('{__NOLAYOUT__}','',$tmplContent); - }else{ // 替换布局的主体内容 - $layoutFile = THEME_PATH.C('LAYOUT_NAME').$this->config['template_suffix']; - $tmplContent = str_replace($this->config['layout_item'],$tmplContent,file_get_contents($layoutFile)); - } - } - // 编译模板内容 - $tmplContent = $this->compiler($tmplContent); - // 检测模板目录 - $dir = dirname($tmplCacheFile); - if(!is_dir($dir)) - mkdir($dir,0755,true); - //重写Cache文件 - if( false === file_put_contents($tmplCacheFile,trim($tmplContent))) - throw_exception(L('_CACHE_WRITE_ERROR_').':'.$tmplCacheFile); - return $tmplCacheFile; - } - - /** - * 编译模板文件内容 - * @access protected - * @param mixed $tmplContent 模板内容 - * @return string - */ - protected function compiler($tmplContent) { - //模板解析 - $tmplContent = $this->parse($tmplContent); - // 还原被替换的Literal标签 - $tmplContent = preg_replace('//eis',"\$this->restoreLiteral('\\1')",$tmplContent); - // 添加安全代码 - $tmplContent = ''.$tmplContent; - if(C('TMPL_STRIP_SPACE')) { - /* 去除html空格与换行 */ - $find = array('~>\s+<~','~>(\s+\n|\r)~'); - $replace = array('><','>'); - $tmplContent = preg_replace($find, $replace, $tmplContent); - } - // 优化生成的php代码 - $tmplContent = str_replace('?>config['taglib_begin']; - $end = $this->config['taglib_end']; - // 检查include语法 - $content = $this->parseInclude($content); - // 检查PHP语法 - $content = $this->parsePhp($content); - // 首先替换literal标签内容 - $content = preg_replace('/'.$begin.'literal'.$end.'(.*?)'.$begin.'\/literal'.$end.'/eis',"\$this->parseLiteral('\\1')",$content); - - // 获取需要引入的标签库列表 - // 标签库只需要定义一次,允许引入多个一次 - // 一般放在文件的最前面 - // 格式: - // 当TAGLIB_LOAD配置为true时才会进行检测 - if(C('TAGLIB_LOAD')) { - $this->getIncludeTagLib($content); - if(!empty($this->tagLib)) { - // 对导入的TagLib进行解析 - foreach($this->tagLib as $tagLibName) { - $this->parseTagLib($tagLibName,$content); - } - } - } - // 预先加载的标签库 无需在每个模板中使用taglib标签加载 但必须使用标签库XML前缀 - if(C('TAGLIB_PRE_LOAD')) { - $tagLibs = explode(',',C('TAGLIB_PRE_LOAD')); - foreach ($tagLibs as $tag){ - $this->parseTagLib($tag,$content); - } - } - // 内置标签库 无需使用taglib标签导入就可以使用 并且不需使用标签库XML前缀 - $tagLibs = explode(',',C('TAGLIB_BUILD_IN')); - foreach ($tagLibs as $tag){ - $this->parseTagLib($tag,$content,true); - } - //解析普通模板标签 {tagName} - $content = preg_replace('/('.$this->config['tmpl_begin'].')([^\d\s'.$this->config['tmpl_begin'].$this->config['tmpl_end'].'].+?)('.$this->config['tmpl_end'].')/eis',"\$this->parseTag('\\2')",$content); - return $content; - } - - // 检查PHP语法 - protected function parsePhp($content) { - if(ini_get('short_open_tag')){ - // 开启短标签的情况要将'."\n", $content ); - } - // PHP语法检查 - if(C('TMPL_DENY_PHP') && false !== strpos($content,'config['taglib_begin'].'layout\s(.+?)\s*?\/'.$this->config['taglib_end'].'/is',$content,$matches); - if($find) { - //替换Layout标签 - $content = str_replace($matches[0],'',$content); - //解析Layout标签 - $array = $this->parseXmlAttrs($matches[1]); - if(!C('LAYOUT_ON') || C('LAYOUT_NAME') !=$array['name'] ) { - // 读取布局模板 - $layoutFile = THEME_PATH.$array['name'].$this->config['template_suffix']; - $replace = isset($array['replace'])?$array['replace']:$this->config['layout_item']; - // 替换布局的主体内容 - $content = str_replace($replace,$content,file_get_contents($layoutFile)); - } - }else{ - $content = str_replace('{__NOLAYOUT__}','',$content); - } - return $content; - } - - // 解析模板中的include标签 - protected function parseInclude($content) { - // 解析继承 - $content = $this->parseExtend($content); - // 解析布局 - $content = $this->parseLayout($content); - // 读取模板中的include标签 - $find = preg_match_all('/'.$this->config['taglib_begin'].'include\s(.+?)\s*?\/'.$this->config['taglib_end'].'/is',$content,$matches); - if($find) { - for($i=0;$i<$find;$i++) { - $include = $matches[1][$i]; - $array = $this->parseXmlAttrs($include); - $file = $array['file']; - unset($array['file']); - $content = str_replace($matches[0][$i],$this->parseIncludeItem($file,$array),$content); - } - } - return $content; - } - - // 解析模板中的extend标签 - protected function parseExtend($content) { - $begin = $this->config['taglib_begin']; - $end = $this->config['taglib_end']; - // 读取模板中的继承标签 - $find = preg_match('/'.$begin.'extend\s(.+?)\s*?\/'.$end.'/is',$content,$matches); - if($find) { - //替换extend标签 - $content = str_replace($matches[0],'',$content); - // 记录页面中的block标签 - preg_replace('/'.$begin.'block\sname=(.+?)\s*?'.$end.'(.*?)'.$begin.'\/block'.$end.'/eis',"\$this->parseBlock('\\1','\\2')",$content); - // 读取继承模板 - $array = $this->parseXmlAttrs($matches[1]); - $content = $this->parseTemplateName($array['name']); - // 替换block标签 - $content = preg_replace('/'.$begin.'block\sname=(.+?)\s*?'.$end.'(.*?)'.$begin.'\/block'.$end.'/eis',"\$this->replaceBlock('\\1','\\2')",$content); - }else{ - $content = preg_replace('/'.$begin.'block\sname=(.+?)\s*?'.$end.'(.*?)'.$begin.'\/block'.$end.'/eis',"stripslashes('\\2')",$content); - } - return $content; - } - - /** - * 分析XML属性 - * @access private - * @param string $attrs XML属性字符串 - * @return array - */ - private function parseXmlAttrs($attrs) { - $xml = ''; - $xml = simplexml_load_string($xml); - if(!$xml) - throw_exception(L('_XML_TAG_ERROR_')); - $xml = (array)($xml->tag->attributes()); - $array = array_change_key_case($xml['@attributes']); - return $array; - } - - /** - * 替换页面中的literal标签 - * @access private - * @param string $content 模板内容 - * @return string|false - */ - private function parseLiteral($content) { - if(trim($content)=='') return ''; - $content = stripslashes($content); - $i = count($this->literal); - $parseStr = ""; - $this->literal[$i] = $content; - return $parseStr; - } - - /** - * 还原被替换的literal标签 - * @access private - * @param string $tag literal标签序号 - * @return string|false - */ - private function restoreLiteral($tag) { - // 还原literal标签 - $parseStr = $this->literal[$tag]; - // 销毁literal记录 - unset($this->literal[$tag]); - return $parseStr; - } - - /** - * 记录当前页面中的block标签 - * @access private - * @param string $name block名称 - * @param string $content 模板内容 - * @return string - */ - private function parseBlock($name,$content) { - $this->block[$name] = $content; - return ''; - } - - /** - * 替换继承模板中的block标签 - * @access private - * @param string $name block名称 - * @param string $content 模板内容 - * @return string - */ - private function replaceBlock($name,$content) { - // 替换block标签 没有重新定义则使用原来的 - $replace = isset($this->block[$name])? $this->block[$name] : $content; - return stripslashes($replace); - } - - /** - * 搜索模板页面中包含的TagLib库 - * 并返回列表 - * @access public - * @param string $content 模板内容 - * @return string|false - */ - public function getIncludeTagLib(& $content) { - //搜索是否有TagLib标签 - $find = preg_match('/'.$this->config['taglib_begin'].'taglib\s(.+?)(\s*?)\/'.$this->config['taglib_end'].'\W/is',$content,$matches); - if($find) { - //替换TagLib标签 - $content = str_replace($matches[0],'',$content); - //解析TagLib标签 - $array = $this->parseXmlAttrs($matches[1]); - $this->tagLib = explode(',',$array['name']); - } - return; - } - - /** - * TagLib库解析 - * @access public - * @param string $tagLib 要解析的标签库 - * @param string $content 要解析的模板内容 - * @param boolen $hide 是否隐藏标签库前缀 - * @return string - */ - public function parseTagLib($tagLib,&$content,$hide=false) { - $begin = $this->config['taglib_begin']; - $end = $this->config['taglib_end']; - $className = 'TagLib'.ucwords($tagLib); - $tLib = Think::instance($className); - foreach ($tLib->getTags() as $name=>$val){ - $tags = array($name); - if(isset($val['alias'])) {// 别名设置 - $tags = explode(',',$val['alias']); - $tags[] = $name; - } - $level = isset($val['level'])?$val['level']:1; - $closeTag = isset($val['close'])?$val['close']:true; - foreach ($tags as $tag){ - $parseTag = !$hide? $tagLib.':'.$tag: $tag;// 实际要解析的标签名称 - if(!method_exists($tLib,'_'.$tag)) { - // 别名可以无需定义解析方法 - $tag = $name; - } - $n1 = empty($val['attr'])?'(\s*?)':'\s([^'.$end.']*)'; - if (!$closeTag){ - $patterns = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/eis'; - $replacement = "\$this->parseXmlTag('$tagLib','$tag','$1','')"; - $content = preg_replace($patterns, $replacement,$content); - }else{ - $patterns = '/'.$begin.$parseTag.$n1.$end.'(.*?)'.$begin.'\/'.$parseTag.'(\s*?)'.$end.'/eis'; - $replacement = "\$this->parseXmlTag('$tagLib','$tag','$1','$2')"; - for($i=0;$i<$level;$i++) - $content=preg_replace($patterns,$replacement,$content); - } - } - } - } - - /** - * 解析标签库的标签 - * 需要调用对应的标签库文件解析类 - * @access public - * @param string $tagLib 标签库名称 - * @param string $tag 标签名 - * @param string $attr 标签属性 - * @param string $content 标签内容 - * @return string|false - */ - public function parseXmlTag($tagLib,$tag,$attr,$content) { - //if (MAGIC_QUOTES_GPC) { - $attr = stripslashes($attr); - $content= stripslashes($content); - //} - if(ini_get('magic_quotes_sybase')) - $attr = str_replace('\"','\'',$attr); - $tLib = Think::instance('TagLib'.ucwords(strtolower($tagLib))); - $parse = '_'.$tag; - $content = trim($content); - return $tLib->$parse($attr,$content); - } - - /** - * 模板标签解析 - * 格式: {TagName:args [|content] } - * @access public - * @param string $tagStr 标签内容 - * @return string - */ - public function parseTag($tagStr){ - //if (MAGIC_QUOTES_GPC) { - $tagStr = stripslashes($tagStr); - //} - //还原非模板标签 - if(preg_match('/^[\s|\d]/is',$tagStr)) - //过滤空格和数字打头的标签 - return C('TMPL_L_DELIM') . $tagStr .C('TMPL_R_DELIM'); - $flag = substr($tagStr,0,1); - $flag2 = substr($tagStr,1,1); - $name = substr($tagStr,1); - if('$' == $flag && '.' != $flag2 && '(' != $flag2){ //解析模板变量 格式 {$varName} - return $this->parseVar($name); - }elseif('-' == $flag || '+'== $flag){ // 输出计算 - return ''; - }elseif(':' == $flag){ // 输出某个函数的结果 - return ''; - }elseif('~' == $flag){ // 执行某个函数 - return ''; - }elseif(substr($tagStr,0,2)=='//' || (substr($tagStr,0,2)=='/*' && substr($tagStr,-2)=='*/')){ - //注释标签 - return ''; - } - // 未识别的标签直接返回 - return C('TMPL_L_DELIM') . $tagStr .C('TMPL_R_DELIM'); - } - - /** - * 模板变量解析,支持使用函数 - * 格式: {$varname|function1|function2=arg1,arg2} - * @access public - * @param string $varStr 变量数据 - * @return string - */ - public function parseVar($varStr){ - $varStr = trim($varStr); - static $_varParseList = array(); - //如果已经解析过该变量字串,则直接返回变量值 - if(isset($_varParseList[$varStr])) return $_varParseList[$varStr]; - $parseStr = ''; - $varExists = true; - if(!empty($varStr)){ - $varArray = explode('|',$varStr); - //取得变量名称 - $var = array_shift($varArray); - if('Think.' == substr($var,0,6)){ - // 所有以Think.打头的以特殊变量对待 无需模板赋值就可以输出 - $name = $this->parseThinkVar($var); - }elseif( false !== strpos($var,'.')) { - //支持 {$var.property} - $vars = explode('.',$var); - $var = array_shift($vars); - switch(strtolower(C('TMPL_VAR_IDENTIFY'))) { - case 'array': // 识别为数组 - $name = '$'.$var; - foreach ($vars as $key=>$val) - $name .= '["'.$val.'"]'; - break; - case 'obj': // 识别为对象 - $name = '$'.$var; - foreach ($vars as $key=>$val) - $name .= '->'.$val; - break; - default: // 自动判断数组或对象 只支持二维 - $name = 'is_array($'.$var.')?$'.$var.'["'.$vars[0].'"]:$'.$var.'->'.$vars[0]; - } - }elseif(false !== strpos($var,'[')) { - //支持 {$var['key']} 方式输出数组 - $name = "$".$var; - preg_match('/(.+?)\[(.+?)\]/is',$var,$match); - $var = $match[1]; - }elseif(false !==strpos($var,':') && false ===strpos($var,'::') && false ===strpos($var,'?')){ - //支持 {$var:property} 方式输出对象的属性 - $vars = explode(':',$var); - $var = str_replace(':','->',$var); - $name = "$".$var; - $var = $vars[0]; - }else { - $name = "$$var"; - } - //对变量使用函数 - if(count($varArray)>0) - $name = $this->parseVarFunction($name,$varArray); - $parseStr = ''; - } - $_varParseList[$varStr] = $parseStr; - return $parseStr; - } - - /** - * 对模板变量使用函数 - * 格式 {$varname|function1|function2=arg1,arg2} - * @access public - * @param string $name 变量名 - * @param array $varArray 函数列表 - * @return string - */ - public function parseVarFunction($name,$varArray){ - //对变量使用函数 - $length = count($varArray); - //取得模板禁止使用函数列表 - $template_deny_funs = explode(',',C('TMPL_DENY_FUNC_LIST')); - for($i=0;$i<$length ;$i++ ){ - $args = explode('=',$varArray[$i],2); - //模板函数过滤 - $fun = strtolower(trim($args[0])); - switch($fun) { - case 'default': // 特殊模板函数 - $name = '('.$name.')?('.$name.'):'.$args[1]; - break; - default: // 通用模板函数 - if(!in_array($fun,$template_deny_funs)){ - if(isset($args[1])){ - if(strstr($args[1],'###')){ - $args[1] = str_replace('###',$name,$args[1]); - $name = "$fun($args[1])"; - }else{ - $name = "$fun($name,$args[1])"; - } - }else if(!empty($args[0])){ - $name = "$fun($name)"; - } - } - } - } - return $name; - } - - /** - * 特殊模板变量解析 - * 格式 以 $Think. 打头的变量属于特殊模板变量 - * @access public - * @param string $varStr 变量字符串 - * @return string - */ - public function parseThinkVar($varStr){ - $vars = explode('.',$varStr); - $vars[1] = strtoupper(trim($vars[1])); - $parseStr = ''; - if(count($vars)>=3){ - $vars[2] = trim($vars[2]); - switch($vars[1]){ - case 'SERVER': - $parseStr = '$_SERVER[\''.strtoupper($vars[2]).'\']';break; - case 'GET': - $parseStr = '$_GET[\''.$vars[2].'\']';break; - case 'POST': - $parseStr = '$_POST[\''.$vars[2].'\']';break; - case 'COOKIE': - if(isset($vars[3])) { - $parseStr = '$_COOKIE[\''.$vars[2].'\'][\''.$vars[3].'\']'; - }else{ - $parseStr = 'cookie(\''.$vars[2].'\')'; - } - break; - case 'SESSION': - if(isset($vars[3])) { - $parseStr = '$_SESSION[\''.$vars[2].'\'][\''.$vars[3].'\']'; - }else{ - $parseStr = 'session(\''.$vars[2].'\')'; - } - break; - case 'ENV': - $parseStr = '$_ENV[\''.strtoupper($vars[2]).'\']';break; - case 'REQUEST': - $parseStr = '$_REQUEST[\''.$vars[2].'\']';break; - case 'CONST': - $parseStr = strtoupper($vars[2]);break; - case 'LANG': - $parseStr = 'L("'.$vars[2].'")';break; - case 'CONFIG': - if(isset($vars[3])) { - $vars[2] .= '.'.$vars[3]; - } - $parseStr = 'C("'.$vars[2].'")';break; - default:break; - } - }else if(count($vars)==2){ - switch($vars[1]){ - case 'NOW': - $parseStr = "date('Y-m-d g:i a',time())"; - break; - case 'VERSION': - $parseStr = 'THINK_VERSION'; - break; - case 'TEMPLATE': - $parseStr = "'".$this->templateFile."'";//'C("TEMPLATE_NAME")'; - break; - case 'LDELIM': - $parseStr = 'C("TMPL_L_DELIM")'; - break; - case 'RDELIM': - $parseStr = 'C("TMPL_R_DELIM")'; - break; - default: - if(defined($vars[1])) - $parseStr = $vars[1]; - } - } - return $parseStr; - } - - /** - * 加载公共模板并缓存 和当前模板在同一路径,否则使用相对路径 - * @access private - * @param string $tmplPublicName 公共模板文件名 - * @param array $vars 要传递的变量列表 - * @return string - */ - private function parseIncludeItem($tmplPublicName,$vars=array()){ - // 分析模板文件名并读取内容 - $parseStr = $this->parseTemplateName($tmplPublicName); - // 替换变量 - foreach ($vars as $key=>$val) { - $parseStr = str_replace('['.$key.']',$val,$parseStr); - } - // 再次对包含文件进行模板分析 - return $this->parseInclude($parseStr); - } - - /** - * 分析加载的模板文件并读取内容 支持多个模板文件读取 - * @access private - * @param string $tmplPublicName 模板文件名 - * @return string - */ - private function parseTemplateName($templateName){ - if(substr($templateName,0,1)=='$') - //支持加载变量文件名 - $templateName = $this->get(substr($templateName,1)); - $array = explode(',',$templateName); - $parseStr = ''; - foreach ($array as $templateName){ - if(false === strpos($templateName,$this->config['template_suffix'])) { - // 解析规则为 模板主题:模块:操作 不支持 跨项目和跨分组调用 - $path = explode(':',$templateName); - $action = array_pop($path); - $module = !empty($path)?array_pop($path):MODULE_NAME; - if(!empty($path) && THEME_NAME) {// 设置模板主题 - $path = dirname(THEME_PATH).'/'.array_pop($path).'/'; - }else{ - $path = THEME_PATH; - } - $templateName = $path.$module.C('TMPL_FILE_DEPR').$action.$this->config['template_suffix']; - } - // 获取模板文件内容 - $parseStr .= file_get_contents($templateName); - } - return $parseStr; - } -} \ No newline at end of file From 4b3b70b833d6a3c0a117809ae412d89d6e1fc68c Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sat, 2 Mar 2013 18:08:23 +0800 Subject: [PATCH 35/39] =?UTF-8?q?=E5=88=A0=E9=99=A4alias=E9=87=8C=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E5=86=85=E5=AE=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Conf/alias.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Conf/alias.php b/Conf/alias.php index 466b34fdb..6544af054 100644 --- a/Conf/alias.php +++ b/Conf/alias.php @@ -15,8 +15,9 @@ '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', + // TODO: 删除ThinkTemplate相关内容 + // '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', From 4fccc248b28f8a52c71cb7d5b20841528e4caad2 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Mon, 11 Mar 2013 17:22:33 +0800 Subject: [PATCH 36/39] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=9A=84=E5=86=85=E5=AE=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/functions.php | 53 +++++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/Common/functions.php b/Common/functions.php index 53efd0859..91607ba4a 100644 --- a/Common/functions.php +++ b/Common/functions.php @@ -372,28 +372,51 @@ function redirect($url, $time=0, $msg='') { * @param mixed $options 缓存参数 * @return mixed */ -function S($name,$value='',$options=null) { - static $cache = ''; - if(is_array($options)){ - // 缓存操作的同时初始化 - $type = isset($options['type'])?$options['type']:''; - $cache = Cache::getInstance($type,$options); - }elseif(is_array($name)) { // 缓存初始化 - $type = isset($name['type'])?$name['type']:''; - $cache = Cache::getInstance($type,$name); +function S($name, $value = '', $options = null) { + + static $cache = ''; + + // 缓存操作的同时初始化 + if(is_array($options)) { + + $type = isset($options['type']) ? $options['type'] : ''; + $cache = Cache::getInstance($type, $options); + } + + // 缓存初始化 + else if(is_array($name)) { + + $type = isset($name['type']) ? $name['type'] : ''; + $cache = Cache::getInstance($type, $name); return $cache; - }elseif(empty($cache)) { // 自动初始化 - $cache = Cache::getInstance(); } - if(''=== $value){ // 获取缓存 + + // 自动初始化 + else if(empty($cache)) { + + $cache = Cache::getInstance(); + } + + // 获取缓存 + if($value === '') { + return $cache->get($name); - }elseif(is_null($value)) { // 删除缓存 + } + + // 删除缓存 + else if(is_null($value)) { + return $cache->rm($name); - }else { // 缓存数据 - $expire = is_numeric($options)?$options:NULL; + } + + // 缓存数据 + else { + + $expire = is_numeric($options) ? $options : NULL; return $cache->set($name, $value, $expire); } } + // S方法的别名 已经废除 不再建议使用 function cache($name,$value='',$options=null){ return S($name,$value,$options); From 9e915d87cfc4ac597c56f3573802bc1b2d120967 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sun, 17 Mar 2013 16:38:26 +0800 Subject: [PATCH 37/39] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/common.php | 76 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/Common/common.php b/Common/common.php index a515100b5..973ff3547 100644 --- a/Common/common.php +++ b/Common/common.php @@ -145,44 +145,80 @@ function file_exists_case($filename) { /** * 导入所需的类库 同java的Import 本函数有缓存功能 * @param string $class 类库命名空间字符串 + * @|APP_NAME表示该项目的lib + * think表示框架内的lib + * org|com表示extend/library下项目 + * other表示其他项目 * @param string $baseUrl 起始路径 * @param string $ext 导入的文件扩展名 * @return boolean */ -function import($class, $baseUrl = '', $ext='.class.php') { +function import($class, $baseUrl = '', $ext = '.class.php') { + + // 已载入库列表 static $_file = array(); + + // 转义 $class = str_replace(array('.', '#'), array('/', '.'), $class); - if ('' === $baseUrl && false === strpos($class, '/')) { - // 检查别名导入 + + // 检查别名导入 + if('' === $baseUrl && false === strpos($class, '/')) { return alias_import($class); } - if (isset($_file[$class . $baseUrl])) + + // 检查是否已经载入 + if (isset($_file[$class . $baseUrl])) { return true; - else + } + // 添加到载入列表 + else { $_file[$class . $baseUrl] = true; - $class_strut = explode('/', $class); - if (empty($baseUrl)) { - $libPath = defined('BASE_LIB_PATH')?BASE_LIB_PATH:LIB_PATH; - if ('@' == $class_strut[0] || APP_NAME == $class_strut[0]) { - //加载当前项目应用类库 + } + + // 解析$class + $class_strut = explode('/', $class); + + // 如果$baseUrl为空则解析$class + if(empty($baseUrl)) { + + $libPath = defined('BASE_LIB_PATH') ? BASE_LIB_PATH : LIB_PATH; + + // 加载当前项目应用类库 + if('@' == $class_strut[0] || APP_NAME == $class_strut[0]) { + $baseUrl = dirname($libPath); - $class = substr_replace($class, basename($libPath).'/', 0, strlen($class_strut[0]) + 1); - }elseif ('think' == strtolower($class_strut[0])){ // think 官方基类库 + $class = substr_replace($class, basename($libPath) . '/', 0, strlen($class_strut[0]) + 1); + } + + // think 官方基类库 + elseif('think' == strtolower($class_strut[0])) { $baseUrl = CORE_PATH; $class = substr($class,6); - }elseif (in_array(strtolower($class_strut[0]), array('org', 'com'))) { - // org 第三方公共类库 com 企业公共类库 + } + + // org 第三方公共类库 com 企业公共类库 + elseif(in_array(strtolower($class_strut[0]), array('org', 'com'))) { + $baseUrl = LIBRARY_PATH; - }else { // 加载其他项目应用类库 - $class = substr_replace($class, '', 0, strlen($class_strut[0]) + 1); + } + + // 加载其他项目应用类库 + else { + $class = substr_replace($class, '', 0, strlen($class_strut[0]) + 1); $baseUrl = APP_PATH . '../' . $class_strut[0] . '/'.basename($libPath).'/'; } } - if (substr($baseUrl, -1) != '/') - $baseUrl .= '/'; - $classfile = $baseUrl . $class . $ext; + + // 分析后缀 + if(substr($baseUrl, -1) != '/') { + $baseUrl .= '/'; + } + + // 合并classfile + $classfile = $baseUrl . $class . $ext; + + // 如果类不存在 则导入类库文件 if (!class_exists(basename($class),false)) { - // 如果类不存在 则导入类库文件 return require_cache($classfile); } } From 76c21d7fa62b721514bd66d273e67533b5334c1b Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sun, 17 Mar 2013 17:29:24 +0800 Subject: [PATCH 38/39] =?UTF-8?q?=E8=B0=83=E6=95=B4README.md=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 59c1afe96..735166968 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,26 @@ -#Smart Thinkphp Plan# +#Smart ThinkPHP -Thanks for thinkphp +##Thanks ThinkPHP and Smarty -##不同于Thinkphp的地方## +##1.0.0 -待... \ No newline at end of file +###与ThinkPHP不同的地方 + +1. 主要继承了ThinkPHP的源代码,保留大部分ThinkPHP功能 +2. 移除了ThinkPHP的ThinkTemplate模板引擎 +3. 生成的url设定为小写 +4. 添加了加载Extend/Conf的机制 +5. 添加了加载Extend/Function的机制 + +###Smart ThinkPHP不合理地方 + +1. 未删减对Extend的依赖性,导致必须同时使用Extend文档 + +##2.0.0 计划 + +版本目的:彻底改变ThinkPHP的包管理方式 + +1. 整理加载函数,import, import_alias, load, vendor等 +2. 将Common下的common.php和functions.php内的函数调整到class类内 +3. 废弃原Extend拓展的加载方式,使用PHP composer方式加载和管理 +4. ... \ No newline at end of file From da1e3506cfec5cb4f19e0a840aab3a50b0be1df1 Mon Sep 17 00:00:00 2001 From: MinoWu Date: Sun, 17 Mar 2013 17:34:09 +0800 Subject: [PATCH 39/39] =?UTF-8?q?=E8=B0=83=E6=95=B4README=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 735166968..a49807bd5 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,28 @@ 1. 整理加载函数,import, import_alias, load, vendor等 2. 将Common下的common.php和functions.php内的函数调整到class类内 3. 废弃原Extend拓展的加载方式,使用PHP composer方式加载和管理 -4. ... \ No newline at end of file +4. ... + +##安装Smart ThinkPHP + +**PS: 看该安装方式可能会比较模糊** + +###下载框架和拓展 + + git clone https://github.com/minowu/thinkphp.git + git clone https://github.com/minowu/extend.git + +###根据ThinkPHP入口文件的方式,编辑index.php内容 + + // 调试模式 + define('APP_DEBUG', true); + + // 项目核心 + define('ENTRY_PATH', './'); + + define('APP_PATH', '../App/'); + define('THINK_PATH', '../../framework/thinkphp/'); + define('EXTEND_PATH', '../../framework/extend/'); + + // 加载框架并运行 + require THINK_PATH . 'ThinkPHP.php';