Full Code of Aoiujz/WechatSDK for AI

master 9a60328f38af cached
382 files
2.9 MB
769.7k tokens
3233 symbols
1 requests
Download .txt
Showing preview only (3,183K chars total). Download the full file or copy to clipboard to get everything.
Repository: Aoiujz/WechatSDK
Branch: master
Commit: 9a60328f38af
Files: 382
Total size: 2.9 MB

Directory structure:
gitextract_dabn5tus/

├── .gitignore
├── .htaccess
├── Application/
│   ├── Common/
│   │   ├── Common/
│   │   │   └── index.html
│   │   ├── Conf/
│   │   │   ├── config.php
│   │   │   └── index.html
│   │   └── index.html
│   ├── Home/
│   │   ├── Common/
│   │   │   └── index.html
│   │   ├── Conf/
│   │   │   ├── config.php
│   │   │   └── index.html
│   │   ├── Controller/
│   │   │   ├── IndexController.class.php
│   │   │   └── index.html
│   │   ├── Model/
│   │   │   └── index.html
│   │   ├── View/
│   │   │   └── index.html
│   │   └── index.html
│   ├── README.md
│   └── index.html
├── Public/
│   └── README.md
├── ThinkPHP/
│   ├── Common/
│   │   └── functions.php
│   ├── Conf/
│   │   ├── convention.php
│   │   └── debug.php
│   ├── LICENSE.txt
│   ├── Lang/
│   │   ├── en-us.php
│   │   ├── pt-br.php
│   │   ├── zh-cn.php
│   │   └── zh-tw.php
│   ├── Library/
│   │   ├── Behavior/
│   │   │   ├── AgentCheckBehavior.class.php
│   │   │   ├── BorisBehavior.class.php
│   │   │   ├── BrowserCheckBehavior.class.php
│   │   │   ├── BuildLiteBehavior.class.php
│   │   │   ├── CheckActionRouteBehavior.class.php
│   │   │   ├── CheckLangBehavior.class.php
│   │   │   ├── ChromeShowPageTraceBehavior.class.php
│   │   │   ├── ContentReplaceBehavior.class.php
│   │   │   ├── CronRunBehavior.class.php
│   │   │   ├── FireShowPageTraceBehavior.class.php
│   │   │   ├── ParseTemplateBehavior.class.php
│   │   │   ├── ReadHtmlCacheBehavior.class.php
│   │   │   ├── RobotCheckBehavior.class.php
│   │   │   ├── ShowPageTraceBehavior.class.php
│   │   │   ├── ShowRuntimeBehavior.class.php
│   │   │   ├── TokenBuildBehavior.class.php
│   │   │   ├── UpgradeNoticeBehavior.class.php
│   │   │   └── WriteHtmlCacheBehavior.class.php
│   │   ├── Com/
│   │   │   ├── Wechat.class.php
│   │   │   ├── WechatAuth.class.php
│   │   │   └── WechatCrypt.class.php
│   │   ├── Org/
│   │   │   ├── Net/
│   │   │   │   ├── Http.class.php
│   │   │   │   └── IpLocation.class.php
│   │   │   └── Util/
│   │   │       ├── ArrayList.class.php
│   │   │       ├── CodeSwitch.class.php
│   │   │       ├── Date.class.php
│   │   │       ├── Rbac.class.php
│   │   │       ├── Stack.class.php
│   │   │       └── String.class.php
│   │   ├── Think/
│   │   │   ├── App.class.php
│   │   │   ├── Auth.class.php
│   │   │   ├── Behavior.class.php
│   │   │   ├── Build.class.php
│   │   │   ├── Cache/
│   │   │   │   └── Driver/
│   │   │   │       ├── Apachenote.class.php
│   │   │   │       ├── Apc.class.php
│   │   │   │       ├── Db.class.php
│   │   │   │       ├── Eaccelerator.class.php
│   │   │   │       ├── File.class.php
│   │   │   │       ├── Memcache.class.php
│   │   │   │       ├── Memcached.class.php
│   │   │   │       ├── Memcachesae.class.php
│   │   │   │       ├── Redis.class.php
│   │   │   │       ├── Shmop.class.php
│   │   │   │       ├── Sqlite.class.php
│   │   │   │       ├── Wincache.class.php
│   │   │   │       └── Xcache.class.php
│   │   │   ├── Cache.class.php
│   │   │   ├── Controller/
│   │   │   │   ├── HproseController.class.php
│   │   │   │   ├── JsonRpcController.class.php
│   │   │   │   ├── RestController.class.php
│   │   │   │   ├── RpcController.class.php
│   │   │   │   └── YarController.class.php
│   │   │   ├── Controller.class.php
│   │   │   ├── Crypt/
│   │   │   │   └── Driver/
│   │   │   │       ├── Base64.class.php
│   │   │   │       ├── Crypt.class.php
│   │   │   │       ├── Des.class.php
│   │   │   │       ├── Think.class.php
│   │   │   │       └── Xxtea.class.php
│   │   │   ├── Crypt.class.php
│   │   │   ├── Db/
│   │   │   │   ├── Driver/
│   │   │   │   │   ├── Firebird.class.php
│   │   │   │   │   ├── Mongo.class.php
│   │   │   │   │   ├── Mysql.class.php
│   │   │   │   │   ├── Oracle.class.php
│   │   │   │   │   ├── Pgsql.class.php
│   │   │   │   │   ├── Sqlite.class.php
│   │   │   │   │   └── Sqlsrv.class.php
│   │   │   │   ├── Driver.class.php
│   │   │   │   └── Lite.class.php
│   │   │   ├── Db.class.php
│   │   │   ├── Dispatcher.class.php
│   │   │   ├── Exception.class.php
│   │   │   ├── Hook.class.php
│   │   │   ├── Image/
│   │   │   │   └── Driver/
│   │   │   │       ├── GIF.class.php
│   │   │   │       ├── Gd.class.php
│   │   │   │       └── Imagick.class.php
│   │   │   ├── Image.class.php
│   │   │   ├── Log/
│   │   │   │   └── Driver/
│   │   │   │       ├── File.class.php
│   │   │   │       └── Sae.class.php
│   │   │   ├── Log.class.php
│   │   │   ├── Model/
│   │   │   │   ├── AdvModel.class.php
│   │   │   │   ├── MergeModel.class.php
│   │   │   │   ├── MongoModel.class.php
│   │   │   │   ├── RelationModel.class.php
│   │   │   │   └── ViewModel.class.php
│   │   │   ├── Model.class.php
│   │   │   ├── Page.class.php
│   │   │   ├── Route.class.php
│   │   │   ├── Session/
│   │   │   │   └── Driver/
│   │   │   │       ├── Db.class.php
│   │   │   │       ├── Memcache.class.php
│   │   │   │       └── Mysqli.class.php
│   │   │   ├── Storage/
│   │   │   │   └── Driver/
│   │   │   │       ├── File.class.php
│   │   │   │       └── Sae.class.php
│   │   │   ├── Storage.class.php
│   │   │   ├── Template/
│   │   │   │   ├── Driver/
│   │   │   │   │   ├── Ease.class.php
│   │   │   │   │   ├── Lite.class.php
│   │   │   │   │   ├── Mobile.class.php
│   │   │   │   │   ├── Smart.class.php
│   │   │   │   │   └── Smarty.class.php
│   │   │   │   ├── TagLib/
│   │   │   │   │   ├── Cx.class.php
│   │   │   │   │   └── Html.class.php
│   │   │   │   └── TagLib.class.php
│   │   │   ├── Template.class.php
│   │   │   ├── Think.class.php
│   │   │   ├── Upload/
│   │   │   │   └── Driver/
│   │   │   │       ├── Bcs/
│   │   │   │       │   ├── bcs.class.php
│   │   │   │       │   ├── mimetypes.class.php
│   │   │   │       │   └── requestcore.class.php
│   │   │   │       ├── Bcs.class.php
│   │   │   │       ├── Ftp.class.php
│   │   │   │       ├── Local.class.php
│   │   │   │       ├── Qiniu/
│   │   │   │       │   └── QiniuStorage.class.php
│   │   │   │       ├── Qiniu.class.php
│   │   │   │       ├── Sae.class.php
│   │   │   │       └── Upyun.class.php
│   │   │   ├── Upload.class.php
│   │   │   ├── Verify.class.php
│   │   │   └── View.class.php
│   │   └── Vendor/
│   │       ├── Boris/
│   │       │   ├── Boris.php
│   │       │   ├── CLIOptionsHandler.php
│   │       │   ├── ColoredInspector.php
│   │       │   ├── Config.php
│   │       │   ├── DumpInspector.php
│   │       │   ├── EvalWorker.php
│   │       │   ├── ExportInspector.php
│   │       │   ├── Inspector.php
│   │       │   ├── ReadlineClient.php
│   │       │   └── ShallowParser.php
│   │       ├── EaseTemplate/
│   │       │   ├── template.core.php
│   │       │   └── template.ease.php
│   │       ├── Hprose/
│   │       │   ├── HproseClassManager.php
│   │       │   ├── HproseClient.php
│   │       │   ├── HproseCommon.php
│   │       │   ├── HproseFormatter.php
│   │       │   ├── HproseHttpClient.php
│   │       │   ├── HproseHttpServer.php
│   │       │   ├── HproseIO.php
│   │       │   ├── HproseIOStream.php
│   │       │   ├── HproseReader.php
│   │       │   ├── HproseTags.php
│   │       │   └── HproseWriter.php
│   │       ├── README.txt
│   │       ├── SmartTemplate/
│   │       │   ├── class.smarttemplate.php
│   │       │   ├── class.smarttemplatedebugger.php
│   │       │   └── class.smarttemplateparser.php
│   │       ├── Smarty/
│   │       │   ├── Smarty.class.php
│   │       │   ├── SmartyBC.class.php
│   │       │   ├── debug.tpl
│   │       │   ├── plugins/
│   │       │   │   ├── block.textformat.php
│   │       │   │   ├── function.counter.php
│   │       │   │   ├── function.cycle.php
│   │       │   │   ├── function.fetch.php
│   │       │   │   ├── function.html_checkboxes.php
│   │       │   │   ├── function.html_image.php
│   │       │   │   ├── function.html_options.php
│   │       │   │   ├── function.html_radios.php
│   │       │   │   ├── function.html_select_date.php
│   │       │   │   ├── function.html_select_time.php
│   │       │   │   ├── function.html_table.php
│   │       │   │   ├── function.mailto.php
│   │       │   │   ├── function.math.php
│   │       │   │   ├── modifier.capitalize.php
│   │       │   │   ├── modifier.date_format.php
│   │       │   │   ├── modifier.debug_print_var.php
│   │       │   │   ├── modifier.escape.php
│   │       │   │   ├── modifier.regex_replace.php
│   │       │   │   ├── modifier.replace.php
│   │       │   │   ├── modifier.spacify.php
│   │       │   │   ├── modifier.truncate.php
│   │       │   │   ├── modifiercompiler.cat.php
│   │       │   │   ├── modifiercompiler.count_characters.php
│   │       │   │   ├── modifiercompiler.count_paragraphs.php
│   │       │   │   ├── modifiercompiler.count_sentences.php
│   │       │   │   ├── modifiercompiler.count_words.php
│   │       │   │   ├── modifiercompiler.default.php
│   │       │   │   ├── modifiercompiler.escape.php
│   │       │   │   ├── modifiercompiler.from_charset.php
│   │       │   │   ├── modifiercompiler.indent.php
│   │       │   │   ├── modifiercompiler.lower.php
│   │       │   │   ├── modifiercompiler.noprint.php
│   │       │   │   ├── modifiercompiler.string_format.php
│   │       │   │   ├── modifiercompiler.strip.php
│   │       │   │   ├── modifiercompiler.strip_tags.php
│   │       │   │   ├── modifiercompiler.to_charset.php
│   │       │   │   ├── modifiercompiler.unescape.php
│   │       │   │   ├── modifiercompiler.upper.php
│   │       │   │   ├── modifiercompiler.wordwrap.php
│   │       │   │   ├── outputfilter.trimwhitespace.php
│   │       │   │   ├── shared.escape_special_chars.php
│   │       │   │   ├── shared.literal_compiler_param.php
│   │       │   │   ├── shared.make_timestamp.php
│   │       │   │   ├── shared.mb_str_replace.php
│   │       │   │   ├── shared.mb_unicode.php
│   │       │   │   ├── shared.mb_wordwrap.php
│   │       │   │   └── variablefilter.htmlspecialchars.php
│   │       │   └── sysplugins/
│   │       │       ├── smarty_cacheresource.php
│   │       │       ├── smarty_cacheresource_custom.php
│   │       │       ├── smarty_cacheresource_keyvaluestore.php
│   │       │       ├── smarty_config_source.php
│   │       │       ├── smarty_internal_cacheresource_file.php
│   │       │       ├── smarty_internal_compile_append.php
│   │       │       ├── smarty_internal_compile_assign.php
│   │       │       ├── smarty_internal_compile_block.php
│   │       │       ├── smarty_internal_compile_break.php
│   │       │       ├── smarty_internal_compile_call.php
│   │       │       ├── smarty_internal_compile_capture.php
│   │       │       ├── smarty_internal_compile_config_load.php
│   │       │       ├── smarty_internal_compile_continue.php
│   │       │       ├── smarty_internal_compile_debug.php
│   │       │       ├── smarty_internal_compile_eval.php
│   │       │       ├── smarty_internal_compile_extends.php
│   │       │       ├── smarty_internal_compile_for.php
│   │       │       ├── smarty_internal_compile_foreach.php
│   │       │       ├── smarty_internal_compile_function.php
│   │       │       ├── smarty_internal_compile_if.php
│   │       │       ├── smarty_internal_compile_include.php
│   │       │       ├── smarty_internal_compile_include_php.php
│   │       │       ├── smarty_internal_compile_insert.php
│   │       │       ├── smarty_internal_compile_ldelim.php
│   │       │       ├── smarty_internal_compile_nocache.php
│   │       │       ├── smarty_internal_compile_private_block_plugin.php
│   │       │       ├── smarty_internal_compile_private_function_plugin.php
│   │       │       ├── smarty_internal_compile_private_modifier.php
│   │       │       ├── smarty_internal_compile_private_object_block_function.php
│   │       │       ├── smarty_internal_compile_private_object_function.php
│   │       │       ├── smarty_internal_compile_private_print_expression.php
│   │       │       ├── smarty_internal_compile_private_registered_block.php
│   │       │       ├── smarty_internal_compile_private_registered_function.php
│   │       │       ├── smarty_internal_compile_private_special_variable.php
│   │       │       ├── smarty_internal_compile_rdelim.php
│   │       │       ├── smarty_internal_compile_section.php
│   │       │       ├── smarty_internal_compile_setfilter.php
│   │       │       ├── smarty_internal_compile_while.php
│   │       │       ├── smarty_internal_compilebase.php
│   │       │       ├── smarty_internal_config.php
│   │       │       ├── smarty_internal_config_file_compiler.php
│   │       │       ├── smarty_internal_configfilelexer.php
│   │       │       ├── smarty_internal_configfileparser.php
│   │       │       ├── smarty_internal_data.php
│   │       │       ├── smarty_internal_debug.php
│   │       │       ├── smarty_internal_filter_handler.php
│   │       │       ├── smarty_internal_function_call_handler.php
│   │       │       ├── smarty_internal_get_include_path.php
│   │       │       ├── smarty_internal_nocache_insert.php
│   │       │       ├── smarty_internal_parsetree.php
│   │       │       ├── smarty_internal_resource_eval.php
│   │       │       ├── smarty_internal_resource_extends.php
│   │       │       ├── smarty_internal_resource_file.php
│   │       │       ├── smarty_internal_resource_php.php
│   │       │       ├── smarty_internal_resource_registered.php
│   │       │       ├── smarty_internal_resource_stream.php
│   │       │       ├── smarty_internal_resource_string.php
│   │       │       ├── smarty_internal_smartytemplatecompiler.php
│   │       │       ├── smarty_internal_template.php
│   │       │       ├── smarty_internal_templatebase.php
│   │       │       ├── smarty_internal_templatecompilerbase.php
│   │       │       ├── smarty_internal_templatelexer.php
│   │       │       ├── smarty_internal_templateparser.php
│   │       │       ├── smarty_internal_utility.php
│   │       │       ├── smarty_internal_write_file.php
│   │       │       ├── smarty_resource.php
│   │       │       ├── smarty_resource_custom.php
│   │       │       ├── smarty_resource_recompiled.php
│   │       │       ├── smarty_resource_uncompiled.php
│   │       │       └── smarty_security.php
│   │       ├── TemplateLite/
│   │       │   ├── class.compiler.php
│   │       │   ├── class.config.php
│   │       │   ├── class.template.php
│   │       │   └── internal/
│   │       │       ├── compile.compile_config.php
│   │       │       ├── compile.compile_custom_block.php
│   │       │       ├── compile.compile_custom_function.php
│   │       │       ├── compile.compile_if.php
│   │       │       ├── compile.generate_compiler_debug_output.php
│   │       │       ├── compile.include.php
│   │       │       ├── compile.parse_is_expr.php
│   │       │       ├── compile.section_start.php
│   │       │       ├── debug.tpl
│   │       │       ├── template.build_dir.php
│   │       │       ├── template.config_loader.php
│   │       │       ├── template.destroy_dir.php
│   │       │       ├── template.fetch_compile_include.php
│   │       │       └── template.generate_debug_output.php
│   │       ├── jsonRPC/
│   │       │   ├── jsonRPCClient.php
│   │       │   └── jsonRPCServer.php
│   │       ├── phpRPC/
│   │       │   ├── bigint.php
│   │       │   ├── compat.php
│   │       │   ├── dhparams/
│   │       │   │   ├── 1024.dhp
│   │       │   │   ├── 128.dhp
│   │       │   │   ├── 1536.dhp
│   │       │   │   ├── 160.dhp
│   │       │   │   ├── 192.dhp
│   │       │   │   ├── 2048.dhp
│   │       │   │   ├── 256.dhp
│   │       │   │   ├── 3072.dhp
│   │       │   │   ├── 4096.dhp
│   │       │   │   ├── 512.dhp
│   │       │   │   ├── 768.dhp
│   │       │   │   └── 96.dhp
│   │       │   ├── dhparams.php
│   │       │   ├── pecl/
│   │       │   │   └── xxtea/
│   │       │   │       ├── CREDITS
│   │       │   │       ├── INSTALL
│   │       │   │       ├── LICENSE
│   │       │   │       ├── README
│   │       │   │       ├── config.m4
│   │       │   │       ├── config.w32
│   │       │   │       ├── php_xxtea.c
│   │       │   │       ├── php_xxtea.dsp
│   │       │   │       ├── php_xxtea.h
│   │       │   │       ├── php_xxtea.sln
│   │       │   │       ├── php_xxtea.vcproj
│   │       │   │       ├── test/
│   │       │   │       │   └── test.php
│   │       │   │       ├── xxtea.c
│   │       │   │       └── xxtea.h
│   │       │   ├── phprpc_client.php
│   │       │   ├── phprpc_date.php
│   │       │   ├── phprpc_server.php
│   │       │   └── xxtea.php
│   │       └── spyc/
│   │           ├── COPYING
│   │           ├── README.md
│   │           ├── Spyc.php
│   │           ├── composer.json
│   │           ├── examples/
│   │           │   ├── yaml-dump.php
│   │           │   └── yaml-load.php
│   │           ├── php4/
│   │           │   ├── 5to4.php
│   │           │   ├── spyc.php4
│   │           │   └── test.php4
│   │           ├── spyc.yaml
│   │           └── tests/
│   │               ├── DumpTest.php
│   │               ├── IndentTest.php
│   │               ├── ParseTest.php
│   │               ├── RoundTripTest.php
│   │               ├── comments.yaml
│   │               ├── failing1.yaml
│   │               ├── indent_1.yaml
│   │               └── quotes.yaml
│   ├── Mode/
│   │   ├── Api/
│   │   │   ├── App.class.php
│   │   │   ├── Controller.class.php
│   │   │   ├── Dispatcher.class.php
│   │   │   └── functions.php
│   │   ├── Lite/
│   │   │   ├── App.class.php
│   │   │   ├── Controller.class.php
│   │   │   ├── Dispatcher.class.php
│   │   │   ├── Model.class.php
│   │   │   ├── View.class.php
│   │   │   ├── convention.php
│   │   │   └── functions.php
│   │   ├── Sae/
│   │   │   └── convention.php
│   │   ├── api.php
│   │   ├── common.php
│   │   ├── lite.php
│   │   └── sae.php
│   ├── ThinkPHP.php
│   └── Tpl/
│       ├── dispatch_jump.tpl
│       ├── page_trace.tpl
│       └── think_exception.tpl
├── index.php
├── readme.md
├── requirements.apt
└── tsuru.yml

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
/Runtime/
/php/


================================================
FILE: .htaccess
================================================
<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

================================================
FILE: Application/Common/Common/index.html
================================================
 

================================================
FILE: Application/Common/Conf/config.php
================================================
<?php
return array(
	//'配置项'=>'配置值'
);

================================================
FILE: Application/Common/Conf/index.html
================================================
 

================================================
FILE: Application/Common/index.html
================================================
 

================================================
FILE: Application/Home/Common/index.html
================================================
 

================================================
FILE: Application/Home/Conf/config.php
================================================
<?php
return array(
	//'配置项'=>'配置值'
);

================================================
FILE: Application/Home/Conf/index.html
================================================
 

================================================
FILE: Application/Home/Controller/IndexController.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------

namespace Home\Controller;

use Think\Controller;
use Com\Wechat;
use Com\WechatAuth;

class IndexController extends Controller{
    /**
     * 微信消息接口入口
     * 所有发送到微信的消息都会推送到该操作
     * 所以,微信公众平台后台填写的api地址则为该操作的访问地址
     */
    public function index($id = ''){
        //调试
        try{
            $appid = 'wx58aebef2023e68cd'; //AppID(应用ID)
            $token = 'E9E05045F594065909D2B5554A8F34CE'; //微信后台填写的TOKEN
            $crypt = 'q6FPCUoCQWaOiR3UUe5RfQu8A7hlJcMW4BnNyH9z2il'; //消息加密KEY(EncodingAESKey)
            
            /* 加载微信SDK */
            $wechat = new Wechat($token, $appid, $crypt);
            
            /* 获取请求信息 */
            $data = $wechat->request();

            if($data && is_array($data)){
                /**
                 * 你可以在这里分析数据,决定要返回给用户什么样的信息
                 * 接受到的信息类型有10种,分别使用下面10个常量标识
                 * Wechat::MSG_TYPE_TEXT       //文本消息
                 * Wechat::MSG_TYPE_IMAGE      //图片消息
                 * Wechat::MSG_TYPE_VOICE      //音频消息
                 * Wechat::MSG_TYPE_VIDEO      //视频消息
                 * Wechat::MSG_TYPE_SHORTVIDEO //视频消息
                 * Wechat::MSG_TYPE_MUSIC      //音乐消息
                 * Wechat::MSG_TYPE_NEWS       //图文消息(推送过来的应该不存在这种类型,但是可以给用户回复该类型消息)
                 * Wechat::MSG_TYPE_LOCATION   //位置消息
                 * Wechat::MSG_TYPE_LINK       //连接消息
                 * Wechat::MSG_TYPE_EVENT      //事件消息
                 *
                 * 事件消息又分为下面五种
                 * Wechat::MSG_EVENT_SUBSCRIBE    //订阅
                 * Wechat::MSG_EVENT_UNSUBSCRIBE  //取消订阅
                 * Wechat::MSG_EVENT_SCAN         //二维码扫描
                 * Wechat::MSG_EVENT_LOCATION     //报告位置
                 * Wechat::MSG_EVENT_CLICK        //菜单点击
                 */

                //记录微信推送过来的数据
                file_put_contents('./data.json', json_encode($data));

                /* 响应当前请求(自动回复) */
                //$wechat->response($content, $type);

                /**
                 * 响应当前请求还有以下方法可以使用
                 * 具体参数格式说明请参考文档
                 * 
                 * $wechat->replyText($text); //回复文本消息
                 * $wechat->replyImage($media_id); //回复图片消息
                 * $wechat->replyVoice($media_id); //回复音频消息
                 * $wechat->replyVideo($media_id, $title, $discription); //回复视频消息
                 * $wechat->replyMusic($title, $discription, $musicurl, $hqmusicurl, $thumb_media_id); //回复音乐消息
                 * $wechat->replyNews($news, $news1, $news2, $news3); //回复多条图文消息
                 * $wechat->replyNewsOnce($title, $discription, $url, $picurl); //回复单条图文消息
                 * 
                 */
                
                //执行Demo
                $this->demo($wechat, $data);
            }
        } catch(\Exception $e){
            file_put_contents('./error.json', json_encode($e->getMessage()));
        }
        
    }

    /**
     * DEMO
     * @param  Object $wechat Wechat对象
     * @param  array  $data   接受到微信推送的消息
     */
    private function demo($wechat, $data){
        switch ($data['MsgType']) {
            case Wechat::MSG_TYPE_EVENT:
                switch ($data['Event']) {
                    case Wechat::MSG_EVENT_SUBSCRIBE:
                        $wechat->replyText('欢迎您关注麦当苗儿公众平台!回复“文本”,“图片”,“语音”,“视频”,“音乐”,“图文”,“多图文”查看相应的信息!');
                        break;

                    case Wechat::MSG_EVENT_UNSUBSCRIBE:
                        //取消关注,记录日志
                        break;

                    default:
                        $wechat->replyText("欢迎访问麦当苗儿公众平台!您的事件类型:{$data['Event']},EventKey:{$data['EventKey']}");
                        break;
                }
                break;

            case Wechat::MSG_TYPE_TEXT:
                switch ($data['Content']) {
                    case '文本':
                        $wechat->replyText('欢迎访问麦当苗儿公众平台,这是文本回复的内容!');
                        break;

                    case '图片':
                        //$media_id = $this->upload('image');
                        $media_id = '1J03FqvqN_jWX6xe8F-VJr7QHVTQsJBS6x4uwKuzyLE';
                        $wechat->replyImage($media_id);
                        break;

                    case '语音':
                        //$media_id = $this->upload('voice');
                        $media_id = '1J03FqvqN_jWX6xe8F-VJgisW3vE28MpNljNnUeD3Pc';
                        $wechat->replyVoice($media_id);
                        break;

                    case '视频':
                        //$media_id = $this->upload('video');
                        $media_id = '1J03FqvqN_jWX6xe8F-VJn9Qv0O96rcQgITYPxEIXiQ';
                        $wechat->replyVideo($media_id, '视频标题', '视频描述信息。。。');
                        break;

                    case '音乐':
                        //$thumb_media_id = $this->upload('thumb');
                        $thumb_media_id = '1J03FqvqN_jWX6xe8F-VJrjYzcBAhhglm48EhwNoBLA';
                        $wechat->replyMusic(
                            'Wakawaka!', 
                            'Shakira - Waka Waka, MaxRNB - Your first R/Hiphop source', 
                            'http://wechat.zjzit.cn/Public/music.mp3', 
                            'http://wechat.zjzit.cn/Public/music.mp3', 
                            $thumb_media_id
                        ); //回复音乐消息
                        break;

                    case '图文':
                        $wechat->replyNewsOnce(
                            "全民创业蒙的就是你,来一盆冷水吧!",
                            "全民创业已经如火如荼,然而创业是一个非常自我的过程,它是一种生活方式的选择。从外部的推动有助于提高创业的存活率,但是未必能够提高创新的成功率。第一次创业的人,至少90%以上都会以失败而告终。创业成功者大部分年龄在30岁到38岁之间,而且创业成功最高的概率是第三次创业。", 
                            "http://www.topthink.com/topic/11991.html",
                            "http://yun.topthink.com/Uploads/Editor/2015-07-30/55b991cad4c48.jpg"
                        ); //回复单条图文消息
                        break;

                    case '多图文':
                        $news = array(
                            "全民创业蒙的就是你,来一盆冷水吧!",
                            "全民创业已经如火如荼,然而创业是一个非常自我的过程,它是一种生活方式的选择。从外部的推动有助于提高创业的存活率,但是未必能够提高创新的成功率。第一次创业的人,至少90%以上都会以失败而告终。创业成功者大部分年龄在30岁到38岁之间,而且创业成功最高的概率是第三次创业。", 
                            "http://www.topthink.com/topic/11991.html",
                            "http://yun.topthink.com/Uploads/Editor/2015-07-30/55b991cad4c48.jpg"
                        ); //回复单条图文消息

                        $wechat->replyNews($news, $news, $news, $news, $news);
                        break;
                    
                    default:
                        $wechat->replyText("欢迎访问麦当苗儿公众平台!您输入的内容是:{$data['Content']}");
                        break;
                }
                break;
            
            default:
                # code...
                break;
        }
    }

    /**
     * 资源文件上传方法
     * @param  string $type 上传的资源类型
     * @return string       媒体资源ID
     */
    private function upload($type){
        $appid     = 'wx58aebef2023e68cd';
        $appsecret = 'bf818ec2fb49c20a478bbefe9dc88c60';

        $token = session("token");

        if($token){
            $auth = new WechatAuth($appid, $appsecret, $token);
        } else {
            $auth  = new WechatAuth($appid, $appsecret);
            $token = $auth->getAccessToken();

            session(array('expire' => $token['expires_in']));
            session("token", $token['access_token']);
        }

        switch ($type) {
            case 'image':
                $filename = './Public/image.jpg';
                $media    = $auth->materialAddMaterial($filename, $type);
                break;

            case 'voice':
                $filename = './Public/voice.mp3';
                $media    = $auth->materialAddMaterial($filename, $type);
                break;

            case 'video':
                $filename    = './Public/video.mp4';
                $discription = array('title' => '视频标题', 'introduction' => '视频描述');
                $media       = $auth->materialAddMaterial($filename, $type, $discription);
                break;

            case 'thumb':
                $filename = './Public/music.jpg';
                $media    = $auth->materialAddMaterial($filename, $type);
                break;
            
            default:
                return '';
        }

        if($media["errcode"] == 42001){ //access_token expired
            session("token", null);
            $this->upload($type);
        }

        return $media['media_id'];
    }
}


================================================
FILE: Application/Home/Controller/index.html
================================================
 

================================================
FILE: Application/Home/Model/index.html
================================================
 

================================================
FILE: Application/Home/View/index.html
================================================
 

================================================
FILE: Application/Home/index.html
================================================
 

================================================
FILE: Application/README.md
================================================
项目目录

================================================
FILE: Application/index.html
================================================
 

================================================
FILE: Public/README.md
================================================
资源文件目录

================================================
FILE: ThinkPHP/Common/functions.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

/**
 * Think 系统函数库
 */

/**
 * 获取和设置配置参数 支持批量定义
 * @param string|array $name 配置变量
 * @param mixed $value 配置值
 * @param mixed $default 默认值
 * @return mixed
 */
function C($name=null, $value=null,$default=null) {
    static $_config = array();
    // 无参数时获取所有
    if (empty($name)) {
        return $_config;
    }
    // 优先执行设置获取或赋值
    if (is_string($name)) {
        if (!strpos($name, '.')) {
            $name = strtoupper($name);
            if (is_null($value))
                return isset($_config[$name]) ? $_config[$name] : $default;
            $_config[$name] = $value;
            return null;
        }
        // 二维数组设置和获取支持
        $name = explode('.', $name);
        $name[0]   =  strtoupper($name[0]);
        if (is_null($value))
            return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : $default;
        $_config[$name[0]][$name[1]] = $value;
        return null;
    }
    // 批量设置
    if (is_array($name)){
        $_config = array_merge($_config, array_change_key_case($name,CASE_UPPER));
        return null;
    }
    return null; // 避免非法参数
}

/**
 * 加载配置文件 支持格式转换 仅支持一级配置
 * @param string $file 配置文件名
 * @param string $parse 配置解析方法 有些格式需要用户自己解析
 * @return array
 */
function load_config($file,$parse=CONF_PARSE){
    $ext  = pathinfo($file,PATHINFO_EXTENSION);
    switch($ext){
        case 'php':
            return include $file;
        case 'ini':
            return parse_ini_file($file);
        case 'yaml':
            return yaml_parse_file($file);
        case 'xml': 
            return (array)simplexml_load_file($file);
        case 'json':
            return json_decode(file_get_contents($file), true);
        default:
            if(function_exists($parse)){
                return $parse($file);
            }else{
                E(L('_NOT_SUPPORT_').':'.$ext);
            }
    }
}

/**
 * 解析yaml文件返回一个数组
 * @param string $file 配置文件名
 * @return array
 */
if (!function_exists('yaml_parse_file')) {
    function yaml_parse_file($file) {
        vendor('spyc.Spyc');
        return Spyc::YAMLLoad($file);
    }
}

/**
 * 抛出异常处理
 * @param string $msg 异常消息
 * @param integer $code 异常代码 默认为0
 * @throws Think\Exception
 * @return void
 */
function E($msg, $code=0) {
    throw new Think\Exception($msg, $code);
}

/**
 * 记录和统计时间(微秒)和内存使用情况
 * 使用方法:
 * <code>
 * G('begin'); // 记录开始标记位
 * // ... 区间运行代码
 * G('end'); // 记录结束标签位
 * echo G('begin','end',6); // 统计区间运行时间 精确到小数后6位
 * echo G('begin','end','m'); // 统计区间内存使用情况
 * 如果end标记位没有定义,则会自动以当前作为标记位
 * 其中统计内存使用需要 MEMORY_LIMIT_ON 常量为true才有效
 * </code>
 * @param string $start 开始标签
 * @param string $end 结束标签
 * @param integer|string $dec 小数位或者m
 * @return mixed
 */
function G($start,$end='',$dec=4) {
    static $_info       =   array();
    static $_mem        =   array();
    if(is_float($end)) { // 记录时间
        $_info[$start]  =   $end;
    }elseif(!empty($end)){ // 统计时间和内存使用
        if(!isset($_info[$end])) $_info[$end]       =  microtime(TRUE);
        if(MEMORY_LIMIT_ON && $dec=='m'){
            if(!isset($_mem[$end])) $_mem[$end]     =  memory_get_usage();
            return number_format(($_mem[$end]-$_mem[$start])/1024);
        }else{
            return number_format(($_info[$end]-$_info[$start]),$dec);
        }

    }else{ // 记录时间和内存使用
        $_info[$start]  =  microtime(TRUE);
        if(MEMORY_LIMIT_ON) $_mem[$start]           =  memory_get_usage();
    }
    return null;
}

/**
 * 获取和设置语言定义(不区分大小写)
 * @param string|array $name 语言变量
 * @param mixed $value 语言值或者变量
 * @return mixed
 */
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;
        }elseif(is_array($value)){
            // 支持变量
            $replace = array_keys($value);
            foreach($replace as &$v){
                $v = '{$'.$v.'}';
            }
            return str_replace($replace,$value,isset($_lang[$name]) ? $_lang[$name] : $name);        
        }
        $_lang[$name] = $value; // 语言定义
        return null;
    }
    // 批量定义
    if (is_array($name))
        $_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER));
    return null;
}

/**
 * 添加和获取页面Trace记录
 * @param string $value 变量
 * @param string $label 标签
 * @param string $level 日志级别
 * @param boolean $record 是否记录日志
 * @return void|array
 */
function trace($value='[think]',$label='',$level='DEBUG',$record=false) {
    return Think\Think::trace($value,$label,$level,$record);
}

/**
 * 编译文件
 * @param string $filename 文件名
 * @return string
 */
function compile($filename) {
    $content    =   php_strip_whitespace($filename);
    $content    =   trim(substr($content, 5));
    // 替换预编译指令
    $content    =   preg_replace('/\/\/\[RUNTIME\](.*?)\/\/\[\/RUNTIME\]/s', '', $content);
    if(0===strpos($content,'namespace')){
        $content    =   preg_replace('/namespace\s(.*?);/','namespace \\1{',$content,1);
    }else{
        $content    =   'namespace {'.$content;
    }
    if ('?>' == substr($content, -2))
        $content    = substr($content, 0, -2);
    return $content.'}';
}

/**
 * 获取模版文件 格式 资源://模块@主题/控制器/操作
 * @param string $template 模版资源地址
 * @param string $layer 视图层(目录)名称
 * @return string
 */
function T($template='',$layer=''){

    // 解析模版资源地址
    if(false === strpos($template,'://')){
        $template   =   'http://'.str_replace(':', '/',$template);
    }
    $info   =   parse_url($template);
    $file   =   $info['host'].(isset($info['path'])?$info['path']:'');
    $module =   isset($info['user'])?$info['user'].'/':MODULE_NAME.'/';
    $extend =   $info['scheme'];
    $layer  =   $layer?$layer:C('DEFAULT_V_LAYER');

    // 获取当前主题的模版路径
    $auto   =   C('AUTOLOAD_NAMESPACE');
    if($auto && isset($auto[$extend])){ // 扩展资源
        $baseUrl    =   $auto[$extend].$module.$layer.'/';
    }elseif(C('VIEW_PATH')){ 
        // 改变模块视图目录
        $baseUrl    =   C('VIEW_PATH');
    }elseif(defined('TMPL_PATH')){ 
        // 指定全局视图目录
        $baseUrl    =   TMPL_PATH.$module;
    }else{
        $baseUrl    =   APP_PATH.$module.$layer.'/';
    }

    // 获取主题
    $theme  =   substr_count($file,'/')<2 ? C('DEFAULT_THEME') : '';

    // 分析模板文件规则
    $depr   =   C('TMPL_FILE_DEPR');
    if('' == $file) {
        // 如果模板文件名为空 按照默认规则定位
        $file = CONTROLLER_NAME . $depr . ACTION_NAME;
    }elseif(false === strpos($file, '/')){
        $file = CONTROLLER_NAME . $depr . $file;
    }elseif('/' != $depr){
        $file   =   substr_count($file,'/')>1 ? substr_replace($file,$depr,strrpos($file,'/'),1) : str_replace('/', $depr, $file);
    }
    return $baseUrl.($theme?$theme.'/':'').$file.C('TMPL_TEMPLATE_SUFFIX');
}

/**
 * 获取输入参数 支持过滤和默认值
 * 使用方法:
 * <code>
 * I('id',0); 获取id参数 自动判断get或者post
 * I('post.name','','htmlspecialchars'); 获取$_POST['name']
 * I('get.'); 获取$_GET
 * </code>
 * @param string $name 变量的名称 支持指定类型
 * @param mixed $default 不存在的时候默认值
 * @param mixed $filter 参数过滤方法
 * @param mixed $datas 要获取的额外数据源
 * @return mixed
 */
function I($name,$default='',$filter=null,$datas=null) {
	static $_PUT	=	null;
	if(strpos($name,'/')){ // 指定修饰符
		list($name,$type) 	=	explode('/',$name,2);
	}elseif(C('VAR_AUTO_STRING')){ // 默认强制转换为字符串
        $type   =   's';
    }
    if(strpos($name,'.')) { // 指定参数来源
        list($method,$name) =   explode('.',$name,2);
    }else{ // 默认为自动判断
        $method =   'param';
    }
    switch(strtolower($method)) {
        case 'get'     :   
        	$input =& $_GET;
        	break;
        case 'post'    :   
        	$input =& $_POST;
        	break;
        case 'put'     :   
        	if(is_null($_PUT)){
            	parse_str(file_get_contents('php://input'), $_PUT);
        	}
        	$input 	=	$_PUT;        
        	break;
        case 'param'   :
            switch($_SERVER['REQUEST_METHOD']) {
                case 'POST':
                    $input  =  $_POST;
                    break;
                case 'PUT':
                	if(is_null($_PUT)){
                    	parse_str(file_get_contents('php://input'), $_PUT);
                	}
                	$input 	=	$_PUT;
                    break;
                default:
                    $input  =  $_GET;
            }
            break;
        case 'path'    :   
            $input  =   array();
            if(!empty($_SERVER['PATH_INFO'])){
                $depr   =   C('URL_PATHINFO_DEPR');
                $input  =   explode($depr,trim($_SERVER['PATH_INFO'],$depr));            
            }
            break;
        case 'request' :   
        	$input =& $_REQUEST;   
        	break;
        case 'session' :   
        	$input =& $_SESSION;   
        	break;
        case 'cookie'  :   
        	$input =& $_COOKIE;    
        	break;
        case 'server'  :   
        	$input =& $_SERVER;    
        	break;
        case 'globals' :   
        	$input =& $GLOBALS;    
        	break;
        case 'data'    :   
        	$input =& $datas;      
        	break;
        default:
            return null;
    }
    if(''==$name) { // 获取全部变量
        $data       =   $input;
        $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
        if($filters) {
            if(is_string($filters)){
                $filters    =   explode(',',$filters);
            }
            foreach($filters as $filter){
                $data   =   array_map_recursive($filter,$data); // 参数过滤
            }
        }
    }elseif(isset($input[$name])) { // 取值操作
        $data       =   $input[$name];
        $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
        if($filters) {
            if(is_string($filters)){
                if(0 === strpos($filters,'/')){
                    if(1 !== preg_match($filters,(string)$data)){
                        // 支持正则验证
                        return   isset($default) ? $default : null;
                    }
                }else{
                    $filters    =   explode(',',$filters);                    
                }
            }elseif(is_int($filters)){
                $filters    =   array($filters);
            }
            
            if(is_array($filters)){
                foreach($filters as $filter){
                    if(function_exists($filter)) {
                        $data   =   is_array($data) ? array_map_recursive($filter,$data) : $filter($data); // 参数过滤
                    }else{
                        $data   =   filter_var($data,is_int($filter) ? $filter : filter_id($filter));
                        if(false === $data) {
                            return   isset($default) ? $default : null;
                        }
                    }
                }
            }
        }
        if(!empty($type)){
        	switch(strtolower($type)){
        		case 'a':	// 数组
        			$data 	=	(array)$data;
        			break;
        		case 'd':	// 数字
        			$data 	=	(int)$data;
        			break;
        		case 'f':	// 浮点
        			$data 	=	(float)$data;
        			break;
        		case 'b':	// 布尔
        			$data 	=	(boolean)$data;
        			break;
                case 's':   // 字符串
                default:
                    $data   =   (string)$data;
        	}
        }
    }else{ // 变量默认值
        $data       =    isset($default)?$default:null;
    }
    is_array($data) && array_walk_recursive($data,'think_filter');
    return $data;
}

function array_map_recursive($filter, $data) {
    $result = array();
    foreach ($data as $key => $val) {
        $result[$key] = is_array($val)
         ? array_map_recursive($filter, $val)
         : call_user_func($filter, $val);
    }
    return $result;
 }

/**
 * 设置和获取统计数据
 * 使用方法:
 * <code>
 * N('db',1); // 记录数据库操作次数
 * N('read',1); // 记录读取次数
 * echo N('db'); // 获取当前页面数据库的所有操作次数
 * echo N('read'); // 获取当前页面读取次数
 * </code>
 * @param string $key 标识位置
 * @param integer $step 步进值
 * @param boolean $save 是否保存结果
 * @return mixed
 */
function N($key, $step=0,$save=false) {
    static $_num    = array();
    if (!isset($_num[$key])) {
        $_num[$key] = (false !== $save)? S('N_'.$key) :  0;
    }
    if (empty($step)){
        return $_num[$key];
    }else{
        $_num[$key] = $_num[$key] + (int)$step;
    }
    if(false !== $save){ // 保存结果
        S('N_'.$key,$_num[$key],$save);
    }
    return null;
}

/**
 * 字符串命名风格转换
 * type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格
 * @param string $name 字符串
 * @param integer $type 转换类型
 * @return string
 */
function parse_name($name, $type=0) {
    if ($type) {
        return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function($match){return strtoupper($match[1]);}, $name));
    } else {
        return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
    }
}

/**
 * 优化的require_once
 * @param string $filename 文件地址
 * @return boolean
 */
function require_cache($filename) {
    static $_importFiles = array();
    if (!isset($_importFiles[$filename])) {
        if (file_exists_case($filename)) {
            require $filename;
            $_importFiles[$filename] = true;
        } else {
            $_importFiles[$filename] = false;
        }
    }
    return $_importFiles[$filename];
}

/**
 * 区分大小写的文件存在判断
 * @param string $filename 文件地址
 * @return boolean
 */
function file_exists_case($filename) {
    if (is_file($filename)) {
        if (IS_WIN && APP_DEBUG) {
            if (basename(realpath($filename)) != basename($filename))
                return false;
        }
        return true;
    }
    return false;
}

/**
 * 导入所需的类库 同java的Import 本函数有缓存功能
 * @param string $class 类库命名空间字符串
 * @param string $baseUrl 起始路径
 * @param string $ext 导入的文件扩展名
 * @return boolean
 */
function import($class, $baseUrl = '', $ext=EXT) {
    static $_file = array();
    $class = str_replace(array('.', '#'), array('/', '.'), $class);
    if (isset($_file[$class . $baseUrl]))
        return true;
    else
        $_file[$class . $baseUrl] = true;
    $class_strut     = explode('/', $class);
    if (empty($baseUrl)) {
        if ('@' == $class_strut[0] || MODULE_NAME == $class_strut[0]) {
            //加载当前模块的类库
            $baseUrl = MODULE_PATH;
            $class   = substr_replace($class, '', 0, strlen($class_strut[0]) + 1);
        }elseif ('Common' == $class_strut[0]) {
            //加载公共模块的类库
            $baseUrl = COMMON_PATH;
            $class   = substr($class, 7);
        }elseif (in_array($class_strut[0],array('Think','Org','Behavior','Com','Vendor')) || is_dir(LIB_PATH.$class_strut[0])) {
            // 系统类库包和第三方类库包
            $baseUrl = LIB_PATH;
        }else { // 加载其他模块的类库
            $baseUrl = APP_PATH;
        }
    }
    if (substr($baseUrl, -1) != '/')
        $baseUrl    .= '/';
    $classfile       = $baseUrl . $class . $ext;
    if (!class_exists(basename($class),false)) {
        // 如果类不存在 则导入类库文件
        return require_cache($classfile);
    }
    return null;
}

/**
 * 基于命名空间方式导入函数库
 * load('@.Util.Array')
 * @param string $name 函数库命名空间字符串
 * @param string $baseUrl 起始路径
 * @param string $ext 导入的文件扩展名
 * @return void
 */
function load($name, $baseUrl='', $ext='.php') {
    $name = str_replace(array('.', '#'), array('/', '.'), $name);
    if (empty($baseUrl)) {
        if (0 === strpos($name, '@/')) {//加载当前模块函数库
            $baseUrl    =   MODULE_PATH.'Common/';
            $name       =   substr($name, 2);
        } else { //加载其他模块函数库
            $array      =   explode('/', $name);
            $baseUrl    =   APP_PATH . array_shift($array).'/Common/';
            $name       =   implode('/',$array);
        }
    }
    if (substr($baseUrl, -1) != '/')
        $baseUrl       .= '/';
    require_cache($baseUrl . $name . $ext);
}

/**
 * 快速导入第三方框架类库 所有第三方框架的类库文件统一放到 系统的Vendor目录下面
 * @param string $class 类库
 * @param string $baseUrl 基础目录
 * @param string $ext 类库后缀
 * @return boolean
 */
function vendor($class, $baseUrl = '', $ext='.php') {
    if (empty($baseUrl))
        $baseUrl = VENDOR_PATH;
    return import($class, $baseUrl, $ext);
}

/**
 * 实例化模型类 格式 [资源://][模块/]模型
 * @param string $name 资源地址
 * @param string $layer 模型层名称
 * @return Think\Model
 */
function D($name='',$layer='') {
    if(empty($name)) return new Think\Model;
    static $_model  =   array();
    $layer          =   $layer? : C('DEFAULT_M_LAYER');
    if(isset($_model[$name.$layer]))
        return $_model[$name.$layer];
    $class          =   parse_res_name($name,$layer);
    if(class_exists($class)) {
        $model      =   new $class(basename($name));
    }elseif(false === strpos($name,'/')){
        // 自动加载公共模块下面的模型
        if(!C('APP_USE_NAMESPACE')){
            import('Common/'.$layer.'/'.$class);
        }else{
            $class      =   '\\Common\\'.$layer.'\\'.$name.$layer;
        }
        $model      =   class_exists($class)? new $class($name) : new Think\Model($name);
    }else {
        Think\Log::record('D方法实例化没找到模型类'.$class,Think\Log::NOTICE);
        $model      =   new Think\Model(basename($name));
    }
    $_model[$name.$layer]  =  $model;
    return $model;
}

/**
 * 实例化一个没有模型文件的Model
 * @param string $name Model名称 支持指定基础模型 例如 MongoModel:User
 * @param string $tablePrefix 表前缀
 * @param mixed $connection 数据库连接信息
 * @return Think\Model
 */
function M($name='', $tablePrefix='',$connection='') {
    static $_model  = array();
    if(strpos($name,':')) {
        list($class,$name)    =  explode(':',$name);
    }else{
        $class      =   'Think\\Model';
    }
    $guid           =   (is_array($connection)?implode('',$connection):$connection).$tablePrefix . $name . '_' . $class;
    if (!isset($_model[$guid]))
        $_model[$guid] = new $class($name,$tablePrefix,$connection);
    return $_model[$guid];
}

/**
 * 解析资源地址并导入类库文件
 * 例如 module/controller addon://module/behavior
 * @param string $name 资源地址 格式:[扩展://][模块/]资源名
 * @param string $layer 分层名称
 * @param integer $level 控制器层次
 * @return string
 */
function parse_res_name($name,$layer,$level=1){
    if(strpos($name,'://')) {// 指定扩展资源
        list($extend,$name)  =   explode('://',$name);
    }else{
        $extend  =   '';
    }
    if(strpos($name,'/') && substr_count($name, '/')>=$level){ // 指定模块
        list($module,$name) =  explode('/',$name,2);
    }else{
        $module =   defined('MODULE_NAME') ? MODULE_NAME : '' ;
    }
    $array  =   explode('/',$name);
    if(!C('APP_USE_NAMESPACE')){
        $class  =   parse_name($name, 1);
        import($module.'/'.$layer.'/'.$class.$layer);
    }else{
        $class  =   $module.'\\'.$layer;
        foreach($array as $name){
            $class  .=   '\\'.parse_name($name, 1);
        }
        // 导入资源类库
        if($extend){ // 扩展资源
            $class      =   $extend.'\\'.$class;
        }
    }
    return $class.$layer;
}

/**
 * 用于实例化访问控制器
 * @param string $name 控制器名
 * @param string $path 控制器命名空间(路径)
 * @return Think\Controller|false
 */
function controller($name,$path=''){
    $layer  =   C('DEFAULT_C_LAYER');
    if(!C('APP_USE_NAMESPACE')){
        $class  =   parse_name($name, 1).$layer;
        import(MODULE_NAME.'/'.$layer.'/'.$class);
    }else{
        $class  =   ( $path ? basename(ADDON_PATH).'\\'.$path : MODULE_NAME ).'\\'.$layer;
        $array  =   explode('/',$name);
        foreach($array as $name){
            $class  .=   '\\'.parse_name($name, 1);
        }
        $class .=   $layer;
    }
    if(class_exists($class)) {
        return new $class();
    }else {
        return false;
    }
}

/**
 * 实例化多层控制器 格式:[资源://][模块/]控制器
 * @param string $name 资源地址
 * @param string $layer 控制层名称
 * @param integer $level 控制器层次
 * @return Think\Controller|false
 */
function A($name,$layer='',$level=0) {
    static $_action = array();
    $layer  =   $layer? : C('DEFAULT_C_LAYER');
    $level  =   $level? : ($layer == C('DEFAULT_C_LAYER')?C('CONTROLLER_LEVEL'):1);
    if(isset($_action[$name.$layer]))
        return $_action[$name.$layer];
    
    $class  =   parse_res_name($name,$layer,$level);
    if(class_exists($class)) {
        $action             =   new $class();
        $_action[$name.$layer]     =   $action;
        return $action;
    }else {
        return false;
    }
}


/**
 * 远程调用控制器的操作方法 URL 参数格式 [资源://][模块/]控制器/操作
 * @param string $url 调用地址
 * @param string|array $vars 调用参数 支持字符串和数组
 * @param string $layer 要调用的控制层名称
 * @return mixed
 */
function R($url,$vars=array(),$layer='') {
    $info   =   pathinfo($url);
    $action =   $info['basename'];
    $module =   $info['dirname'];
    $class  =   A($module,$layer);
    if($class){
        if(is_string($vars)) {
            parse_str($vars,$vars);
        }
        return call_user_func_array(array(&$class,$action.C('ACTION_SUFFIX')),$vars);
    }else{
        return false;
    }
}

/**
 * 处理标签扩展
 * @param string $tag 标签名称
 * @param mixed $params 传入参数
 * @return void
 */
function tag($tag, &$params=NULL) {
    \Think\Hook::listen($tag,$params);
}

/**
 * 执行某个行为
 * @param string $name 行为名称
 * @param string $tag 标签名称(行为类无需传入) 
 * @param Mixed $params 传入的参数
 * @return void
 */
function B($name, $tag='',&$params=NULL) {
    if(''==$tag){
        $name   .=  'Behavior';
    }
    return \Think\Hook::exec($name,$tag,$params);
}

/**
 * 去除代码中的空白和注释
 * @param string $content 代码内容
 * @return string
 */
function strip_whitespace($content) {
    $stripStr   = '';
    //分析php源码
    $tokens     = token_get_all($content);
    $last_space = false;
    for ($i = 0, $j = count($tokens); $i < $j; $i++) {
        if (is_string($tokens[$i])) {
            $last_space = false;
            $stripStr  .= $tokens[$i];
        } else {
            switch ($tokens[$i][0]) {
                //过滤各种PHP注释
                case T_COMMENT:
                case T_DOC_COMMENT:
                    break;
                //过滤空格
                case T_WHITESPACE:
                    if (!$last_space) {
                        $stripStr  .= ' ';
                        $last_space = true;
                    }
                    break;
                case T_START_HEREDOC:
                    $stripStr .= "<<<THINK\n";
                    break;
                case T_END_HEREDOC:
                    $stripStr .= "THINK;\n";
                    for($k = $i+1; $k < $j; $k++) {
                        if(is_string($tokens[$k]) && $tokens[$k] == ';') {
                            $i = $k;
                            break;
                        } else if($tokens[$k][0] == T_CLOSE_TAG) {
                            break;
                        }
                    }
                    break;
                default:
                    $last_space = false;
                    $stripStr  .= $tokens[$i][1];
            }
        }
    }
    return $stripStr;
}

/**
 * 自定义异常处理
 * @param string $msg 异常消息
 * @param string $type 异常类型 默认为Think\Exception
 * @param integer $code 异常代码 默认为0
 * @return void
 */
function throw_exception($msg, $type='Think\\Exception', $code=0) {
    Think\Log::record('建议使用E方法替代throw_exception',Think\Log::NOTICE);
    if (class_exists($type, false))
        throw new $type($msg, $code);
    else
        Think\Think::halt($msg);        // 异常类型不存在则输出错误信息字串
}

/**
 * 浏览器友好的变量输出
 * @param mixed $var 变量
 * @param boolean $echo 是否输出 默认为True 如果为false 则返回输出字符串
 * @param string $label 标签 默认为空
 * @param boolean $strict 是否严谨 默认为true
 * @return void|string
 */
function dump($var, $echo=true, $label=null, $strict=true) {
    $label = ($label === null) ? '' : rtrim($label) . ' ';
    if (!$strict) {
        if (ini_get('html_errors')) {
            $output = print_r($var, true);
            $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
        } else {
            $output = $label . print_r($var, true);
        }
    } else {
        ob_start();
        var_dump($var);
        $output = ob_get_clean();
        if (!extension_loaded('xdebug')) {
            $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
            $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
        }
    }
    if ($echo) {
        echo($output);
        return null;
    }else
        return $output;
}

/**
 * 设置当前页面的布局
 * @param string|false $layout 布局名称 为false的时候表示关闭布局
 * @return void
 */
function layout($layout) {
    if(false !== $layout) {
        // 开启布局
        C('LAYOUT_ON',true);
        if(is_string($layout)) { // 设置新的布局模板
            C('LAYOUT_NAME',$layout);
        }
    }else{// 临时关闭布局
        C('LAYOUT_ON',false);
    }
}

/**
 * URL组装 支持不同URL模式
 * @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...'
 * @param string|array $vars 传入的参数,支持数组和字符串
 * @param string|boolean $suffix 伪静态后缀,默认为true表示获取配置值
 * @param boolean $domain 是否显示域名
 * @return string
 */
function U($url='',$vars='',$suffix=true,$domain=false) {
    // 解析URL
    $info   =  parse_url($url);
    $url    =  !empty($info['path'])?$info['path']:ACTION_NAME;
    if(isset($info['fragment'])) { // 解析锚点
        $anchor =   $info['fragment'];
        if(false !== strpos($anchor,'?')) { // 解析参数
            list($anchor,$info['query']) = explode('?',$anchor,2);
        }        
        if(false !== strpos($anchor,'@')) { // 解析域名
            list($anchor,$host)    =   explode('@',$anchor, 2);
        }
    }elseif(false !== strpos($url,'@')) { // 解析域名
        list($url,$host)    =   explode('@',$info['path'], 2);
    }
    // 解析子域名
    if(isset($host)) {
        $domain = $host.(strpos($host,'.')?'':strstr($_SERVER['HTTP_HOST'],'.'));
    }elseif($domain===true){
        $domain = $_SERVER['HTTP_HOST'];
        if(C('APP_SUB_DOMAIN_DEPLOY') ) { // 开启子域名部署
            $domain = $domain=='localhost'?'localhost':'www'.strstr($_SERVER['HTTP_HOST'],'.');
            // '子域名'=>array('模块[/控制器]');
            foreach (C('APP_SUB_DOMAIN_RULES') as $key => $rule) {
                $rule   =   is_array($rule)?$rule[0]:$rule;
                if(false === strpos($key,'*') && 0=== strpos($url,$rule)) {
                    $domain = $key.strstr($domain,'.'); // 生成对应子域名
                    $url    =  substr_replace($url,'',0,strlen($rule));
                    break;
                }
            }
        }
    }

    // 解析参数
    if(is_string($vars)) { // aaa=1&bbb=2 转换成数组
        parse_str($vars,$vars);
    }elseif(!is_array($vars)){
        $vars = array();
    }
    if(isset($info['query'])) { // 解析地址里面参数 合并到vars
        parse_str($info['query'],$params);
        $vars = array_merge($params,$vars);
    }
    
    // URL组装
    $depr       =   C('URL_PATHINFO_DEPR');
    $urlCase    =   C('URL_CASE_INSENSITIVE');
    if($url) {
        if(0=== strpos($url,'/')) {// 定义路由
            $route      =   true;
            $url        =   substr($url,1);
            if('/' != $depr) {
                $url    =   str_replace('/',$depr,$url);
            }
        }else{
            if('/' != $depr) { // 安全替换
                $url    =   str_replace('/',$depr,$url);
            }
            // 解析模块、控制器和操作
            $url        =   trim($url,$depr);
            $path       =   explode($depr,$url);
            $var        =   array();
            $varModule      =   C('VAR_MODULE');
            $varController  =   C('VAR_CONTROLLER');
            $varAction      =   C('VAR_ACTION');
            $var[$varAction]       =   !empty($path)?array_pop($path):ACTION_NAME;
            $var[$varController]   =   !empty($path)?array_pop($path):CONTROLLER_NAME;
            if($maps = C('URL_ACTION_MAP')) {
                if(isset($maps[strtolower($var[$varController])])) {
                    $maps    =   $maps[strtolower($var[$varController])];
                    if($action = array_search(strtolower($var[$varAction]),$maps)){
                        $var[$varAction] = $action;
                    }
                }
            }
            if($maps = C('URL_CONTROLLER_MAP')) {
                if($controller = array_search(strtolower($var[$varController]),$maps)){
                    $var[$varController] = $controller;
                }
            }
            if($urlCase) {
                $var[$varController]   =   parse_name($var[$varController]);
            }
            $module =   '';
            
            if(!empty($path)) {
                $var[$varModule]    =   implode($depr,$path);
            }else{
                if(C('MULTI_MODULE')) {
                    if(MODULE_NAME != C('DEFAULT_MODULE') || !C('MODULE_ALLOW_LIST')){
                        $var[$varModule]=   MODULE_NAME;
                    }
                }
            }
            if($maps = C('URL_MODULE_MAP')) {
                if($_module = array_search(strtolower($var[$varModule]),$maps)){
                    $var[$varModule] = $_module;
                }
            }
            if(isset($var[$varModule])){
                $module =   $var[$varModule];
                unset($var[$varModule]);
            }
            
        }
    }

    if(C('URL_MODEL') == 0) { // 普通模式URL转换
        $url        =   __APP__.'?'.C('VAR_MODULE')."={$module}&".http_build_query(array_reverse($var));
        if($urlCase){
            $url    =   strtolower($url);
        }        
        if(!empty($vars)) {
            $vars   =   http_build_query($vars);
            $url   .=   '&'.$vars;
        }
    }else{ // PATHINFO模式或者兼容URL模式
        if(isset($route)) {
            $url    =   __APP__.'/'.rtrim($url,$depr);
        }else{
            $module =   (defined('BIND_MODULE') && BIND_MODULE==$module )? '' : $module;
            $url    =   __APP__.'/'.($module?$module.MODULE_PATHINFO_DEPR:'').implode($depr,array_reverse($var));
        }
        if($urlCase){
            $url    =   strtolower($url);
        }
        if(!empty($vars)) { // 添加参数
            foreach ($vars as $var => $val){
                if('' !== trim($val))   $url .= $depr . $var . $depr . urlencode($val);
            }                
        }
        if($suffix) {
            $suffix   =  $suffix===true?C('URL_HTML_SUFFIX'):$suffix;
            if($pos = strpos($suffix, '|')){
                $suffix = substr($suffix, 0, $pos);
            }
            if($suffix && '/' != substr($url,-1)){
                $url  .=  '.'.ltrim($suffix,'.');
            }
        }
    }
    if(isset($anchor)){
        $url  .= '#'.$anchor;
    }
    if($domain) {
        $url   =  (is_ssl()?'https://':'http://').$domain.$url;
    }
    return $url;
}

/**
 * 渲染输出Widget
 * @param string $name Widget名称
 * @param array $data 传入的参数
 * @return void
 */
function W($name, $data=array()) {
    return R($name,$data,'Widget');
}

/**
 * 判断是否SSL协议
 * @return boolean
 */
function is_ssl() {
    if(isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))){
        return true;
    }elseif(isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'] )) {
        return true;
    }
    return false;
}

/**
 * URL重定向
 * @param string $url 重定向的URL地址
 * @param integer $time 重定向的等待时间(秒)
 * @param string $msg 重定向前的提示信息
 * @return void
 */
function redirect($url, $time=0, $msg='') {
    //多行URL地址支持
    $url        = str_replace(array("\n", "\r"), '', $url);
    if (empty($msg))
        $msg    = "系统将在{$time}秒之后自动跳转到{$url}!";
    if (!headers_sent()) {
        // redirect
        if (0 === $time) {
            header('Location: ' . $url);
        } else {
            header("refresh:{$time};url={$url}");
            echo($msg);
        }
        exit();
    } else {
        $str    = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>";
        if ($time != 0)
            $str .= $msg;
        exit($str);
    }
}

/**
 * 缓存管理
 * @param mixed $name 缓存名称,如果为数组表示进行缓存设置
 * @param mixed $value 缓存值
 * @param mixed $options 缓存参数
 * @return mixed
 */
function S($name,$value='',$options=null) {
    static $cache   =   '';
    if(is_array($options)){
        // 缓存操作的同时初始化
        $type       =   isset($options['type'])?$options['type']:'';
        $cache      =   Think\Cache::getInstance($type,$options);
    }elseif(is_array($name)) { // 缓存初始化
        $type       =   isset($name['type'])?$name['type']:'';
        $cache      =   Think\Cache::getInstance($type,$name);
        return $cache;
    }elseif(empty($cache)) { // 自动初始化
        $cache      =   Think\Cache::getInstance();
    }
    if(''=== $value){ // 获取缓存
        return $cache->get($name);
    }elseif(is_null($value)) { // 删除缓存
        return $cache->rm($name);
    }else { // 缓存数据
        if(is_array($options)) {
            $expire     =   isset($options['expire'])?$options['expire']:NULL;
        }else{
            $expire     =   is_numeric($options)?$options:NULL;
        }
        return $cache->set($name, $value, $expire);
    }
}

/**
 * 快速文件数据读取和保存 针对简单类型数据 字符串、数组
 * @param string $name 缓存名称
 * @param mixed $value 缓存值
 * @param string $path 缓存路径
 * @return mixed
 */
function F($name, $value='', $path=DATA_PATH) {
    static $_cache  =   array();
    $filename       =   $path . $name . '.php';
    if ('' !== $value) {
        if (is_null($value)) {
            // 删除缓存
            if(false !== strpos($name,'*')){
                return false; // TODO 
            }else{
                unset($_cache[$name]);
                return Think\Storage::unlink($filename,'F');
            }
        } else {
            Think\Storage::put($filename,serialize($value),'F');
            // 缓存数据
            $_cache[$name]  =   $value;
            return null;
        }
    }
    // 获取缓存数据
    if (isset($_cache[$name]))
        return $_cache[$name];
    if (Think\Storage::has($filename,'F')){
        $value      =   unserialize(Think\Storage::read($filename,'F'));
        $_cache[$name]  =   $value;
    } else {
        $value          =   false;
    }
    return $value;
}

/**
 * 根据PHP各种类型变量生成唯一标识号
 * @param mixed $mix 变量
 * @return string
 */
function to_guid_string($mix) {
    if (is_object($mix)) {
        return spl_object_hash($mix);
    } elseif (is_resource($mix)) {
        $mix = get_resource_type($mix) . strval($mix);
    } else {
        $mix = serialize($mix);
    }
    return md5($mix);
}

/**
 * XML编码
 * @param mixed $data 数据
 * @param string $root 根节点名
 * @param string $item 数字索引的子节点名
 * @param string $attr 根节点属性
 * @param string $id   数字索引子节点key转换的属性名
 * @param string $encoding 数据编码
 * @return string
 */
function xml_encode($data, $root='think', $item='item', $attr='', $id='id', $encoding='utf-8') {
    if(is_array($attr)){
        $_attr = array();
        foreach ($attr as $key => $value) {
            $_attr[] = "{$key}=\"{$value}\"";
        }
        $attr = implode(' ', $_attr);
    }
    $attr   = trim($attr);
    $attr   = empty($attr) ? '' : " {$attr}";
    $xml    = "<?xml version=\"1.0\" encoding=\"{$encoding}\"?>";
    $xml   .= "<{$root}{$attr}>";
    $xml   .= data_to_xml($data, $item, $id);
    $xml   .= "</{$root}>";
    return $xml;
}

/**
 * 数据XML编码
 * @param mixed  $data 数据
 * @param string $item 数字索引时的节点名称
 * @param string $id   数字索引key转换为的属性名
 * @return string
 */
function data_to_xml($data, $item='item', $id='id') {
    $xml = $attr = '';
    foreach ($data as $key => $val) {
        if(is_numeric($key)){
            $id && $attr = " {$id}=\"{$key}\"";
            $key  = $item;
        }
        $xml    .=  "<{$key}{$attr}>";
        $xml    .=  (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : $val;
        $xml    .=  "</{$key}>";
    }
    return $xml;
}

/**
 * session管理函数
 * @param string|array $name session名称 如果为数组则表示进行session设置
 * @param mixed $value session值
 * @return mixed
 */
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')])){
            session_id($_REQUEST[C('VAR_SESSION_ID')]);
        }elseif(isset($name['id'])) {
            session_id($name['id']);
        }
        if('common' == APP_MODE){ // 其它模式可能不支持
            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']);
        if(isset($name['expire']))          {
            ini_set('session.gc_maxlifetime',   $name['expire']);
            ini_set('session.cookie_lifetime',  $name['expire']);
        }
        if(isset($name['use_trans_sid']))   ini_set('session.use_trans_sid', $name['use_trans_sid']?1:0);
        if(isset($name['use_cookies']))     ini_set('session.use_cookies', $name['use_cookies']?1:0);
        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驱动
            $type   =   C('SESSION_TYPE');
            $class  =   strpos($type,'\\')? $type : 'Think\\Session\\Driver\\'. ucwords(strtolower($type));
            $hander =   new $class();
            session_set_save_handler(
                array(&$hander,"open"), 
                array(&$hander,"close"), 
                array(&$hander,"read"), 
                array(&$hander,"write"), 
                array(&$hander,"destroy"), 
                array(&$hander,"gc")); 
        }
        // 启动session
        if(C('SESSION_AUTO_START'))  session_start();
    }elseif('' === $value){ 
        if(''===$name){
            // 获取全部的session
            return $prefix ? $_SESSION[$prefix] : $_SESSION;
        }elseif(0===strpos($name,'[')) { // session 操作
            if('[pause]'==$name){ // 暂停session
                session_write_close();
            }elseif('[start]'==$name){ // 启动session
                session_start();
            }elseif('[destroy]'==$name){ // 销毁session
                $_SESSION =  array();
                session_unset();
                session_destroy();
            }elseif('[regenerate]'==$name){ // 重新生成id
                session_regenerate_id();
            }
        }elseif(0===strpos($name,'?')){ // 检查session
            $name   =  substr($name,1);
            if(strpos($name,'.')){ // 支持数组
                list($name1,$name2) =   explode('.',$name);
                return $prefix?isset($_SESSION[$prefix][$name1][$name2]):isset($_SESSION[$name1][$name2]);
            }else{
                return $prefix?isset($_SESSION[$prefix][$name]):isset($_SESSION[$name]);
            }
        }elseif(is_null($name)){ // 清空session
            if($prefix) {
                unset($_SESSION[$prefix]);
            }else{
                $_SESSION = array();
            }
        }elseif($prefix){ // 获取session
            if(strpos($name,'.')){
                list($name1,$name2) =   explode('.',$name);
                return isset($_SESSION[$prefix][$name1][$name2])?$_SESSION[$prefix][$name1][$name2]:null;  
            }else{
                return isset($_SESSION[$prefix][$name])?$_SESSION[$prefix][$name]:null;                
            }            
        }else{
            if(strpos($name,'.')){
                list($name1,$name2) =   explode('.',$name);
                return isset($_SESSION[$name1][$name2])?$_SESSION[$name1][$name2]:null;  
            }else{
                return isset($_SESSION[$name])?$_SESSION[$name]:null;
            }            
        }
    }elseif(is_null($value)){ // 删除session
        if(strpos($name,'.')){
            list($name1,$name2) =   explode('.',$name);
            if($prefix){
                unset($_SESSION[$prefix][$name1][$name2]);
            }else{
                unset($_SESSION[$name1][$name2]);
            }
        }else{
            if($prefix){
                unset($_SESSION[$prefix][$name]);
            }else{
                unset($_SESSION[$name]);
            }
        }
    }else{ // 设置session
		if(strpos($name,'.')){
			list($name1,$name2) =   explode('.',$name);
			if($prefix){
				$_SESSION[$prefix][$name1][$name2]   =  $value;
			}else{
				$_SESSION[$name1][$name2]  =  $value;
			}
		}else{
			if($prefix){
				$_SESSION[$prefix][$name]   =  $value;
			}else{
				$_SESSION[$name]  =  $value;
			}
		}
    }
    return null;
}

/**
 * Cookie 设置、获取、删除
 * @param string $name cookie名称
 * @param mixed $value cookie值
 * @param mixed $option cookie参数
 * @return mixed
 */
function cookie($name='', $value='', $option=null) {
    // 默认设置
    $config = array(
        'prefix'    =>  C('COOKIE_PREFIX'), // cookie 名称前缀
        'expire'    =>  C('COOKIE_EXPIRE'), // cookie 保存时间
        'path'      =>  C('COOKIE_PATH'), // cookie 保存路径
        'domain'    =>  C('COOKIE_DOMAIN'), // cookie 有效域名
        'secure'    =>  C('COOKIE_SECURE'), //  cookie 启用安全传输
        'httponly'  =>  C('COOKIE_HTTPONLY'), // httponly设置
    );
    // 参数设置(会覆盖黙认设置)
    if (!is_null($option)) {
        if (is_numeric($option))
            $option = array('expire' => $option);
        elseif (is_string($option))
            parse_str($option, $option);
        $config     = array_merge($config, array_change_key_case($option));
    }
    if(!empty($config['httponly'])){
        ini_set("session.cookie_httponly", 1);
    }
    // 清除指定前缀的所有cookie
    if (is_null($name)) {
        if (empty($_COOKIE))
            return null;
        // 要删除的cookie前缀,不指定则删除config设置的指定前缀
        $prefix = empty($value) ? $config['prefix'] : $value;
        if (!empty($prefix)) {// 如果前缀为空字符串将不作处理直接返回
            foreach ($_COOKIE as $key => $val) {
                if (0 === stripos($key, $prefix)) {
                    setcookie($key, '', time() - 3600, $config['path'], $config['domain'],$config['secure'],$config['httponly']);
                    unset($_COOKIE[$key]);
                }
            }
        }
        return null;
    }elseif('' === $name){
        // 获取全部的cookie
        return $_COOKIE;
    }
    $name = $config['prefix'] . str_replace('.', '_', $name);
    if ('' === $value) {
        if(isset($_COOKIE[$name])){
            $value =    $_COOKIE[$name];
            if(0===strpos($value,'think:')){
                $value  =   substr($value,6);
                return array_map('urldecode',json_decode(MAGIC_QUOTES_GPC?stripslashes($value):$value,true));
            }else{
                return $value;
            }
        }else{
            return null;
        }
    } else {
        if (is_null($value)) {
            setcookie($name, '', time() - 3600, $config['path'], $config['domain'],$config['secure'],$config['httponly']);
            unset($_COOKIE[$name]); // 删除指定cookie
        } else {
            // 设置cookie
            if(is_array($value)){
                $value  = 'think:'.json_encode(array_map('urlencode',$value));
            }
            $expire = !empty($config['expire']) ? time() + intval($config['expire']) : 0;
            setcookie($name, $value, $expire, $config['path'], $config['domain'],$config['secure'],$config['httponly']);
            $_COOKIE[$name] = $value;
        }
    }
    return null;
}

/**
 * 加载动态扩展文件
 * @var string $path 文件路径
 * @return void
 */
function load_ext_file($path) {
    // 加载自定义外部文件
    if($files = C('LOAD_EXT_FILE')) {
        $files      =  explode(',',$files);
        foreach ($files as $file){
            $file   = $path.'Common/'.$file.'.php';
            if(is_file($file)) include $file;
        }
    }
    // 加载自定义的动态配置文件
    if($configs = C('LOAD_EXT_CONFIG')) {
        if(is_string($configs)) $configs =  explode(',',$configs);
        foreach ($configs as $key=>$config){
            $file   = is_file($config)? $config : $path.'Conf/'.$config.CONF_EXT;
            if(is_file($file)) {
                is_numeric($key)?C(load_config($file)):C($key,load_config($file));
            }
        }
    }
}

/**
 * 获取客户端IP地址
 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @param boolean $adv 是否进行高级模式获取(有可能被伪装) 
 * @return mixed
 */
function get_client_ip($type = 0,$adv=false) {
    $type       =  $type ? 1 : 0;
    static $ip  =   NULL;
    if ($ip !== NULL) return $ip[$type];
    if($adv){
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            $pos    =   array_search('unknown',$arr);
            if(false !== $pos) unset($arr[$pos]);
            $ip     =   trim($arr[0]);
        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $ip     =   $_SERVER['HTTP_CLIENT_IP'];
        }elseif (isset($_SERVER['REMOTE_ADDR'])) {
            $ip     =   $_SERVER['REMOTE_ADDR'];
        }
    }elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip     =   $_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u",ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}

/**
 * 发送HTTP状态
 * @param integer $code 状态码
 * @return void
 */
function send_http_status($code) {
    static $_status = array(
            // Informational 1xx
            100 => 'Continue',
            101 => 'Switching Protocols',
            // Success 2xx
            200 => 'OK',
            201 => 'Created',
            202 => 'Accepted',
            203 => 'Non-Authoritative Information',
            204 => 'No Content',
            205 => 'Reset Content',
            206 => 'Partial Content',
            // Redirection 3xx
            300 => 'Multiple Choices',
            301 => 'Moved Permanently',
            302 => 'Moved Temporarily ',  // 1.1
            303 => 'See Other',
            304 => 'Not Modified',
            305 => 'Use Proxy',
            // 306 is deprecated but reserved
            307 => 'Temporary Redirect',
            // Client Error 4xx
            400 => 'Bad Request',
            401 => 'Unauthorized',
            402 => 'Payment Required',
            403 => 'Forbidden',
            404 => 'Not Found',
            405 => 'Method Not Allowed',
            406 => 'Not Acceptable',
            407 => 'Proxy Authentication Required',
            408 => 'Request Timeout',
            409 => 'Conflict',
            410 => 'Gone',
            411 => 'Length Required',
            412 => 'Precondition Failed',
            413 => 'Request Entity Too Large',
            414 => 'Request-URI Too Long',
            415 => 'Unsupported Media Type',
            416 => 'Requested Range Not Satisfiable',
            417 => 'Expectation Failed',
            // Server Error 5xx
            500 => 'Internal Server Error',
            501 => 'Not Implemented',
            502 => 'Bad Gateway',
            503 => 'Service Unavailable',
            504 => 'Gateway Timeout',
            505 => 'HTTP Version Not Supported',
            509 => 'Bandwidth Limit Exceeded'
    );
    if(isset($_status[$code])) {
        header('HTTP/1.1 '.$code.' '.$_status[$code]);
        // 确保FastCGI模式下正常
        header('Status:'.$code.' '.$_status[$code]);
    }
}

function think_filter(&$value){
	// TODO 其他安全过滤

	// 过滤查询特殊字符
    if(preg_match('/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN)$/i',$value)){
        $value .= ' ';
    }
}

// 不区分大小写的in_array实现
function in_array_case($value,$array){
    return in_array(strtolower($value),array_map('strtolower',$array));
}


================================================
FILE: ThinkPHP/Conf/convention.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

/**
 * ThinkPHP惯例配置文件
 * 该文件请不要修改,如果要覆盖惯例配置的值,可在应用配置文件中设定和惯例不符的配置项
 * 配置名称大小写任意,系统会统一转换成小写
 * 所有配置参数都可以在生效前动态改变
 */
defined('THINK_PATH') or exit();
return  array(
    /* 应用设定 */
    'APP_USE_NAMESPACE'     =>  true,    // 应用类库是否使用命名空间
    'APP_SUB_DOMAIN_DEPLOY' =>  false,   // 是否开启子域名部署
    'APP_SUB_DOMAIN_RULES'  =>  array(), // 子域名部署规则
    'APP_DOMAIN_SUFFIX'     =>  '', // 域名后缀 如果是com.cn net.cn 之类的后缀必须设置    
    'ACTION_SUFFIX'         =>  '', // 操作方法后缀
    'MULTI_MODULE'          =>  true, // 是否允许多模块 如果为false 则必须设置 DEFAULT_MODULE
    'MODULE_DENY_LIST'      =>  array('Common','Runtime'),
    'CONTROLLER_LEVEL'      =>  1,
    'APP_AUTOLOAD_LAYER'    =>  'Controller,Model', // 自动加载的应用类库层 关闭APP_USE_NAMESPACE后有效
    'APP_AUTOLOAD_PATH'     =>  '', // 自动加载的路径 关闭APP_USE_NAMESPACE后有效

    /* Cookie设置 */
    'COOKIE_EXPIRE'         =>  0,       // Cookie有效期
    'COOKIE_DOMAIN'         =>  '',      // Cookie有效域名
    'COOKIE_PATH'           =>  '/',     // Cookie路径
    'COOKIE_PREFIX'         =>  '',      // Cookie前缀 避免冲突
    'COOKIE_SECURE'         =>  false,   // Cookie安全传输
    'COOKIE_HTTPONLY'       =>  '',      // Cookie httponly设置

    /* 默认设定 */
    'DEFAULT_M_LAYER'       =>  'Model', // 默认的模型层名称
    'DEFAULT_C_LAYER'       =>  'Controller', // 默认的控制器层名称
    'DEFAULT_V_LAYER'       =>  'View', // 默认的视图层名称
    'DEFAULT_LANG'          =>  'zh-cn', // 默认语言
    'DEFAULT_THEME'         =>  '',	// 默认模板主题名称
    'DEFAULT_MODULE'        =>  'Home',  // 默认模块
    'DEFAULT_CONTROLLER'    =>  'Index', // 默认控制器名称
    'DEFAULT_ACTION'        =>  'index', // 默认操作名称
    'DEFAULT_CHARSET'       =>  'utf-8', // 默认输出编码
    'DEFAULT_TIMEZONE'      =>  'PRC',	// 默认时区
    'DEFAULT_AJAX_RETURN'   =>  'JSON',  // 默认AJAX 数据返回格式,可选JSON XML ...
    'DEFAULT_JSONP_HANDLER' =>  'jsonpReturn', // 默认JSONP格式返回的处理方法
    'DEFAULT_FILTER'        =>  'htmlspecialchars', // 默认参数过滤方法 用于I函数...

    /* 数据库设置 */
    'DB_TYPE'               =>  '',     // 数据库类型
    'DB_HOST'               =>  '', // 服务器地址
    'DB_NAME'               =>  '',          // 数据库名
    'DB_USER'               =>  '',      // 用户名
    'DB_PWD'                =>  '',          // 密码
    'DB_PORT'               =>  '',        // 端口
    'DB_PREFIX'             =>  '',    // 数据库表前缀
    'DB_PARAMS'          	=>  array(), // 数据库连接参数    
    'DB_DEBUG'  			=>  TRUE, // 数据库调试模式 开启后可以记录SQL日志
    'DB_FIELDS_CACHE'       =>  true,        // 启用字段缓存
    'DB_CHARSET'            =>  'utf8',      // 数据库编码默认采用utf8
    'DB_DEPLOY_TYPE'        =>  0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'DB_RW_SEPARATE'        =>  false,       // 数据库读写是否分离 主从式有效
    'DB_MASTER_NUM'         =>  1, // 读写分离后 主服务器数量
    'DB_SLAVE_NO'           =>  '', // 指定从服务器序号

    /* 数据缓存设置 */
    'DATA_CACHE_TIME'       =>  0,      // 数据缓存有效期 0表示永久缓存
    'DATA_CACHE_COMPRESS'   =>  false,   // 数据缓存是否压缩缓存
    'DATA_CACHE_CHECK'      =>  false,   // 数据缓存是否校验缓存
    'DATA_CACHE_PREFIX'     =>  '',     // 缓存前缀
    'DATA_CACHE_TYPE'       =>  'File',  // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
    'DATA_CACHE_PATH'       =>  TEMP_PATH,// 缓存路径设置 (仅对File方式缓存有效)
    'DATA_CACHE_KEY'        =>  '',	// 缓存文件KEY (仅对File方式缓存有效)    
    'DATA_CACHE_SUBDIR'     =>  false,    // 使用子目录缓存 (自动根据缓存标识的哈希创建子目录)
    'DATA_PATH_LEVEL'       =>  1,        // 子目录缓存级别

    /* 错误设置 */
    'ERROR_MESSAGE'         =>  '页面错误!请稍后再试~',//错误显示信息,非调试模式有效
    'ERROR_PAGE'            =>  '',	// 错误定向页面
    'SHOW_ERROR_MSG'        =>  false,    // 显示错误信息
    'TRACE_MAX_RECORD'      =>  100,    // 每个级别的错误信息 最大记录数

    /* 日志设置 */
    'LOG_RECORD'            =>  false,   // 默认不记录日志
    'LOG_TYPE'              =>  'File', // 日志记录类型 默认为文件方式
    'LOG_LEVEL'             =>  'EMERG,ALERT,CRIT,ERR',// 允许记录的日志级别
    'LOG_FILE_SIZE'         =>  2097152,	// 日志文件大小限制
    'LOG_EXCEPTION_RECORD'  =>  false,    // 是否记录异常信息日志

    /* SESSION设置 */
    'SESSION_AUTO_START'    =>  true,    // 是否自动开启Session
    'SESSION_OPTIONS'       =>  array(), // session 配置数组 支持type name id path expire domain 等参数
    'SESSION_TYPE'          =>  '', // session hander类型 默认无需设置 除非扩展了session hander驱动
    'SESSION_PREFIX'        =>  '', // session 前缀
    //'VAR_SESSION_ID'      =>  'session_id',     //sessionID的提交变量

    /* 模板引擎设置 */
    'TMPL_CONTENT_TYPE'     =>  'text/html', // 默认模板输出类型
    'TMPL_ACTION_ERROR'     =>  THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认错误跳转对应的模板文件
    'TMPL_ACTION_SUCCESS'   =>  THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认成功跳转对应的模板文件
    'TMPL_EXCEPTION_FILE'   =>  THINK_PATH.'Tpl/think_exception.tpl',// 异常页面的模板文件
    'TMPL_DETECT_THEME'     =>  false,       // 自动侦测模板主题
    'TMPL_TEMPLATE_SUFFIX'  =>  '.html',     // 默认模板文件后缀
    'TMPL_FILE_DEPR'        =>  '/', //模板文件CONTROLLER_NAME与ACTION_NAME之间的分割符
    // 布局设置
    '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'       =>  '',   // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔 
    
    /* URL设置 */
    'URL_CASE_INSENSITIVE'  =>  true,   // 默认false 表示URL区分大小写 true则表示不区分大小写
    'URL_MODEL'             =>  1,       // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE  模式); 3 (兼容模式)  默认为PATHINFO 模式
    'URL_PATHINFO_DEPR'     =>  '/',	// PATHINFO模式下,各参数之间的分割符号
    'URL_PATHINFO_FETCH'    =>  'ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL', // 用于兼容判断PATH_INFO 参数的SERVER替代变量列表
    'URL_REQUEST_URI'       =>  'REQUEST_URI', // 获取当前页面地址的系统变量 默认为REQUEST_URI
    'URL_HTML_SUFFIX'       =>  'html',  // URL伪静态后缀设置
    'URL_DENY_SUFFIX'       =>  'ico|png|gif|jpg', // URL禁止访问的后缀设置
    'URL_PARAMS_BIND'       =>  true, // URL变量绑定到Action方法参数
    'URL_PARAMS_BIND_TYPE'  =>  0, // URL变量绑定的类型 0 按变量名绑定 1 按变量顺序绑定
    'URL_PARAMS_FILTER'     =>  false, // URL变量绑定过滤
    'URL_PARAMS_FILTER_TYPE'=>  '', // URL变量绑定过滤方法 如果为空 调用DEFAULT_FILTER
    'URL_ROUTER_ON'         =>  false,   // 是否开启URL路由
    'URL_ROUTE_RULES'       =>  array(), // 默认路由规则 针对模块
    'URL_MAP_RULES'         =>  array(), // URL映射定义规则

    /* 系统变量名称设置 */
    'VAR_MODULE'            =>  'm',     // 默认模块获取变量
    'VAR_ADDON'             =>  'addon',     // 默认的插件控制器命名空间变量
    'VAR_CONTROLLER'        =>  'c',    // 默认控制器获取变量
    'VAR_ACTION'            =>  'a',    // 默认操作获取变量
    'VAR_AJAX_SUBMIT'       =>  'ajax',  // 默认的AJAX提交变量
    'VAR_JSONP_HANDLER'     =>  'callback',
    'VAR_PATHINFO'          =>  's',    // 兼容模式PATHINFO获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_DEPR
    'VAR_TEMPLATE'          =>  't',    // 默认模板切换变量
    'VAR_AUTO_STRING'		=>	false,	// 输入变量是否自动强制转换为字符串 如果开启则数组变量需要手动传入变量修饰符获取变量

    'HTTP_CACHE_CONTROL'    =>  'private',  // 网页缓存控制
    'CHECK_APP_DIR'         =>  true,       // 是否检查应用目录是否创建
    'FILE_UPLOAD_TYPE'      =>  'Local',    // 文件上传方式
    'DATA_CRYPT_TYPE'       =>  'Think',    // 数据加密方式

);


================================================
FILE: ThinkPHP/Conf/debug.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

/**
 * ThinkPHP 默认的调试模式配置文件
 */
defined('THINK_PATH') or exit();
// 调试模式下面默认设置 可以在应用配置目录下重新定义 debug.php 覆盖
return  array(
    'LOG_RECORD'            =>  true,  // 进行日志记录
    'LOG_EXCEPTION_RECORD'  =>  true,    // 是否记录异常信息日志
    'LOG_LEVEL'             =>  'EMERG,ALERT,CRIT,ERR,WARN,NOTIC,INFO,DEBUG,SQL',  // 允许记录的日志级别
    'DB_FIELDS_CACHE'       =>  false, // 字段缓存信息
    'DB_DEBUG'				=>  true, // 开启调试模式 记录SQL日志
    'TMPL_CACHE_ON'         =>  false,        // 是否开启模板编译缓存,设为false则每次都会重新编译
    'TMPL_STRIP_SPACE'      =>  false,       // 是否去除模板文件里面的html空格与换行
    'SHOW_ERROR_MSG'        =>  true,    // 显示错误信息
    'URL_CASE_INSENSITIVE'  =>  false,  // URL区分大小写
);

================================================
FILE: ThinkPHP/LICENSE.txt
================================================

ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
版权所有Copyright © 2006-2014 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.


================================================
FILE: ThinkPHP/Lang/en-us.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

/**
 * ThinkPHP English language package
 */
return array(
    /* core language package */ 
    '_MODULE_NOT_EXIST_'     => "Module can't be loaded",
    '_CONTROLLER_NOT_EXIST_' =>	"Controller can't be loaded",
    '_ERROR_ACTION_'         => 'Illegal Action',
    '_LANGUAGE_NOT_LOAD_'    => "Can't load language package",
    '_TEMPLATE_NOT_EXIST_'   => "Template doesn't exist",
    '_MODULE_'               => 'Module',
    '_ACTION_'               => 'Action',
    '_MODEL_NOT_EXIST_'      => "Model can't be loaded",
    '_VALID_ACCESS_'         => 'No access',
    '_XML_TAG_ERROR_'        => 'XML tag syntax errors',
    '_DATA_TYPE_INVALID_'    => 'Illegal data objects!',
    '_OPERATION_WRONG_'      => 'Operation error occurs',
    '_NOT_LOAD_DB_'          => 'Unable to load the database',
    '_NO_DB_DRIVER_'         => 'Unable to load database driver',
    '_NOT_SUPPORT_DB_'       => 'The system is temporarily not support database',
    '_NO_DB_CONFIG_'         => 'Not define the database configuration',
    '_NOT_SUPPORT_'          => 'The system does not support',
    '_CACHE_TYPE_INVALID_'   => 'Unable to load the cache type',
    '_FILE_NOT_WRITABLE_'   => 'Directory (file) is not writable',
    '_METHOD_NOT_EXIST_'     => 'The method you requested  does not exist!',
    '_CLASS_NOT_EXIST_'      => 'Instantiating a class does not exist!',
    '_CLASS_CONFLICT_'       => 'Class name conflicts',
    '_TEMPLATE_ERROR_'       => 'Template Engine errors',
    '_CACHE_WRITE_ERROR_'    => 'Cache file write failed!',
    '_TAGLIB_NOT_EXIST_'     => 'Tag library is not defined',
    '_OPERATION_FAIL_'       => 'Operation failed!',
    '_OPERATION_SUCCESS_'    => 'Operation succeed!',
    '_SELECT_NOT_EXIST_'     => 'Record does not exist!',
    '_EXPRESS_ERROR_'        => 'Expression errors',
    '_TOKEN_ERROR_'          => "Form's token errors",
    '_RECORD_HAS_UPDATE_'    => 'Record has been updated',
    '_NOT_ALLOW_PHP_'        => 'PHP codes are not allowed in the template',
    '_PARAM_ERROR_'          => 'Parameter error or undefined',
    '_ERROR_QUERY_EXPRESS_'  => 'Query express error',       
);


================================================
FILE: ThinkPHP/Lang/pt-br.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Daiane Azevedo <daianeaze16@gmail.com>
// +----------------------------------------------------------------------

/**
 * ThinkPHP Portuguese language package
 */
return array(
    /* core language package */ 
    '_MODULE_NOT_EXIST_'     => "Módulo não pode ser carregado",
    '_CONTROLLER_NOT_EXIST_' => "Controller não pode ser carregado",
    '_ERROR_ACTION_'         => 'Ação ilegal',
    '_LANGUAGE_NOT_LOAD_'    => "Não é possível carregar pacote da linguagem",
    '_TEMPLATE_NOT_EXIST_'   => "Template não existe",
    '_MODULE_'               => 'Módulo',
    '_ACTION_'               => 'Ação',
    '_MODEL_NOT_EXIST_'      => "Modelo não pode ser carregado",
    '_VALID_ACCESS_'         => 'Sem acesso',
    '_XML_TAG_ERROR_'        => 'Erro de sintaxe - XML tag',
    '_DATA_TYPE_INVALID_'    => 'Tipos de dados ilegais!',
    '_OPERATION_WRONG_'      => 'Erro na operação',
    '_NOT_LOAD_DB_'          => 'Impossível carregar banco de dados',
    '_NO_DB_DRIVER_'         => 'Impossível carregar driver do bando de dados',
    '_NOT_SUPPORT_DB_'       => 'Temporariamente sem suporte ao banco',
    '_NO_DB_CONFIG_'         => 'Não define a configuração do banco',
    '_NOT_SUPPORT_'          => 'O sistema não suporta',
    '_CACHE_TYPE_INVALID_'   => 'Impossível carregar o tipo de cache',
    '_FILE_NOT_WRITABLE_'   => 'Diretório (arquivo) não pode ser escrito',
    '_METHOD_NOT_EXIST_'     => 'O método solicitado não existe!',
    '_CLASS_NOT_EXIST_'      => 'Não existe instância da classe',
    '_CLASS_CONFLICT_'       => 'Conflitos com nome da classe',
    '_TEMPLATE_ERROR_'       => 'Erros na contrução do template',
    '_CACHE_WRITE_ERROR_'    => 'Escrita do arquivo de cache falhou!',
    '_TAGLIB_NOT_EXIST_'     => 'Biblioteca da tag não foi definida',
    '_OPERATION_FAIL_'       => 'Operação falhou!',
    '_OPERATION_SUCCESS_'    => 'Operação bem sucessida!',
    '_SELECT_NOT_EXIST_'     => 'Gravação não existe!',
    '_EXPRESS_ERROR_'        => 'Erros de expressão',
    '_TOKEN_ERROR_'          => 'Erro no token do formulário',
    '_RECORD_HAS_UPDATE_'    => 'Gravação não foi atualizada',
    '_NOT_ALLOW_PHP_'        => 'Código PHP não é permitido no template',
    '_PARAM_ERROR_'          => 'Parâmetro errado ou indefinido',
    '_ERROR_QUERY_EXPRESS_'  => 'Erros na expressão da query',       
);


================================================
FILE: ThinkPHP/Lang/zh-cn.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

/**
 * ThinkPHP 简体中文语言包
 */
return array(
    /* 核心语言变量 */  
    '_MODULE_NOT_EXIST_'     => '无法加载模块',
    '_CONTROLLER_NOT_EXIST_' =>	'无法加载控制器',
    '_ERROR_ACTION_'         => '非法操作',
    '_LANGUAGE_NOT_LOAD_'    => '无法加载语言包',
    '_TEMPLATE_NOT_EXIST_'   => '模板不存在',
    '_MODULE_'               => '模块',
    '_ACTION_'               => '操作',
    '_MODEL_NOT_EXIST_'      => '模型不存在或者没有定义',
    '_VALID_ACCESS_'         => '没有权限',
    '_XML_TAG_ERROR_'        => 'XML标签语法错误',
    '_DATA_TYPE_INVALID_'    => '非法数据对象!',
    '_OPERATION_WRONG_'      => '操作出现错误',
    '_NOT_LOAD_DB_'          => '无法加载数据库',
    '_NO_DB_DRIVER_'         => '无法加载数据库驱动',
    '_NOT_SUPPORT_DB_'       => '系统暂时不支持数据库',
    '_NO_DB_CONFIG_'         => '没有定义数据库配置',
    '_NOT_SUPPORT_'          => '系统不支持',
    '_CACHE_TYPE_INVALID_'   => '无法加载缓存类型',
    '_FILE_NOT_WRITABLE_'   => '目录(文件)不可写',
    '_METHOD_NOT_EXIST_'     => '方法不存在!',
    '_CLASS_NOT_EXIST_'      => '实例化一个不存在的类!',
    '_CLASS_CONFLICT_'       => '类名冲突',
    '_TEMPLATE_ERROR_'       => '模板引擎错误',
    '_CACHE_WRITE_ERROR_'    => '缓存文件写入失败!',
    '_TAGLIB_NOT_EXIST_'     => '标签库未定义',
    '_OPERATION_FAIL_'       => '操作失败!',
    '_OPERATION_SUCCESS_'    => '操作成功!',
    '_SELECT_NOT_EXIST_'     => '记录不存在!',
    '_EXPRESS_ERROR_'        => '表达式错误',
    '_TOKEN_ERROR_'          => '表单令牌错误',
    '_RECORD_HAS_UPDATE_'    => '记录已经更新',
    '_NOT_ALLOW_PHP_'        => '模板禁用PHP代码',
    '_PARAM_ERROR_'          => '参数错误或者未定义',
    '_ERROR_QUERY_EXPRESS_'  => '错误的查询条件',
);


================================================
FILE: ThinkPHP/Lang/zh-tw.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

/**
 * ThinkPHP 繁体中文語言包
 */
return array(
    /* 核心語言變數 */  
    '_MODULE_NOT_EXIST_'     => '無法載入模組',
    '_CONTROLLER_NOT_EXIST_' => '無法載入控制器',
    '_ERROR_ACTION_'         => '非法操作',
    '_LANGUAGE_NOT_LOAD_'    => '無法載入語言包',
    '_TEMPLATE_NOT_EXIST_'   => '模板不存在',
    '_MODULE_'               => '模組',
    '_ACTION_'               => '操作',
    '_MODEL_NOT_EXIST_'      => '模型不存在或者沒有定義',
    '_VALID_ACCESS_'         => '沒有權限',
    '_XML_TAG_ERROR_'        => 'XML標籤語法錯誤',
    '_DATA_TYPE_INVALID_'    => '非法資料物件!',
    '_OPERATION_WRONG_'      => '操作出現錯誤',
    '_NOT_LOAD_DB_'          => '無法載入資料庫',
    '_NO_DB_DRIVER_'         => '無法載入資料庫驅動',
    '_NOT_SUPPORT_DB_'       => '系統暫時不支援資料庫',
    '_NO_DB_CONFIG_'         => '沒有定義資料庫設定',
    '_NOT_SUPPORT_'          => '系統不支援',
    '_CACHE_TYPE_INVALID_'   => '無法載入快取類型',
    '_FILE_NOT_WRITABLE_'   => '目錄(檔案)不可寫',
    '_METHOD_NOT_EXIST_'     => '方法不存在!',
    '_CLASS_NOT_EXIST_'      => '實例化一個不存在的類別!',
    '_CLASS_CONFLICT_'       => '類別名稱衝突',
    '_TEMPLATE_ERROR_'       => '模板引擎錯誤',
    '_CACHE_WRITE_ERROR_'    => '快取檔案寫入失敗!',
    '_TAGLIB_NOT_EXIST_'     => '標籤庫未定義',
    '_OPERATION_FAIL_'       => '操作失敗!',
    '_OPERATION_SUCCESS_'    => '操作成功!',
    '_SELECT_NOT_EXIST_'     => '記錄不存在!',
    '_EXPRESS_ERROR_'        => '運算式錯誤',
    '_TOKEN_ERROR_'          => '表單權限錯誤',
    '_RECORD_HAS_UPDATE_'    => '記錄已經更新',
    '_NOT_ALLOW_PHP_'        => '模板禁用PHP代碼',
    '_PARAM_ERROR_'          => '參數錯誤或者未定義',
    '_ERROR_QUERY_EXPRESS_'  => '錯誤的查詢條件',    
);


================================================
FILE: ThinkPHP/Library/Behavior/AgentCheckBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
/**
 * 行为扩展:代理检测
 */
class AgentCheckBehavior {
    public function run(&$params) {
        // 代理访问检测
        $limitProxyVisit =  C('LIMIT_PROXY_VISIT',null,true);
        if($limitProxyVisit && ($_SERVER['HTTP_X_FORWARDED_FOR'] || $_SERVER['HTTP_VIA'] || $_SERVER['HTTP_PROXY_CONNECTION'] || $_SERVER['HTTP_USER_AGENT_VIA'])) {
            // 禁止代理访问
            exit('Access Denied');
        }
    }
}


================================================
FILE: ThinkPHP/Library/Behavior/BorisBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
use Think\Think;
/**
 * Boris行为扩展
 */
class BorisBehavior {
    public function run(&$params) {
        if(IS_CLI){
            if(!function_exists('pcntl_signal'))
                E("pcntl_signal not working.\nRepl mode based on Linux OS or PHP for OS X(http://php-osx.liip.ch/)\n");
            Think::addMap(array(
                'Boris\Boris'               => VENDOR_PATH . 'Boris/Boris.php',
                'Boris\Config'              => VENDOR_PATH . 'Boris/Config.php',
                'Boris\CLIOptionsHandler'   => VENDOR_PATH . 'Boris/CLIOptionsHandler.php',
                'Boris\ColoredInspector'    => VENDOR_PATH . 'Boris/ColoredInspector.php',
                'Boris\DumpInspector'       => VENDOR_PATH . 'Boris/DumpInspector.php',
                'Boris\EvalWorker'          => VENDOR_PATH . 'Boris/EvalWorker.php',    
                'Boris\ExportInspector'     => VENDOR_PATH . 'Boris/ExportInspector.php',
                'Boris\Inspector'           => VENDOR_PATH . 'Boris/Inspector.php',
                'Boris\ReadlineClient'      => VENDOR_PATH . 'Boris/ReadlineClient.php',
                'Boris\ShallowParser'       => VENDOR_PATH . 'Boris/ShallowParser.php',
            ));
            $boris      =   new \Boris\Boris(">>> ");
            $config     =   new \Boris\Config();
            $config->apply($boris, true);
            $options    =   new \Boris\CLIOptionsHandler();
            $options->handle($boris);
            $boris->onStart(sprintf("echo 'REPL MODE FOR THINKPHP \nTHINKPHP_VERSION: %s, PHP_VERSION: %s, BORIS_VERSION: %s\n';", THINK_VERSION, PHP_VERSION, $boris::VERSION));
            $boris->start();
        }
    }
}


================================================
FILE: ThinkPHP/Library/Behavior/BrowserCheckBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
/**
 * 浏览器防刷新检测
 */
class BrowserCheckBehavior {
    public function run(&$params) {
        if($_SERVER['REQUEST_METHOD'] == 'GET') {
            //	启用页面防刷新机制
            $guid	=	md5($_SERVER['PHP_SELF']);
            // 浏览器防刷新的时间间隔(秒) 默认为10
            $refleshTime    =   C('LIMIT_REFLESH_TIMES',null,10);
            // 检查页面刷新间隔
            if(cookie('_last_visit_time_'.$guid) && cookie('_last_visit_time_'.$guid)>time()-$refleshTime) {
                // 页面刷新读取浏览器缓存
                header('HTTP/1.1 304 Not Modified');
                exit;
            }else{
                // 缓存当前地址访问时间
                cookie('_last_visit_time_'.$guid, $_SERVER['REQUEST_TIME']);
                //header('Last-Modified:'.(date('D,d M Y H:i:s',$_SERVER['REQUEST_TIME']-C('LIMIT_REFLESH_TIMES'))).' GMT');
            }
        }
    }
}

================================================
FILE: ThinkPHP/Library/Behavior/BuildLiteBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
// 创建Lite运行文件
// 可以替换框架入口文件运行
// 建议绑定位置app_init
class BuildLiteBehavior {
    public function run(&$params) {
        if(!defined('BUILD_LITE_FILE')) return ;
        $litefile   =   C('RUNTIME_LITE_FILE',null,RUNTIME_PATH.'lite.php');
        if(is_file($litefile)) return;
        
        $defs       =   get_defined_constants(TRUE);
        $content    =   'namespace {$GLOBALS[\'_beginTime\'] = microtime(TRUE);';
        if(MEMORY_LIMIT_ON) {
            $content .= '$GLOBALS[\'_startUseMems\'] = memory_get_usage();';
        }

        // 生成数组定义
        unset($defs['user']['BUILD_LITE_FILE']);
        $content   .=   $this->buildArrayDefine($defs['user']).'}';

        // 读取编译列表文件
        $filelist   =   is_file(CONF_PATH.'lite.php')?
            include CONF_PATH.'lite.php':
            array(
                THINK_PATH.'Common/functions.php',
                COMMON_PATH.'Common/function.php',
                CORE_PATH . 'Think'.EXT,
                CORE_PATH . 'Hook'.EXT,
                CORE_PATH . 'App'.EXT,
                CORE_PATH . 'Dispatcher'.EXT,
                CORE_PATH . 'Log'.EXT,
                CORE_PATH . 'Log/Driver/File'.EXT,
                CORE_PATH . 'Route'.EXT,
                CORE_PATH . 'Controller'.EXT,
                CORE_PATH . 'View'.EXT,
                CORE_PATH . 'Storage'.EXT,
                CORE_PATH . 'Storage/Driver/File'.EXT,
                CORE_PATH . 'Exception'.EXT,
                BEHAVIOR_PATH . 'ParseTemplateBehavior'.EXT,
                BEHAVIOR_PATH . 'ContentReplaceBehavior'.EXT,
            );

        // 编译文件
        foreach ($filelist as $file){
          if(is_file($file)) {
            $content   .= compile($file);
          }
        }

        // 处理Think类的start方法
        $content  =  preg_replace('/\$runtimefile = RUNTIME_PATH(.+?)(if\(APP_STATUS)/','\2',$content,1);
        $content  .=  "\nnamespace { Think\Think::addMap(".var_export(\Think\Think::getMap(),true).");";
        $content  .=  "\nL(".var_export(L(),true).");\nC(".var_export(C(),true).');Think\Hook::import('.var_export(\Think\Hook::get(),true).');Think\Think::start();}';

        // 生成运行Lite文件
        file_put_contents($litefile,strip_whitespace('<?php '.$content));
    }

    // 根据数组生成常量定义
    private function buildArrayDefine($array) {
        $content = "\n";
        foreach ($array as $key => $val) {
            $key = strtoupper($key);
            $content .= 'defined(\'' . $key . '\') or ';
            if (is_int($val) || is_float($val)) {
                $content .= "define('" . $key . "'," . $val . ');';
            } elseif (is_bool($val)) {
                $val = ($val) ? 'true' : 'false';
                $content .= "define('" . $key . "'," . $val . ');';
            } elseif (is_string($val)) {
                $content .= "define('" . $key . "','" . addslashes($val) . "');";
            }
            $content    .= "\n";
        }
        return $content;
    }
}

================================================
FILE: ThinkPHP/Library/Behavior/CheckActionRouteBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
/**
 * 系统行为扩展:操作路由检测
 */
class CheckActionRouteBehavior {

    // 行为扩展的执行入口必须是run
    public function run(&$config){
        // 优先检测是否存在PATH_INFO
        $regx   =   trim($_SERVER['PATH_INFO'],'/');
        if(empty($regx)) return ;
        // 路由定义文件优先于config中的配置定义
        // 路由处理
        $routes =   $config['routes'];
        if(!empty($routes)) {
            $depr = C('URL_PATHINFO_DEPR');
            // 分隔符替换 确保路由定义使用统一的分隔符
            $regx = str_replace($depr,'/',$regx);
            $regx = substr_replace($regx,'',0,strlen(__URL__));
            foreach ($routes as $rule=>$route){
                if(0===strpos($rule,'/') && preg_match($rule,$regx,$matches)) { // 正则路由
                    return C('ACTION_NAME',$this->parseRegex($matches,$route,$regx));
                }else{ // 规则路由
                    $len1   =   substr_count($regx,'/');
                    $len2   =   substr_count($rule,'/');
                    if($len1>=$len2) {
                        if('$' == substr($rule,-1,1)) {// 完整匹配
                            if($len1 != $len2) {
                                continue;
                            }else{
                                $rule =  substr($rule,0,-1);
                            }
                        }
                        $match  =  $this->checkUrlMatch($regx,$rule);
                        if($match)  return C('ACTION_NAME',$this->parseRule($rule,$route,$regx));
                    }
                }
            }
        }
    }

    // 检测URL和规则路由是否匹配
    private function checkUrlMatch($regx,$rule) {
        $m1     =   explode('/',$regx);
        $m2     =   explode('/',$rule);
        $match  =   true; // 是否匹配
        foreach ($m2 as $key=>$val){
            if(':' == substr($val,0,1)) {// 动态变量
                if(strpos($val,'\\')) {
                    $type = substr($val,-1);
                    if('d'==$type && !is_numeric($m1[$key])) {
                        $match = false;
                        break;
                    }
                }elseif(strpos($val,'^')){
                    $array   =  explode('|',substr(strstr($val,'^'),1));
                    if(in_array($m1[$key],$array)) {
                        $match = false;
                        break;
                    }
                }
            }elseif(0 !== strcasecmp($val,$m1[$key])){
                $match = false;
                break;
            }
        }
        return $match;
    }

    // 解析规范的路由地址
    // 地址格式 操作?参数1=值1&参数2=值2...
    private function parseUrl($url) {
        $var  =  array();
        if(false !== strpos($url,'?')) { // 操作?参数1=值1&参数2=值2...
            $info   =   parse_url($url);
            $path   =   $info['path'];
            parse_str($info['query'],$var);
        }else{ // 操作
            $path   =   $url;
        }
        $var[C('VAR_ACTION')] = $path;
        return $var;
    }

    // 解析规则路由
    // '路由规则'=>'操作?额外参数1=值1&额外参数2=值2...'
    // '路由规则'=>array('操作','额外参数1=值1&额外参数2=值2...')
    // '路由规则'=>'外部地址'
    // '路由规则'=>array('外部地址','重定向代码')
    // 路由规则中 :开头 表示动态变量
    // 外部地址中可以用动态变量 采用 :1 :2 的方式
    // 'news/:month/:day/:id'=>array('News/read?cate=1','status=1'),
    // 'new/:id'=>array('/new.php?id=:1',301), 重定向
    private function parseRule($rule,$route,$regx) {
        // 获取路由地址规则
        $url        =   is_array($route)?$route[0]:$route;
        // 获取URL地址中的参数
        $paths      =   explode('/',$regx);
        // 解析路由规则
        $matches    =   array();
        $rule       =   explode('/',$rule);
        foreach ($rule as $item){
            if(0===strpos($item,':')) { // 动态变量获取
                if($pos = strpos($item,'^') ) {
                    $var  =  substr($item,1,$pos-1);
                }elseif(strpos($item,'\\')){
                    $var  =  substr($item,1,-2);
                }else{
                    $var  =  substr($item,1);
                }
                $matches[$var] = array_shift($paths);
            }else{ // 过滤URL中的静态变量
                array_shift($paths);
            }
        }
        if(0=== strpos($url,'/') || 0===strpos($url,'http')) { // 路由重定向跳转
            if(strpos($url,':')) { // 传递动态参数
                $values =   array_values($matches);
                $url    =   preg_replace('/:(\d+)/e','$values[\\1-1]',$url);
            }
            header("Location: $url", true,(is_array($route) && isset($route[1]))?$route[1]:301);
            exit;
        }else{
            // 解析路由地址
            $var        =   $this->parseUrl($url);
            // 解析路由地址里面的动态参数
            $values     =   array_values($matches);
            foreach ($var as $key=>$val){
                if(0===strpos($val,':')) {
                    $var[$key] =  $values[substr($val,1)-1];
                }
            }
            $var        =   array_merge($matches,$var);
            // 解析剩余的URL参数
            if($paths) {
                preg_replace('@(\w+)\/([^\/]+)@e', '$var[strtolower(\'\\1\')]=strip_tags(\'\\2\');', implode('/',$paths));
            }
            // 解析路由自动传入参数
            if(is_array($route) && isset($route[1])) {
                parse_str($route[1],$params);
                $var   =   array_merge($var,$params);
            }
            $action =   $var[C('VAR_ACTION')];
            unset($var[C('VAR_ACTION')]);
            $_GET   =   array_merge($var,$_GET);
            return $action;
        }
    }

    // 解析正则路由
    // '路由正则'=>'[分组/模块/操作]?参数1=值1&参数2=值2...'
    // '路由正则'=>array('[分组/模块/操作]?参数1=值1&参数2=值2...','额外参数1=值1&额外参数2=值2...')
    // '路由正则'=>'外部地址'
    // '路由正则'=>array('外部地址','重定向代码')
    // 参数值和外部地址中可以用动态变量 采用 :1 :2 的方式
    // '/new\/(\d+)\/(\d+)/'=>array('News/read?id=:1&page=:2&cate=1','status=1'),
    // '/new\/(\d+)/'=>array('/new.php?id=:1&page=:2&status=1','301'), 重定向
    private function parseRegex($matches,$route,$regx) {
        // 获取路由地址规则
        $url   =  is_array($route)?$route[0]:$route;
        $url   =  preg_replace('/:(\d+)/e','$matches[\\1]',$url);
        if(0=== strpos($url,'/') || 0===strpos($url,'http')) { // 路由重定向跳转
            header("Location: $url", true,(is_array($route) && isset($route[1]))?$route[1]:301);
            exit;
        }else{
            // 解析路由地址
            $var    =   $this->parseUrl($url);
            // 解析剩余的URL参数
            $regx   =   substr_replace($regx,'',0,strlen($matches[0]));
            if($regx) {
                preg_replace('@(\w+)\/([^,\/]+)@e', '$var[strtolower(\'\\1\')]=strip_tags(\'\\2\');', $regx);
            }
            // 解析路由自动传入参数
            if(is_array($route) && isset($route[1])) {
                parse_str($route[1],$params);
                $var   =   array_merge($var,$params);
            }
            $action =   $var[C('VAR_ACTION')];
            unset($var[C('VAR_ACTION')]);
            $_GET   =   array_merge($var,$_GET);
        }
        return $action;
    }
}

================================================
FILE: ThinkPHP/Library/Behavior/CheckLangBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
/**
 * 语言检测 并自动加载语言包
 */
class CheckLangBehavior {

    // 行为扩展的执行入口必须是run
    public function run(&$params){
        // 检测语言
        $this->checkLanguage();
    }

    /**
     * 语言检查
     * 检查浏览器支持语言,并自动加载语言包
     * @access private
     * @return void
     */
    private function checkLanguage() {
        // 不开启语言包功能,仅仅加载框架语言文件直接返回
        if (!C('LANG_SWITCH_ON',null,false)){
            return;
        }
        $langSet = C('DEFAULT_LANG');
        $varLang =  C('VAR_LANGUAGE',null,'l');
        $langList = C('LANG_LIST',null,'zh-cn');
        // 启用了语言包功能
        // 根据是否启用自动侦测设置获取语言选择
        if (C('LANG_AUTO_DETECT',null,true)){
            if(isset($_GET[$varLang])){
                $langSet = $_GET[$varLang];// url中设置了语言变量
                cookie('think_language',$langSet,3600);
            }elseif(cookie('think_language')){// 获取上次用户的选择
                $langSet = cookie('think_language');
            }elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){// 自动侦测浏览器语言
                preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
                $langSet = $matches[1];
                cookie('think_language',$langSet,3600);
            }
            if(false === stripos($langList,$langSet)) { // 非法语言参数
                $langSet = C('DEFAULT_LANG');
            }
        }
        // 定义当前语言
        define('LANG_SET',strtolower($langSet));

        // 读取框架语言包
        $file   =   THINK_PATH.'Lang/'.LANG_SET.'.php';
        if(LANG_SET != C('DEFAULT_LANG') && is_file($file))
            L(include $file);

        // 读取应用公共语言包
        $file   =  LANG_PATH.LANG_SET.'.php';
        if(is_file($file))
            L(include $file);
        
        // 读取模块语言包
        $file   =   MODULE_PATH.'Lang/'.LANG_SET.'.php';
        if(is_file($file))
            L(include $file);

        // 读取当前控制器语言包
        $file   =   MODULE_PATH.'Lang/'.LANG_SET.'/'.strtolower(CONTROLLER_NAME).'.php';
        if (is_file($file))
            L(include $file);
    }
}


================================================
FILE: ThinkPHP/Library/Behavior/ChromeShowPageTraceBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: luofei614 <weibo.com/luofei614>
// +----------------------------------------------------------------------
// $Id$

/**
 * 将Trace信息输出到chrome浏览器的控制器,从而不影响ajax效果和页面的布局。
 * 使用前,你需要先安装 chrome log 这个插件: http://craig.is/writing/chrome-logger。
 * 定义应用的tags.php文件 Application/Common/Conf/tags.php, 
 * <code>
 * <?php return array(
 *   'app_end'=>array(
 *       'Behavior\ChromeShowPageTrace'
 *   )
 * );
 * </code>
 * 如果trace信息没有正常输出,请查看您的日志。
 * 这是通过http headers和chrome通信,所以要保证在输出trace信息之前不能有
 * headers输出,你可以在入口文件第一行加入代码 ob_start(); 或者配置output_buffering
 *
 */
namespace Behavior;
use Think\Log;

/**
 * 系统行为扩展 页面Trace显示输出
 */
class ChromeShowPageTraceBehavior {

    protected $tracePageTabs =  array('BASE'=>'基本','FILE'=>'文件','INFO'=>'流程','ERR|NOTIC'=>'错误','SQL'=>'SQL','DEBUG'=>'调试');

    // 行为扩展的执行入口必须是run
    public function run(&$params){
        if(C('SHOW_PAGE_TRACE')) $this->showTrace();
    }

   
    /**
     * 显示页面Trace信息
     * @access private
     */
    private function showTrace() {
         // 系统默认显示信息
        $files  =  get_included_files();
        $info   =   array();
        foreach ($files as $key=>$file){
            $info[] = $file.' ( '.number_format(filesize($file)/1024,2).' KB )';
        }
        $trace  =   array();
        $base   =   array(
            '请求信息'  =>  date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']).' '.$_SERVER['SERVER_PROTOCOL'].' '.$_SERVER['REQUEST_METHOD'].' : '.__SELF__,
            '运行时间'  =>  $this->showTime(),
			'吞吐率'	=>	number_format(1/G('beginTime','viewEndTime'),2).'req/s',
            '内存开销'  =>  MEMORY_LIMIT_ON?number_format((memory_get_usage() - $GLOBALS['_startUseMems'])/1024,2).' kb':'不支持',
            '查询信息'  =>  N('db_query').' queries '.N('db_write').' writes ',
            '文件加载'  =>  count(get_included_files()),
            '缓存信息'  =>  N('cache_read').' gets '.N('cache_write').' writes ',
            '配置加载'  =>  count(c()),
            '会话信息'  =>  'SESSION_ID='.session_id(),
            );
        // 读取应用定义的Trace文件
        $traceFile  =   COMMON_PATH.'Conf/trace.php';
        if(is_file($traceFile)) {
            $base   =   array_merge($base,include $traceFile);
        }

        $debug  =   trace();
        $tabs   =   C('TRACE_PAGE_TABS',null,$this->tracePageTabs);
        foreach ($tabs as $name=>$title){
            switch(strtoupper($name)) {
                case 'BASE':// 基本信息
                    $trace[$title]  =   $base;
                    break;
                case 'FILE': // 文件信息
                    $trace[$title]  =   $info;
                    break;
                default:// 调试信息
                    $name       =   strtoupper($name);
                    if(strpos($name,'|')) {// 多组信息
                        $array  =   explode('|',$name);
                        $result =   array();
                        foreach($array as $name){
                            $result   +=   isset($debug[$name])?$debug[$name]:array();
                        }
                        $trace[$title]  =   $result;
                    }else{
                        $trace[$title]  =   isset($debug[$name])?$debug[$name]:'';
                    }
            }
        }
      chrome_debug('TRACE信息:'.__SELF__,'group');
        //输出日志
        foreach($trace as $title=>$log){
            '错误'==$title?chrome_debug($title,'group'):chrome_debug($title,'groupCollapsed');
            foreach($log as $i=>$logstr){
                chrome_debug($i.'.'.$logstr,'log');
            }
            chrome_debug('','groupEnd');
        }
       chrome_debug('','groupEnd');
        if($save = C('PAGE_TRACE_SAVE')) { // 保存页面Trace日志
            if(is_array($save)) {// 选择选项卡保存
                $tabs   =   C('TRACE_PAGE_TABS',null,$this->tracePageTabs);
                $array  =   array();
                foreach ($save as $tab){
                    $array[] =   $tabs[$tab];
                }
            }
            $content    =   date('[ c ]').' '.get_client_ip().' '.$_SERVER['REQUEST_URI']."\r\n";
            foreach ($trace as $key=>$val){
                if(!isset($array) || in_array($key,$array)) {
                    $content    .=  '[ '.$key." ]\r\n";
                    if(is_array($val)) {
                        foreach ($val as $k=>$v){
                            $content .= (!is_numeric($k)?$k.':':'').print_r($v,true)."\r\n";
                        }
                    }else{
                        $content .= print_r($val,true)."\r\n";
                    }
                    $content .= "\r\n";
                }
            }
            error_log(str_replace('<br/>',"\r\n",$content), 3,LOG_PATH.date('y_m_d').'_trace.log');
        }
        unset($files,$info,$base);
    }

    /**
     * 获取运行时间
     */
    private function showTime() {
        // 显示运行时间
        G('beginTime',$GLOBALS['_beginTime']);
        G('viewEndTime');
        // 显示详细运行时间
        return G('beginTime','viewEndTime').'s ( Load:'.G('beginTime','loadTime').'s Init:'.G('loadTime','initTime').'s Exec:'.G('initTime','viewStartTime').'s Template:'.G('viewStartTime','viewEndTime').'s )';
    }
}
if(!function_exists('chrome_debug')){
//ChromePhp 输出trace的函数
function chrome_debug($msg,$type='trace',$trace_level=1){
    if('trace'==$type){
        ChromePhp::groupCollapsed($msg);
        $traces=debug_backtrace(false);
        $traces=array_reverse($traces);
        $max=count($traces)-$trace_level;
        for($i=0;$i<$max;$i++){
            $trace=$traces[$i];
            $fun=isset($trace['class'])?$trace['class'].'::'.$trace['function']:$trace['function'];
            $file=isset($trace['file'])?$trace['file']:'unknown file';
            $line=isset($trace['line'])?$trace['line']:'unknown line';
            $trace_msg='#'.$i.'  '.$fun.' called at ['.$file.':'.$line.']';
            if(!empty($trace['args'])){
                ChromePhp::groupCollapsed($trace_msg);
                ChromePhp::log($trace['args']);
                ChromePhp::groupEnd();
            }else{
                ChromePhp::log($trace_msg);
            }
        }
        ChromePhp::groupEnd();
    }else{
        if(method_exists('Behavior\ChromePhp',$type)){
            //支持type trace,warn,log,error,group, groupCollapsed, groupEnd等
            call_user_func(array('Behavior\ChromePhp',$type),$msg);
        }else{
            //如果type不为trace,warn,log等,则为log的标签
            call_user_func_array(array('Behavior\ChromePhp','log'),func_get_args());
        }
    }
}


 
/**
 * Server Side Chrome PHP debugger class
 *
 * @package ChromePhp
 * @author Craig Campbell <iamcraigcampbell@gmail.com>
 */
class ChromePhp{
    /**
     * @var string
     */
    const VERSION = '4.1.0';

    /**
     * @var string
     */
    const HEADER_NAME = 'X-ChromeLogger-Data';

    /**
     * @var string
     */
    const BACKTRACE_LEVEL = 'backtrace_level';

    /**
     * @var string
     */
    const LOG = 'log';

    /**
     * @var string
     */
    const WARN = 'warn';

    /**
     * @var string
     */
    const ERROR = 'error';

    /**
     * @var string
     */
    const GROUP = 'group';

    /**
     * @var string
     */
    const INFO = 'info';

    /**
     * @var string
     */
    const GROUP_END = 'groupEnd';

    /**
     * @var string
     */
    const GROUP_COLLAPSED = 'groupCollapsed';

    /**
     * @var string
     */
    const TABLE = 'table';

    /**
     * @var string
     */
    protected $_php_version;

    /**
     * @var int
     */
    protected $_timestamp;

    /**
     * @var array
     */
    protected $_json = array(
        'version' => self::VERSION,
        'columns' => array('log', 'backtrace', 'type'),
        'rows' => array()
    );

    /**
     * @var array
     */
    protected $_backtraces = array();

    /**
     * @var bool
     */
    protected $_error_triggered = false;

    /**
     * @var array
     */
    protected $_settings = array(
        self::BACKTRACE_LEVEL => 1
    );

    /**
     * @var ChromePhp
     */
    protected static $_instance;

    /**
     * Prevent recursion when working with objects referring to each other
     *
     * @var array
     */
    protected $_processed = array();

    /**
     * constructor
     */
    private function __construct()
    {
        $this->_php_version = phpversion();
        $this->_timestamp = $this->_php_version >= 5.1 ? $_SERVER['REQUEST_TIME'] : time();
        $this->_json['request_uri'] = $_SERVER['REQUEST_URI'];
    }

    /**
     * gets instance of this class
     *
     * @return ChromePhp
     */
    public static function getInstance()
    {
        if (self::$_instance === null) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    /**
     * logs a variable to the console
     *
     * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]
     * @return void
     */
    public static function log()
    {
        $args = func_get_args();
        return self::_log('', $args);
    }

    /**
     * logs a warning to the console
     *
     * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]
     * @return void
     */
    public static function warn()
    {
        $args = func_get_args();
        return self::_log(self::WARN, $args);
    }

    /**
     * logs an error to the console
     *
     * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]
     * @return void
     */
    public static function error()
    {
        $args = func_get_args();
        return self::_log(self::ERROR, $args);
    }

    /**
     * sends a group log
     *
     * @param string value
     */
    public static function group()
    {
        $args = func_get_args();
        return self::_log(self::GROUP, $args);
    }

    /**
     * sends an info log
     *
     * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]
     * @return void
     */
    public static function info()
    {
        $args = func_get_args();
        return self::_log(self::INFO, $args);
    }

    /**
     * sends a collapsed group log
     *
     * @param string value
     */
    public static function groupCollapsed()
    {
        $args = func_get_args();
        return self::_log(self::GROUP_COLLAPSED, $args);
    }

    /**
     * ends a group log
     *
     * @param string value
     */
    public static function groupEnd()
    {
        $args = func_get_args();
        return self::_log(self::GROUP_END, $args);
    }

    /**
     * sends a table log
     *
     * @param string value
     */
    public static function table()
    {
        $args = func_get_args();
        return self::_log(self::TABLE, $args);
    }

    /**
     * internal logging call
     *
     * @param string $type
     * @return void
     */
    protected static function _log($type, array $args)
    {
        // nothing passed in, don't do anything
        if (count($args) == 0 && $type != self::GROUP_END) {
            return;
        }

        $logger = self::getInstance();

        $logger->_processed = array();

        $logs = array();
        foreach ($args as $arg) {
            $logs[] = $logger->_convert($arg);
        }

        $backtrace = debug_backtrace(false);
        $level = $logger->getSetting(self::BACKTRACE_LEVEL);

        $backtrace_message = 'unknown';
        if (isset($backtrace[$level]['file']) && isset($backtrace[$level]['line'])) {
            $backtrace_message = $backtrace[$level]['file'] . ' : ' . $backtrace[$level]['line'];
        }

        $logger->_addRow($logs, $backtrace_message, $type);
    }

    /**
     * converts an object to a better format for logging
     *
     * @param Object
     * @return array
     */
    protected function _convert($object)
    {
        // if this isn't an object then just return it
        if (!is_object($object)) {
            return $object;
        }

        //Mark this object as processed so we don't convert it twice and it
        //Also avoid recursion when objects refer to each other
        $this->_processed[] = $object;

        $object_as_array = array();

        // first add the class name
        $object_as_array['___class_name'] = get_class($object);

        // loop through object vars
        $object_vars = get_object_vars($object);
        foreach ($object_vars as $key => $value) {

            // same instance as parent object
            if ($value === $object || in_array($value, $this->_processed, true)) {
                $value = 'recursion - parent object [' . get_class($value) . ']';
            }
            $object_as_array[$key] = $this->_convert($value);
        }

        $reflection = new ReflectionClass($object);

        // loop through the properties and add those
        foreach ($reflection->getProperties() as $property) {

            // if one of these properties was already added above then ignore it
            if (array_key_exists($property->getName(), $object_vars)) {
                continue;
            }
            $type = $this->_getPropertyKey($property);

            if ($this->_php_version >= 5.3) {
                $property->setAccessible(true);
            }

            try {
                $value = $property->getValue($object);
            } catch (ReflectionException $e) {
                $value = 'only PHP 5.3 can access private/protected properties';
            }

            // same instance as parent object
            if ($value === $object || in_array($value, $this->_processed, true)) {
                $value = 'recursion - parent object [' . get_class($value) . ']';
            }

            $object_as_array[$type] = $this->_convert($value);
        }
        return $object_as_array;
    }

    /**
     * takes a reflection property and returns a nicely formatted key of the property name
     *
     * @param ReflectionProperty
     * @return string
     */
    protected function _getPropertyKey(ReflectionProperty $property)
    {
        $static = $property->isStatic() ? ' static' : '';
        if ($property->isPublic()) {
            return 'public' . $static . ' ' . $property->getName();
        }

        if ($property->isProtected()) {
            return 'protected' . $static . ' ' . $property->getName();
        }

        if ($property->isPrivate()) {
            return 'private' . $static . ' ' . $property->getName();
        }
    }

    /**
     * adds a value to the data array
     *
     * @var mixed
     * @return void
     */
    protected function _addRow(array $logs, $backtrace, $type)
    {
        // if this is logged on the same line for example in a loop, set it to null to save space
        if (in_array($backtrace, $this->_backtraces)) {
            $backtrace = null;
        }

        // for group, groupEnd, and groupCollapsed
        // take out the backtrace since it is not useful
        if ($type == self::GROUP || $type == self::GROUP_END || $type == self::GROUP_COLLAPSED) {
            $backtrace = null;
        }

        if ($backtrace !== null) {
            $this->_backtraces[] = $backtrace;
        }

        $row = array($logs, $backtrace, $type);

        $this->_json['rows'][] = $row;
        $this->_writeHeader($this->_json);
    }

    protected function _writeHeader($data)
    {
        header(self::HEADER_NAME . ': ' . $this->_encode($data));
    }

    /**
     * encodes the data to be sent along with the request
     *
     * @param array $data
     * @return string
     */
    protected function _encode($data)
    {
        return base64_encode(utf8_encode(json_encode($data)));
    }

    /**
     * adds a setting
     *
     * @param string key
     * @param mixed value
     * @return void
     */
    public function addSetting($key, $value)
    {
        $this->_settings[$key] = $value;
    }

    /**
     * add ability to set multiple settings in one call
     *
     * @param array $settings
     * @return void
     */
    public function addSettings(array $settings)
    {
        foreach ($settings as $key => $value) {
            $this->addSetting($key, $value);
        }
    }

    /**
     * gets a setting
     *
     * @param string key
     * @return mixed
     */
    public function getSetting($key)
    {
        if (!isset($this->_settings[$key])) {
            return null;
        }
        return $this->_settings[$key];
    }
}
}


================================================
FILE: ThinkPHP/Library/Behavior/ContentReplaceBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
/**
 * 系统行为扩展:模板内容输出替换
 */
class ContentReplaceBehavior {

    // 行为扩展的执行入口必须是run
    public function run(&$content){
        $content = $this->templateContentReplace($content);
    }

    /**
     * 模板内容替换
     * @access protected
     * @param string $content 模板内容
     * @return string
     */
    protected function templateContentReplace($content) {
        // 系统默认的特殊变量替换
        $replace =  array(
            '__ROOT__'      =>  __ROOT__,       // 当前网站地址
            '__APP__'       =>  __APP__,        // 当前应用地址
            '__MODULE__'    =>  __MODULE__,
            '__ACTION__'    =>  __ACTION__,     // 当前操作地址
            '__SELF__'      =>  __SELF__,       // 当前页面地址
            '__CONTROLLER__'=>  __CONTROLLER__,
            '__URL__'       =>  __CONTROLLER__,
            '__PUBLIC__'    =>  __ROOT__.'/Public',// 站点公共目录
        );
        // 允许用户自定义模板的字符串替换
        if(is_array(C('TMPL_PARSE_STRING')) )
            $replace =  array_merge($replace,C('TMPL_PARSE_STRING'));
        $content = str_replace(array_keys($replace),array_values($replace),$content);
        return $content;
    }

}

================================================
FILE: ThinkPHP/Library/Behavior/CronRunBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
/**
 * 自动执行任务
 */
class CronRunBehavior {

    public function run(&$params) {
        // 锁定自动执行
        $lockfile	 =	 RUNTIME_PATH.'cron.lock';
        if(is_writable($lockfile) && filemtime($lockfile) > $_SERVER['REQUEST_TIME'] - C('CRON_MAX_TIME',null,60)) {
            return ;
        } else {
            touch($lockfile);
        }
        set_time_limit(1000);
        ignore_user_abort(true);

        // 载入cron配置文件
        // 格式 return array(
        // 'cronname'=>array('filename',intervals,nextruntime),...
        // );
        if(is_file(RUNTIME_PATH.'~crons.php')) {
            $crons	=	include RUNTIME_PATH.'~crons.php';
        }elseif(is_file(COMMON_PATH.'Conf/crons.php')){
            $crons	=	include COMMON_PATH.'Conf/crons.php';
        }
        if(isset($crons) && is_array($crons)) {
            $update	 =	 false;
            $log	=	array();
            foreach ($crons as $key=>$cron){
                if(empty($cron[2]) || $_SERVER['REQUEST_TIME']>=$cron[2]) {
                    // 到达时间 执行cron文件
                    G('cronStart');
                    include COMMON_PATH.'Cron/'.$cron[0].'.php';
                    G('cronEnd');
                    $_useTime	 =	 G('cronStart','cronEnd', 6);
                    // 更新cron记录
                    $cron[2]	=	$_SERVER['REQUEST_TIME']+$cron[1];
                    $crons[$key]	=	$cron;
                    $log[] = "Cron:$key Runat ".date('Y-m-d H:i:s')." Use $_useTime s\n";
                    $update	 =	 true;
                }
            }
            if($update) {
                // 记录Cron执行日志
                \Think\Log::write(implode('',$log));
                // 更新cron文件
                $content  = "<?php\nreturn ".var_export($crons,true).";\n?>";
                file_put_contents(RUNTIME_PATH.'~crons.php',$content);
            }
        }
        // 解除锁定
        unlink($lockfile);
        return ;
    }
}

================================================
FILE: ThinkPHP/Library/Behavior/FireShowPageTraceBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: luofei614 <weibo.com/luofei614>
// +----------------------------------------------------------------------
// $Id$

/**
 * 将Trace信息输出到火狐的firebug,从而不影响ajax效果和页面的布局。
 * 使用前,你需要先在火狐浏览器上安装firebug和firePHP两个插件。
 * 定义应用的tags.php文件, 
 * <code>
 * <?php return array(
 *   'app_end'=>array(
 *       'FireShowPageTrace'
 *   )
 * );
 * </code>
 * 再将此文件放到应用的Behavior文件夹中即可
 * 如果trace信息没有正常输出,请查看您的日志。
 * firePHP,是通过http headers和firebug通讯的,所以要保证在输出trace信息之前不能有
 * headers输出,你可以在入口文件第一行加入代码 ob_start(); 或者配置output_buffering
 *
 */
namespace Behavior;
/**
 * 系统行为扩展 页面Trace显示输出
 */
class FireShowPageTraceBehavior {
    protected $tracePagTabs =   array('BASE'=>'基本','FILE'=>'文件','INFO'=>'流程','ERR|NOTIC'=>'错误','SQL'=>'SQL','DEBUG'=>'调试');

    // 行为扩展的执行入口必须是run
    public function run(&$params){
        if(C('FIRE_SHOW_PAGE_TRACE',null,true)) $this->showTrace();
    }

    /**
     * 显示页面Trace信息
     * @access private
     */
    private function showTrace() {
         // 系统默认显示信息
        $files =  get_included_files();
        $info   =   array();
        foreach ($files as $key=>$file){
            $info[] = $file.' ( '.number_format(filesize($file)/1024,2).' KB )';
        }
        $trace  =   array();
        $base   =   array(
            '请求信息'=>  date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']).' '.$_SERVER['SERVER_PROTOCOL'].' '.$_SERVER['REQUEST_METHOD'].' : '.__SELF__,
            '运行时间'=> $this->showTime(),
            '内存开销'=> MEMORY_LIMIT_ON?number_format((memory_get_usage() - $GLOBALS['_startUseMems'])/1024,2).' kb':'不支持',
            '查询信息'=> N('db_query').' queries '.N('db_write').' writes ',
            '文件加载'=> count(get_included_files()),
            '缓存信息'=> N('cache_read').' gets '.N('cache_write').' writes ',
            '配置加载'=> count(c()),
            '会话信息'=> 'SESSION_ID='.session_id(),
            );
        // 读取应用定义的Trace文件
        $traceFile  =   CONF_PATH.'trace.php';
        if(is_file($traceFile)) {
            $base    =   array_merge($base,include $traceFile);
        }
        $debug  =   trace();
        $tabs   =   C('TRACE_PAGE_TABS',null,$this->tracePagTabs);
        foreach ($tabs as $name=>$title){
            switch(strtoupper($name)) {
                case 'BASE':// 基本信息
                    $trace[$title]  =   $base;
                    break;
                case 'FILE': // 文件信息
                    $trace[$title]  =   $info;
                    break;
                default:// 调试信息
                    if(strpos($name,'|')) {// 多组信息
                        $array  =   explode('|',$name);
                        $result =   array();
                        foreach($array as $name){
                            $result   +=   isset($debug[$name])?$debug[$name]:array();
                        }
                        $trace[$title]  =   $result;
                    }else{
                        $trace[$title]  =   isset($debug[$name])?$debug[$name]:'';
                    }
            }
        }
    foreach ($trace as $key=>$val){
            if(!is_array($val) && empty($val))
                $val=array();
            if(is_array($val)){
            $fire=array(
            array('','')
            );
            foreach($val as $k=>$v){
                $fire[]=array($k,$v);
            }
            fb(array($key,$fire),FirePHP::TABLE);
        }else{
            fb($val,$key);
        }
     }
    unset($files,$info,$log,$base);
    }

    /**
     * 获取运行时间
     */
    private function showTime() {
        // 显示运行时间
        G('beginTime',$GLOBALS['_beginTime']);
        G('viewEndTime');
        // 显示详细运行时间
        return G('beginTime','viewEndTime').'s ( Load:'.G('beginTime','loadTime').'s Init:'.G('loadTime','initTime').'s Exec:'.G('initTime','viewStartTime').'s Template:'.G('viewStartTime','viewEndTime').'s )';
    }

}


function fb()
{
    $instance = FirePHP::getInstance(true);
  
    $args = func_get_args();
    return call_user_func_array(array($instance,'fb'),$args);
}


class FB
{
    /**
     * Enable and disable logging to Firebug
     * 
     * @see FirePHP->setEnabled()
     * @param boolean $Enabled TRUE to enable, FALSE to disable
     * @return void
     */
    public static function setEnabled($Enabled)
    {
        $instance = FirePHP::getInstance(true);
        $instance->setEnabled($Enabled);
    }
  
    /**
     * Check if logging is enabled
     * 
     * @see FirePHP->getEnabled()
     * @return boolean TRUE if enabled
     */
    public static function getEnabled()
    {
        $instance = FirePHP::getInstance(true);
        return $instance->getEnabled();
    }  
  
    /**
     * Specify a filter to be used when encoding an object
     * 
     * Filters are used to exclude object members.
     * 
     * @see FirePHP->setObjectFilter()
     * @param string $Class The class name of the object
     * @param array $Filter An array or members to exclude
     * @return void
     */
    public static function setObjectFilter($Class, $Filter)
    {
      $instance = FirePHP::getInstance(true);
      $instance->setObjectFilter($Class, $Filter);
    }
  
    /**
     * Set some options for the library
     * 
     * @see FirePHP->setOptions()
     * @param array $Options The options to be set
     * @return void
     */
    public static function setOptions($Options)
    {
        $instance = FirePHP::getInstance(true);
        $instance->setOptions($Options);
    }

    /**
     * Get options for the library
     * 
     * @see FirePHP->getOptions()
     * @return array The options
     */
    public static function getOptions()
    {
        $instance = FirePHP::getInstance(true);
        return $instance->getOptions();
    }

    /**
     * Log object to firebug
     * 
     * @see http://www.firephp.org/Wiki/Reference/Fb
     * @param mixed $Object
     * @return true
     * @throws Exception
     */
    public static function send()
    {
        $instance = FirePHP::getInstance(true);
        $args = func_get_args();
        return call_user_func_array(array($instance,'fb'),$args);
    }

    /**
     * Start a group for following messages
     * 
     * Options:
     *   Collapsed: [true|false]
     *   Color:     [#RRGGBB|ColorName]
     *
     * @param string $Name
     * @param array $Options OPTIONAL Instructions on how to log the group
     * @return true
     */
    public static function group($Name, $Options=null)
    {
        $instance = FirePHP::getInstance(true);
        return $instance->group($Name, $Options);
    }

    /**
     * Ends a group you have started before
     *
     * @return true
     * @throws Exception
     */
    public static function groupEnd()
    {
        return self::send(null, null, FirePHP::GROUP_END);
    }

    /**
     * Log object with label to firebug console
     *
     * @see FirePHP::LOG
     * @param mixes $Object
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public static function log($Object, $Label=null)
    {
        return self::send($Object, $Label, FirePHP::LOG);
    } 

    /**
     * Log object with label to firebug console
     *
     * @see FirePHP::INFO
     * @param mixes $Object
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public static function info($Object, $Label=null)
    {
        return self::send($Object, $Label, FirePHP::INFO);
    } 

    /**
     * Log object with label to firebug console
     *
     * @see FirePHP::WARN
     * @param mixes $Object
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public static function warn($Object, $Label=null)
    {
        return self::send($Object, $Label, FirePHP::WARN);
    } 

    /**
     * Log object with label to firebug console
     *
     * @see FirePHP::ERROR
     * @param mixes $Object
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public static function error($Object, $Label=null)
    {
        return self::send($Object, $Label, FirePHP::ERROR);
    } 

    /**
     * Dumps key and variable to firebug server panel
     *
     * @see FirePHP::DUMP
     * @param string $Key
     * @param mixed $Variable
     * @return true
     * @throws Exception
     */
    public static function dump($Key, $Variable)
    {
        return self::send($Variable, $Key, FirePHP::DUMP);
    } 

    /**
     * Log a trace in the firebug console
     *
     * @see FirePHP::TRACE
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public static function trace($Label)
    {
        return self::send($Label, FirePHP::TRACE);
    } 

    /**
     * Log a table in the firebug console
     *
     * @see FirePHP::TABLE
     * @param string $Label
     * @param string $Table
     * @return true
     * @throws Exception
     */
    public static function table($Label, $Table)
    {
        return self::send($Table, $Label, FirePHP::TABLE);
    } 

}

if (!defined('E_STRICT')) {
    define('E_STRICT', 2048);
}
if (!defined('E_RECOVERABLE_ERROR')) {
    define('E_RECOVERABLE_ERROR', 4096);
}
if (!defined('E_DEPRECATED')) {
    define('E_DEPRECATED', 8192);
}
if (!defined('E_USER_DEPRECATED')) {
    define('E_USER_DEPRECATED', 16384);
} 
 
/**
 * Sends the given data to the FirePHP Firefox Extension.
 * The data can be displayed in the Firebug Console or in the
 * "Server" request tab.
 * 
 * For more information see: http://www.firephp.org/
 * 
 * @copyright       Copyright (C) 2007-2009 Christoph Dorn
 * @author          Christoph Dorn <christoph@christophdorn.com>
 * @license         http://www.opensource.org/licenses/bsd-license.php
 * @package         FirePHPCore
 */
class FirePHP {

    /**
     * FirePHP version
     *
     * @var string
     */
    const VERSION = '0.3';    // @pinf replace '0.3' with '%%package.version%%'

    /**
     * Firebug LOG level
     *
     * Logs a message to firebug console.
     * 
     * @var string
     */
    const LOG = 'LOG';
  
    /**
     * Firebug INFO level
     *
     * Logs a message to firebug console and displays an info icon before the message.
     * 
     * @var string
     */
    const INFO = 'INFO';
    
    /**
     * Firebug WARN level
     *
     * Logs a message to firebug console, displays an warning icon before the message and colors the line turquoise.
     * 
     * @var string
     */
    const WARN = 'WARN';
    
    /**
     * Firebug ERROR level
     *
     * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count.
     * 
     * @var string
     */
    const ERROR = 'ERROR';
    
    /**
     * Dumps a variable to firebug's server panel
     *
     * @var string
     */
    const DUMP = 'DUMP';
    
    /**
     * Displays a stack trace in firebug console
     *
     * @var string
     */
    const TRACE = 'TRACE';
    
    /**
     * Displays an exception in firebug console
     * 
     * Increments the firebug error count.
     *
     * @var string
     */
    const EXCEPTION = 'EXCEPTION';
    
    /**
     * Displays an table in firebug console
     *
     * @var string
     */
    const TABLE = 'TABLE';
    
    /**
     * Starts a group in firebug console
     * 
     * @var string
     */
    const GROUP_START = 'GROUP_START';
    
    /**
     * Ends a group in firebug console
     * 
     * @var string
     */
    const GROUP_END = 'GROUP_END';
    
    /**
     * Singleton instance of FirePHP
     *
     * @var FirePHP
     */
    protected static $instance = null;
    
    /**
     * Flag whether we are logging from within the exception handler
     * 
     * @var boolean
     */
    protected $inExceptionHandler = false;
    
    /**
     * Flag whether to throw PHP errors that have been converted to ErrorExceptions
     * 
     * @var boolean
     */
    protected $throwErrorExceptions = true;
    
    /**
     * Flag whether to convert PHP assertion errors to Exceptions
     * 
     * @var boolean
     */
    protected $convertAssertionErrorsToExceptions = true;
    
    /**
     * Flag whether to throw PHP assertion errors that have been converted to Exceptions
     * 
     * @var boolean
     */
    protected $throwAssertionExceptions = false;

    /**
     * Wildfire protocol message index
     *
     * @var int
     */
    protected $messageIndex = 1;
    
    /**
     * Options for the library
     * 
     * @var array
     */
    protected $options = array('maxDepth' => 10,
                               'maxObjectDepth' => 5,
                               'maxArrayDepth' => 5,
                               'useNativeJsonEncode' => true,
                               'includeLineNumbers' => true);

    /**
     * Filters used to exclude object members when encoding
     * 
     * @var array
     */
    protected $objectFilters = array(
        'firephp' => array('objectStack', 'instance', 'json_objectStack'),
        'firephp_test_class' => array('objectStack', 'instance', 'json_objectStack')
    );

    /**
     * A stack of objects used to detect recursion during object encoding
     * 
     * @var object
     */
    protected $objectStack = array();

    /**
     * Flag to enable/disable logging
     * 
     * @var boolean
     */
    protected $enabled = true;

    /**
     * The insight console to log to if applicable
     * 
     * @var object
     */
    protected $logToInsightConsole = null;

    /**
     * When the object gets serialized only include specific object members.
     * 
     * @return array
     */  
    public function __sleep()
    {
        return array('options','objectFilters','enabled');
    }
    
    /**
     * Gets singleton instance of FirePHP
     *
     * @param boolean $AutoCreate
     * @return FirePHP
     */
    public static function getInstance($AutoCreate = false)
    {
        if ($AutoCreate===true && !self::$instance) {
            self::init();
        }
        return self::$instance;
    }
    
    /**
     * Creates FirePHP object and stores it for singleton access
     *
     * @return FirePHP
     */
    public static function init()
    {
        return self::setInstance(new self());
    }

    /**
     * Set the instance of the FirePHP singleton
     * 
     * @param FirePHP $instance The FirePHP object instance
     * @return FirePHP
     */
    public static function setInstance($instance)
    {
        return self::$instance = $instance;
    }

    /**
     * Set an Insight console to direct all logging calls to
     * 
     * @param object $console The console object to log to
     * @return void
     */
    public function setLogToInsightConsole($console)
    {
        if(is_string($console)) {
            if(get_class($this)!='FirePHP_Insight' && !is_subclass_of($this, 'FirePHP_Insight')) {
                throw new Exception('FirePHP instance not an instance or subclass of FirePHP_Insight!');
            }
            $this->logToInsightConsole = $this->to('request')->console($console);
        } else {
            $this->logToInsightConsole = $console;
        }
    }

    /**
     * Enable and disable logging to Firebug
     * 
     * @param boolean $Enabled TRUE to enable, FALSE to disable
     * @return void
     */
    public function setEnabled($Enabled)
    {
       $this->enabled = $Enabled;
    }
    
    /**
     * Check if logging is enabled
     * 
     * @return boolean TRUE if enabled
     */
    public function getEnabled()
    {
        return $this->enabled;
    }
    
    /**
     * Specify a filter to be used when encoding an object
     * 
     * Filters are used to exclude object members.
     * 
     * @param string $Class The class name of the object
     * @param array $Filter An array of members to exclude
     * @return void
     */
    public function setObjectFilter($Class, $Filter)
    {
        $this->objectFilters[strtolower($Class)] = $Filter;
    }
  
    /**
     * Set some options for the library
     * 
     * Options:
     *  - maxDepth: The maximum depth to traverse (default: 10)
     *  - maxObjectDepth: The maximum depth to traverse objects (default: 5)
     *  - maxArrayDepth: The maximum depth to traverse arrays (default: 5)
     *  - useNativeJsonEncode: If true will use json_encode() (default: true)
     *  - includeLineNumbers: If true will include line numbers and filenames (default: true)
     * 
     * @param array $Options The options to be set
     * @return void
     */
    public function setOptions($Options)
    {
        $this->options = array_merge($this->options,$Options);
    }

    /**
     * Get options from the library
     *
     * @return array The currently set options
     */
    public function getOptions()
    {
        return $this->options;
    }

    /**
     * Set an option for the library
     * 
     * @param string $Name
     * @param mixed $Value
     * @throws Exception
     * @return void
     */  
    public function setOption($Name, $Value)
    {
        if (!isset($this->options[$Name])) {
            throw $this->newException('Unknown option: ' . $Name);
        }
        $this->options[$Name] = $Value;
    }

    /**
     * Get an option from the library
     *
     * @param string $Name
     * @throws Exception
     * @return mixed
     */
    public function getOption($Name)
    {
        if (!isset($this->options[$Name])) {
            throw $this->newException('Unknown option: ' . $Name);
        }
        return $this->options[$Name];
    }

    /**
     * Register FirePHP as your error handler
     * 
     * Will throw exceptions for each php error.
     * 
     * @return mixed Returns a string containing the previously defined error handler (if any)
     */
    public function registerErrorHandler($throwErrorExceptions = false)
    {
        //NOTE: The following errors will not be caught by this error handler:
        //      E_ERROR, E_PARSE, E_CORE_ERROR,
        //      E_CORE_WARNING, E_COMPILE_ERROR,
        //      E_COMPILE_WARNING, E_STRICT
    
        $this->throwErrorExceptions = $throwErrorExceptions;
    
        return set_error_handler(array($this,'errorHandler'));     
    }

    /**
     * FirePHP's error handler
     * 
     * Throws exception for each php error that will occur.
     *
     * @param int $errno
     * @param string $errstr
     * @param string $errfile
     * @param int $errline
     * @param array $errcontext
     */
    public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
    {
        // Don't throw exception if error reporting is switched off
        if (error_reporting() == 0) {
            return;
        }
        // Only throw exceptions for errors we are asking for
        if (error_reporting() & $errno) {

            $exception = new ErrorException($errstr, 0, $errno, $errfile, $errline);
            if ($this->throwErrorExceptions) {
                throw $exception;
            } else {
                $this->fb($exception);
            }
        }
    }
  
    /**
     * Register FirePHP as your exception handler
     * 
     * @return mixed Returns the name of the previously defined exception handler,
     *               or NULL on error.
     *               If no previous handler was defined, NULL is also returned.
     */
    public function registerExceptionHandler()
    {
        return set_exception_handler(array($this,'exceptionHandler'));     
    }
  
    /**
     * FirePHP's exception handler
     * 
     * Logs all exceptions to your firebug console and then stops the script.
     *
     * @param Exception $Exception
     * @throws Exception
     */
    function exceptionHandler($Exception)
    {
    
        $this->inExceptionHandler = true;
    
        header('HTTP/1.1 500 Internal Server Error');
    
        try {
            $this->fb($Exception);
        } catch (Exception $e) {
            echo 'We had an exception: ' . $e;
        }
        $this->inExceptionHandler = false;
    }
  
    /**
     * Register FirePHP driver as your assert callback
     * 
     * @param boolean $convertAssertionErrorsToExceptions
     * @param boolean $throwAssertionExceptions
     * @return mixed Returns the original setting or FALSE on errors
     */
    public function registerAssertionHandler($convertAssertionErrorsToExceptions = true, $throwAssertionExceptions = false)
    {
        $this->convertAssertionErrorsToExceptions = $convertAssertionErrorsToExceptions;
        $this->throwAssertionExceptions = $throwAssertionExceptions;
        
        if ($throwAssertionExceptions && !$convertAssertionErrorsToExceptions) {
            throw $this->newException('Cannot throw assertion exceptions as assertion errors are not being converted to exceptions!');
        }
        
        return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler'));
    }
  
    /**
     * FirePHP's assertion handler
     *
     * Logs all assertions to your firebug console and then stops the script.
     *
     * @param string $file File source of assertion
     * @param int    $line Line source of assertion
     * @param mixed  $code Assertion code
     */
    public function assertionHandler($file, $line, $code)
    {
        if ($this->convertAssertionErrorsToExceptions) {
          
          $exception = new ErrorException('Assertion Failed - Code[ '.$code.' ]', 0, null, $file, $line);
    
          if ($this->throwAssertionExceptions) {
              throw $exception;
          } else {
              $this->fb($exception);
          }
        
        } else {
            $this->fb($code, 'Assertion Failed', FirePHP::ERROR, array('File'=>$file,'Line'=>$line));
        }
    }
  
    /**
     * Start a group for following messages.
     * 
     * Options:
     *   Collapsed: [true|false]
     *   Color:     [#RRGGBB|ColorName]
     *
     * @param string $Name
     * @param array $Options OPTIONAL Instructions on how to log the group
     * @return true
     * @throws Exception
     */
    public function group($Name, $Options = null)
    {
    
        if (!$Name) {
            throw $this->newException('You must specify a label for the group!');
        }
        
        if ($Options) {
            if (!is_array($Options)) {
                throw $this->newException('Options must be defined as an array!');
            }
            if (array_key_exists('Collapsed', $Options)) {
                $Options['Collapsed'] = ($Options['Collapsed'])?'true':'false';
            }
        }
        
        return $this->fb(null, $Name, FirePHP::GROUP_START, $Options);
    }
  
    /**
     * Ends a group you have started before
     *
     * @return true
     * @throws Exception
     */
    public function groupEnd()
    {
        return $this->fb(null, null, FirePHP::GROUP_END);
    }

    /**
     * Log object with label to firebug console
     *
     * @see FirePHP::LOG
     * @param mixes $Object
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public function log($Object, $Label = null, $Options = array())
    {
        return $this->fb($Object, $Label, FirePHP::LOG, $Options);
    } 

    /**
     * Log object with label to firebug console
     *
     * @see FirePHP::INFO
     * @param mixes $Object
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public function info($Object, $Label = null, $Options = array())
    {
        return $this->fb($Object, $Label, FirePHP::INFO, $Options);
    } 

    /**
     * Log object with label to firebug console
     *
     * @see FirePHP::WARN
     * @param mixes $Object
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public function warn($Object, $Label = null, $Options = array())
    {
        return $this->fb($Object, $Label, FirePHP::WARN, $Options);
    } 

    /**
     * Log object with label to firebug console
     *
     * @see FirePHP::ERROR
     * @param mixes $Object
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public function error($Object, $Label = null, $Options = array())
    {
        return $this->fb($Object, $Label, FirePHP::ERROR, $Options);
    } 

    /**
     * Dumps key and variable to firebug server panel
     *
     * @see FirePHP::DUMP
     * @param string $Key
     * @param mixed $Variable
     * @return true
     * @throws Exception
     */
    public function dump($Key, $Variable, $Options = array())
    {
        if (!is_string($Key)) {
            throw $this->newException('Key passed to dump() is not a string');
        }
        if (strlen($Key)>100) {
            throw $this->newException('Key passed to dump() is longer than 100 characters');
        }
        if (!preg_match_all('/^[a-zA-Z0-9-_\.:]*$/', $Key, $m)) {
            throw $this->newException('Key passed to dump() contains invalid characters [a-zA-Z0-9-_\.:]');
        }
        return $this->fb($Variable, $Key, FirePHP::DUMP, $Options);
    }
  
    /**
     * Log a trace in the firebug console
     *
     * @see FirePHP::TRACE
     * @param string $Label
     * @return true
     * @throws Exception
     */
    public function trace($Label)
    {
        return $this->fb($Label, FirePHP::TRACE);
    } 

    /**
     * Log a table in the firebug console
     *
     * @see FirePHP::TABLE
     * @param string $Label
     * @param string $Table
     * @return true
     * @throws Exception
     */
    public function table($Label, $Table, $Options = array())
    {
        return $this->fb($Table, $Label, FirePHP::TABLE, $Options);
    }

    /**
     * Insight API wrapper
     * 
     * @see Insight_Helper::to()
     */
    public static function to()
    {
        $instance = self::getInstance();
        if (!method_exists($instance, "_to")) {
            throw new Exception("FirePHP::to() implementation not loaded");
        }
        $args = func_get_args();
        return call_user_func_array(array($instance, '_to'), $args);
    }

    /**
     * Insight API wrapper
     * 
     * @see Insight_Helper::plugin()
     */
    public static function plugin()
    {
        $instance = self::getInstance();
        if (!method_exists($instance, "_plugin")) {
            throw new Exception("FirePHP::plugin() implementation not loaded");
        }
        $args = func_get_args();
        return call_user_func_array(array($instance, '_plugin'), $args);
    }

    /**
     * Check if FirePHP is installed on client
     *
     * @return boolean
     */
    public function detectClientExtension()
    {
        // Check if FirePHP is installed on client via User-Agent header
        if (@preg_match_all('/\sFirePHP\/([\.\d]*)\s?/si',$this->getUserAgent(),$m) &&
           version_compare($m[1][0],'0.0.6','>=')) {
            return true;
        } else
        // Check if FirePHP is installed on client via X-FirePHP-Version header
        if (@preg_match_all('/^([\.\d]*)$/si',$this->getRequestHeader("X-FirePHP-Version"),$m) &&
           version_compare($m[1][0],'0.0.6','>=')) {
            return true;
        }
        return false;
    }
 
    /**
     * Log varible to Firebug
     * 
     * @see http://www.firephp.org/Wiki/Reference/Fb
     * @param mixed $Object The variable to be logged
     * @return true Return TRUE if message was added to headers, FALSE otherwise
     * @throws Exception
     */
    public function fb($Object)
    {
        if($this instanceof FirePHP_Insight && method_exists($this, '_logUpgradeClientMessage')) {
            if(!FirePHP_Insight::$upgradeClientMessageLogged) {    // avoid infinite recursion as _logUpgradeClientMessage() logs a message
                $this->_logUpgradeClientMessage();
            }
        }

        static $insightGroupStack = array();

        if (!$this->getEnabled()) {
            return false;
        }

        if ($this->headersSent($filename, $linenum)) {
            // If we are logging from within the exception handler we cannot throw another exception
            if ($this->inExceptionHandler) {
                // Simply echo the error out to the page
                echo '<div style="border: 2px solid red; font-family: Arial; font-size: 12px; background-color: lightgray; padding: 5px;"><span style="color: red; font-weight: bold;">FirePHP ERROR:</span> Headers already sent in <b>'.$filename.'</b> on line <b>'.$linenum.'</b>. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.</div>';
            } else {
                throw $this->newException('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.');
            }
        }
      
        $Type = null;
        $Label = null;
        $Options = array();
      
        if (func_num_args()==1) {
        } else
        if (func_num_args()==2) {
            switch(func_get_arg(1)) {
                case self::LOG:
                case self::INFO:
                case self::WARN:
                case self::ERROR:
                case self::DUMP:
                case self::TRACE:
                case self::EXCEPTION:
                case self::TABLE:
                case self::GROUP_START:
                case self::GROUP_END:
                    $Type = func_get_arg(1);
                    break;
                default:
                    $Label = func_get_arg(1);
                    break;
            }
        } else
        if (func_num_args()==3) {
            $Type = func_get_arg(2);
            $Label = func_get_arg(1);
        } else
        if (func_num_args()==4) {
            $Type = func_get_arg(2);
            $Label = func_get_arg(1);
            $Options = func_get_arg(3);
        } else {
            throw $this->newException('Wrong number of arguments to fb() function!');
        }

        if($this->logToInsightConsole!==null && (get_class($this)=='FirePHP_Insight' || is_subclass_of($this, 'FirePHP_Insight'))) {
            $msg = $this->logToInsightConsole;
            if ($Object instanceof Exception) {
                $Type = self::EXCEPTION;
            }
            if($Label && $Type!=self::TABLE && $Type!=self::GROUP_START) {
                $msg = $msg->label($Label);
            }
            switch($Type) {
                case self::DUMP:
                case self::LOG:
                    return $msg->log($Object);
                case self::INFO:
                    return $msg->info($Object);
                case self::WARN:
                    return $msg->warn($Object);
                case self::ERROR:
                    return $msg->error($Object);
                case self::TRACE:
                    return $msg->trace($Object);
                case self::EXCEPTION:
                    return $this->plugin('engine')->handleException($Object, $msg);
                case self::TABLE:
                    if (isset($Object[0]) && !is_string($Object[0]) && $Label) {
                        $Object = array($Label, $Object);
                    }
                    return $msg->table($Object[0], array_slice($Object[1],1), $Object[1][0]);
                case self::GROUP_START:
                    $insightGroupStack[] = $msg->group(md5($Label))->open();
                    return $msg->log($Label);
                case self::GROUP_END:
                    if(count($insightGroupStack)==0) {
                        throw new Error('Too many groupEnd() as opposed to group() calls!');
                    }
                    $group = array_pop($insightGroupStack);
                    return $group->close();
                default:
                    return $msg->log($Object);
            }
        }

        if (!$this->detectClientExtension()) {
            return false;
        }
      
        $meta = array();
        $skipFinalObjectEncode = false;
      
        if ($Object instanceof Exception) {
    
            $meta['file'] = $this->_escapeTraceFile($Object->getFile());
            $meta['line'] = $Object->getLine();
          
            $trace = $Object->getTrace();
            if ($Object instanceof ErrorException
               && isset($trace[0]['function'])
               && $trace[0]['function']=='errorHandler'
               && isset($trace[0]['class'])
               && $trace[0]['class']=='FirePHP') {
               
                $severity = false;
                switch($Object->getSeverity()) {
                    case E_WARNING: $severity = 'E_WARNING'; break;
                    case E_NOTICE: $severity = 'E_NOTICE'; break;
                    case E_USER_ERROR: $severity = 'E_USER_ERROR'; break;
                    case E_USER_WARNING: $severity = 'E_USER_WARNING'; break;
                    case E_USER_NOTICE: $severity = 'E_USER_NOTICE'; break;
                    case E_STRICT: $severity = 'E_STRICT'; break;
                    case E_RECOVERABLE_ERROR: $severity = 'E_RECOVERABLE_ERROR'; break;
                    case E_DEPRECATED: $severity = 'E_DEPRECATED'; break;
                    case E_USER_DEPRECATED: $severity = 'E_USER_DEPRECATED'; break;
                }
                   
                $Object = array('Class'=>get_class($Object),
                                'Message'=>$severity.': '.$Object->getMessage(),
                                'File'=>$this->_escapeTraceFile($Object->getFile()),
                                'Line'=>$Object->getLine(),
                                'Type'=>'trigger',
                                'Trace'=>$this->_escapeTrace(array_splice($trace,2)));
                $skipFinalObjectEncode = true;
            } else {
                $Object = array('Class'=>get_class($Object),
                                'Message'=>$Object->getMessage(),
                                'File'=>$this->_escapeTraceFile($Object->getFile()),
                                'Line'=>$Object->getLine(),
                                'Type'=>'throw',
                                'Trace'=>$this->_escapeTrace($trace));
                $skipFinalObjectEncode = true;
            }
            $Type = self::EXCEPTION;
          
        } else
        if ($Type==self::TRACE) {
          
            $trace = debug_backtrace();
            if (!$trace) return false;
            for( $i=0 ; $i<sizeof($trace) ; $i++ ) {
    
                if (isset($trace[$i]['class'])
                   && isset($trace[$i]['file'])
                   && ($trace[$i]['class']=='FirePHP'
                       || $trace[$i]['class']=='FB')
                   && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
                       || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
                    /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
                } else
                if (isset($trace[$i]['class'])
                   && isset($trace[$i+1]['file'])
                   && $trace[$i]['class']=='FirePHP'
                   && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
                    /* Skip fb() */
                } else
                if ($trace[$i]['function']=='fb'
                   || $trace[$i]['function']=='trace'
                   || $trace[$i]['function']=='send') {

                    $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'',
                                    'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'',
                                    'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'',
                                    'Message'=>$trace[$i]['args'][0],
                                    'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'',
                                    'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'',
                                    'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'',
                                    'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1)));
        
                    $skipFinalObjectEncode = true;
                    $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
                    $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
                    break;
                }
            }
    
        } else
        if ($Type==self::TABLE) {
          
            if (isset($Object[0]) && is_string($Object[0])) {
                $Object[1] = $this->encodeTable($Object[1]);
            } else {
                $Object = $this->encodeTable($Object);
            }
    
            $skipFinalObjectEncode = true;
          
        } else
        if ($Type==self::GROUP_START) {
          
            if (!$Label) {
                throw $this->newException('You must specify a label for the group!');
            }
          
        } else {
            if ($Type===null) {
                $Type = self::LOG;
            }
        }
        
        if ($this->options['includeLineNumbers']) {
            if (!isset($meta['file']) || !isset($meta['line'])) {
    
                $trace = debug_backtrace();
                for( $i=0 ; $trace && $i<sizeof($trace) ; $i++ ) {
          
                    if (isset($trace[$i]['class'])
                       && isset($trace[$i]['file'])
                       && ($trace[$i]['class']=='FirePHP'
                           || $trace[$i]['class']=='FB')
                       && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
                           || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
                        /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
                    } else
                    if (isset($trace[$i]['class'])
                       && isset($trace[$i+1]['file'])
                       && $trace[$i]['class']=='FirePHP'
                       && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
                        /* Skip fb() */
                    } else
                    if (isset($trace[$i]['file'])
                       && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') {
                        /* Skip FB::fb() */
                    } else {
                        $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
                        $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
                        break;
                    }
                }      
            }
        } else {
            unset($meta['file']);
            unset($meta['line']);
        }

        $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
        $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.self::VERSION);
     
        $structure_index = 1;
        if ($Type==self::DUMP) {
            $structure_index = 2;
            $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1');
        } else {
            $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
        }
      
        if ($Type==self::DUMP) {
            $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}';
        } else {
            $msg_meta = $Options;
            $msg_meta['Type'] = $Type;
            if ($Label!==null) {
                $msg_meta['Label'] = $Label;
            }
            if (isset($meta['file']) && !isset($msg_meta['File'])) {
                $msg_meta['File'] = $meta['file'];
            }
            if (isset($meta['line']) && !isset($msg_meta['Line'])) {
                $msg_meta['Line'] = $meta['line'];
            }
            $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']';
        }
        
        $parts = explode("\n",chunk_split($msg, 5000, "\n"));
    
        for( $i=0 ; $i<count($parts) ; $i++) {
            
            $part = $parts[$i];
            if ($part) {
                
                if (count($parts)>2) {
                    // Message needs to be split into multiple parts
                    $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
                                     (($i==0)?strlen($msg):'')
                                     . '|' . $part . '|'
                                     . (($i<count($parts)-2)?'\\':''));
                } else {
                    $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
                                     strlen($part) . '|' . $part . '|');
                }
                
                $this->messageIndex++;
                
                if ($this->messageIndex > 99999) {
                    throw $this->newException('Maximum number (99,999) of messages reached!');             
                }
            }
        }
    
        $this->setHeader('X-Wf-1-Index',$this->messageIndex-1);
    
        return true;
    }
  
    /**
     * Standardizes path for windows systems.
     *
     * @param string $Path
     * @return string
     */
    protected function _standardizePath($Path)
    {
        return preg_replace('/\\\\+/','/',$Path);    
    }
  
    /**
     * Escape trace path for windows systems
     *
     * @param array $Trace
     * @return array
     */
    protected function _escapeTrace($Trace)
    {
        if (!$Trace) return $Trace;
        for( $i=0 ; $i<sizeof($Trace) ; $i++ ) {
            if (isset($Trace[$i]['file'])) {
                $Trace[$i]['file'] = $this->_escapeTraceFile($Trace[$i]['file']);
            }
            if (isset($Trace[$i]['args'])) {
                $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']);
            }
        }
        return $Trace;    
    }
  
    /**
     * Escape file information of trace for windows systems
     *
     * @param string $File
     * @return string
     */
    protected function _escapeTraceFile($File)
    {
        /* Check if we have a windows filepath */
        if (strpos($File,'\\')) {
            /* First strip down to single \ */
          
            $file = preg_replace('/\\\\+/','\\',$File);
          
            return $file;
        }
        return $File;
    }

    /**
     * Check if headers have already been sent
     *
     * @param string $Filename
     * @param integer $Linenum
     */
    protected function headersSent(&$Filename, &$Linenum)
    {
        return headers_sent($Filename, $Linenum);
    }

    /**
     * Send header
     *
     * @param string $Name
     * @param string $Value
     */
    protected function setHeader($Name, $Value)
    {
        return header($Name.': '.$Value);
    }

    /**
     * Get user agent
     *
     * @return string|false
     */
    protected function getUserAgent()
    {
        if (!isset($_SERVER['HTTP_USER_AGENT'])) return false;
        return $_SERVER['HTTP_USER_AGENT'];
    }

    /**
     * Get all request headers
     * 
     * @return array
     */
    public static function getAllRequestHeaders() {
        static $_cached_headers = false;
        if($_cached_headers!==false) {
            return $_cached_headers;
        }
        $headers = array();
        if(function_exists('getallheaders')) {
            foreach( getallheaders() as $name => $value ) {
                $headers[strtolower($name)] = $value;
            }
        } else {
            foreach($_SERVER as $name => $value) {
                if(substr($name, 0, 5) == 'HTTP_') {
                    $headers[strtolower(str_replace(' ', '-', str_replace('_', ' ', substr($name, 5))))] = $value;
                }
            }
        }
        return $_cached_headers = $headers;
    }

    /**
     * Get a request header
     *
     * @return string|false
     */
    protected function getRequestHeader($Name)
    {
        $headers = self::getAllRequestHeaders();
        if (isset($headers[strtolower($Name)])) {
            return $headers[strtolower($Name)];
        }
        return false;
    }

    /**
     * Returns a new exception
     *
     * @param string $Message
     * @return Exception
     */
    protected function newException($Message)
    {
        return new Exception($Message);
    }
  
    /**
     * Encode an object into a JSON string
     * 
     * Uses PHP's jeson_encode() if available
     * 
     * @param object $Object The object to be encoded
     * @return string The JSON string
     */
    public function jsonEncode($Object, $skipObjectEncode = false)
    {
        if (!$skipObjectEncode) {
            $Object = $this->encodeObject($Object);
        }
        
        if (function_exists('json_encode')
           && $this->options['useNativeJsonEncode']!=false) {
    
            return json_encode($Object);
        } else {
            return $this->json_encode($Object);
        }
    }

    /**
     * Encodes a table by encoding each row and column with encodeObject()
     * 
     * @param array $Table The table to be encoded
     * @return array
     */  
    protected function encodeTable($Table)
    {
    
        if (!$Table) return $Table;
        
        $new_table = array();
        foreach($Table as $row) {
      
            if (is_array($row)) {
                $new_row = array();
            
                foreach($row as $item) {
                    $new_row[] = $this->encodeObject($item);
                }
            
                $new_table[] = $new_row;
            }
        }
        
        return $new_table;
    }

    /**
     * Encodes an object including members with
     * protected and private visibility
     * 
     * @param Object $Object The object to be encoded
     * @param int $Depth The current traversal depth
     * @return array All members of the object
     */
    protected function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1, $MaxDepth = 1)
    {
        if ($MaxDepth > $this->options['maxDepth']) {
            return '** Max Depth ('.$this->options['maxDepth'].') **';
        }

        $return = array();
    
        if (is_resource($Object)) {
    
            return '** '.(string)$Object.' **';
    
        } else    
        if (is_object($Object)) {
    
            if ($ObjectDepth > $this->options['maxObjectDepth']) {
                return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **';
            }
            
            foreach ($this->objectStack as $refVal) {
                if ($refVal === $Object) {
                    return '** Recursion ('.get_class($Object).') **';
                }
            }
            array_push($this->objectStack, $Object);
                    
            $return['__className'] = $class = get_class($Object);
            $class_lower = strtolower($class);
    
            $reflectionClass = new ReflectionClass($class);  
            $properties = array();
            foreach( $reflectionClass->getProperties() as $property) {
                $properties[$property->getName()] = $property;
            }
                
            $members = (array)$Object;
    
            foreach( $properties as $plain_name => $property ) {
    
                $name = $raw_name = $plain_name;
                if ($property->isStatic()) {
                    $name = 'static:'.$name;
                }
                if ($property->isPublic()) {
                    $name = 'public:'.$name;
                } else
                if ($property->isPrivate()) {
                    $name = 'private:'.$name;
                    $raw_name = "\0".$class."\0".$raw_name;
                } else
                if ($property->isProtected()) {
                    $name = 'protected:'.$name;
                    $raw_name = "\0".'*'."\0".$raw_name;
                }
    
                if (!(isset($this->objectFilters[$class_lower])
                     && is_array($this->objectFilters[$class_lower])
                     && in_array($plain_name,$this->objectFilters[$class_lower]))) {
    
                    if (array_key_exists($raw_name,$members)
                       && !$property->isStatic()) {
                  
                        $return[$name] = $this->encodeObject($members[$raw_name], $ObjectDepth + 1, 1, $MaxDepth + 1);      
                
                    } else {
                        if (method_exists($property,'setAccessible')) {
                            $property->setAccessible(true);
                            $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1, $MaxDepth + 1);
                        } else
                        if ($property->isPublic()) {
                            $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1, $MaxDepth + 1);
                        } else {
                            $return[$name] = '** Need PHP 5.3 to get value **';
                        }
                    }
                } else {
                    $return[$name] = '** Excluded by Filter **';
                }
            }
            
            // Include all members that are not defined in the class
            // but exist in the object
            foreach( $members as $raw_name => $value ) {
    
                $name = $raw_name;
              
                if ($name{0} == "\0") {
                    $parts = explode("\0", $name);
                    $name = $parts[2];
                }
              
                $plain_name = $name;
    
                if (!isset($properties[$name])) {
                    $name = 'undeclared:'.$name;
    
                    if (!(isset($this->objectFilters[$class_lower])
                         && is_array($this->objectFilters[$class_lower])
                         && in_array($plain_name,$this->objectFilters[$class_lower]))) {
    
                        $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1, $MaxDepth + 1);
                    } else {
                        $return[$name] = '** Excluded by Filter **';
                    }
                }
            }
            
            array_pop($this->objectStack);
            
        } elseif (is_array($Object)) {
    
            if ($ArrayDepth > $this->options['maxArrayDepth']) {
                return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **';
            }
          
            foreach ($Object as $key => $val) {
              
                // Encoding the $GLOBALS PHP array causes an infinite loop
                // if the recursion is not reset here as it contains
                // a reference to itself. This is the only way I have come up
                // with to stop infinite recursion in this case.
                if ($key=='GLOBALS'
                   && is_array($val)
                   && array_key_exists('GLOBALS',$val)) {
                    $val['GLOBALS'] = '** Recursion (GLOBALS) **';
                }
              
                $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1, $MaxDepth + 1);
            }
        } else {
            if (self::is_utf8($Object)) {
                return $Object;
            } else {
                return utf8_encode($Object);
            }
        }
        return $return;
    }

    /**
     * Returns true if $string is valid UTF-8 and false otherwise.
     *
     * @param mixed $str String to be tested
     * @return boolean
     */
    protected static function is_utf8($str)
    {
        if(function_exists('mb_detect_encoding')) {
            return (mb_detect_encoding($str) == 'UTF-8');
        }
        $c=0; $b=0;
        $bits=0;
        $len=strlen($str);
        for($i=0; $i<$len; $i++){
            $c=ord($str[$i]);
            if ($c > 128){
                if (($c >= 254)) return false;
                elseif ($c >= 252) $bits=6;
                elseif ($c >= 248) $bits=5;
                elseif ($c >= 240) $bits=4;
                elseif ($c >= 224) $bits=3;
                elseif ($c >= 192) $bits=2;
                else return false;
                if (($i+$bits) > $len) return false;
                while($bits > 1){
                    $i++;
                    $b=ord($str[$i]);
                    if ($b < 128 || $b > 191) return false;
                    $bits--;
                }
            }
        }
        return true;
    } 

    /**
     * Converts to and from JSON format.
     *
     * JSON (JavaScript Object Notation) is a lightweight data-interchange
     * format. It is easy for humans to read and write. It is easy for machines
     * to parse and generate. It is based on a subset of the JavaScript
     * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
     * This feature can also be found in  Python. JSON is a text format that is
     * completely language independent but uses conventions that are familiar
     * to programmers of the C-family of languages, including C, C++, C#, Java,
     * JavaScript, Perl, TCL, and many others. These properties make JSON an
     * ideal data-interchange language.
     *
     * This package provides a simple encoder and decoder for JSON notation. It
     * is intended for use with client-side Javascript applications that make
     * use of HTTPRequest to perform server communication functions - data can
     * be encoded into JSON notation for use in a client-side javascript, or
     * decoded from incoming Javascript requests. JSON format is native to
     * Javascript, and can be directly eval()'ed with no further parsing
     * overhead
     *
     * All strings should be in ASCII or UTF-8 format!
     *
     * LICENSE: Redistribution and use in source and binary forms, with or
     * without modification, are permitted provided that the following
     * conditions are met: Redistributions of source code must retain the
     * above copyright notice, this list of conditions and the following
     * disclaimer. Redistributions in binary form must reproduce the above
     * copyright notice, this list of conditions and the following disclaimer
     * in the documentation and/or other materials provided with the
     * distribution.
     *
     * THIS SOFTWARE IS PROVIDED ``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 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.
     *
     * @category
     * @package     Services_JSON
     * @author      Michal Migurski <mike-json@teczno.com>
     * @author      Matt Knapp <mdknapp[at]gmail[dot]com>
     * @author      Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
     * @author      Christoph Dorn <christoph@christophdorn.com>
     * @copyright   2005 Michal Migurski
     * @version     CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
     * @license     http://www.opensource.org/licenses/bsd-license.php
     * @link        http://pear.php.net/pepr/pepr-proposal-show.php?id=198
     */
   
     
    /**
     * Keep a list of objects as we descend into the array so we can detect recursion.
     */
    private $json_objectStack = array();


   /**
    * convert a string from one UTF-8 char to one UTF-16 char
    *
    * Normally should be handled by mb_convert_encoding, but
    * provides a slower PHP-only method for installations
    * that lack the multibye string extension.
    *
    * @param    string  $utf8   UTF-8 character
    * @return   string  UTF-16 character
    * @access   private
    */
    private function json_utf82utf16($utf8)
    {
        // oh please oh please oh please oh please oh please
        if (function_exists('mb_convert_encoding')) {
            return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
        }

        switch(strlen($utf8)) {
            case 1:
                // this case should never be reached, because we are in ASCII range
                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                return $utf8;

            case 2:
                // return a UTF-16 character from a 2-byte UTF-8 char
                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                return chr(0x07 & (ord($utf8{0}) >> 2))
                       . chr((0xC0 & (ord($utf8{0}) << 6))
                       | (0x3F & ord($utf8{1})));

            case 3:
                // return a UTF-16 character from a 3-byte UTF-8 char
                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                return chr((0xF0 & (ord($utf8{0}) << 4))
                       | (0x0F & (ord($utf8{1}) >> 2)))
                       . chr((0xC0 & (ord($utf8{1}) << 6))
                       | (0x7F & ord($utf8{2})));
        }

        // ignoring UTF-32 for now, sorry
        return '';
    }

   /**
    * encodes an arbitrary variable into JSON format
    *
    * @param    mixed   $var    any number, boolean, string, array, or object to be encoded.
    *                           see argument 1 to Services_JSON() above for array-parsing behavior.
    *                           if var is a strng, note that encode() always expects it
    *                           to be in ASCII or UTF-8 format!
    *
    * @return   mixed   JSON string representation of input var or an error if a problem occurs
    * @access   public
    */
    private function json_encode($var)
    {
    
        if (is_object($var)) {
            if (in_array($var,$this->json_objectStack)) {
                return '"** Recursion **"';
            }
        }
          
        switch (gettype($var)) {
            case 'boolean':
                return $var ? 'true' : 'false';

            case 'NULL':
                return 'null';

            case 'integer':
                return (int) $var;

            case 'double':
            case 'float':
                return (float) $var;

            case 'string':
                // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
                $ascii = '';
                $strlen_var = strlen($var);

               /*
                * Iterate over every character in the string,
                * escaping with a slash or encoding to UTF-8 where necessary
                */
                for ($c = 0; $c < $strlen_var; ++$c) {

                    $ord_var_c = ord($var{$c});

                    switch (true) {
                        case $ord_var_c == 0x08:
                            $ascii .= '\b';
                            break;
                        case $ord_var_c == 0x09:
                            $ascii .= '\t';
                            break;
                        case $ord_var_c == 0x0A:
                            $ascii .= '\n';
                            break;
                        case $ord_var_c == 0x0C:
                            $ascii .= '\f';
                            break;
                        case $ord_var_c == 0x0D:
                            $ascii .= '\r';
                            break;

                        case $ord_var_c == 0x22:
                        case $ord_var_c == 0x2F:
                        case $ord_var_c == 0x5C:
                            // double quote, slash, slosh
                            $ascii .= '\\'.$var{$c};
                            break;

                        case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
                            // characters U-00000000 - U-0000007F (same as ASCII)
                            $ascii .= $var{$c};
                            break;

                        case (($ord_var_c & 0xE0) == 0xC0):
                            // characters U-00000080 - U-000007FF, mask 110XXXXX
                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                            $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
                            $c += 1;
                            $utf16 = $this->json_utf82utf16($char);
                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
                            break;

                        case (($ord_var_c & 0xF0) == 0xE0):
                            // characters U-00000800 - U-0000FFFF, mask 1110XXXX
                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                            $char = pack('C*', $ord_var_c,
                                         ord($var{$c + 1}),
                                         ord($var{$c + 2}));
                            $c += 2;
                            $utf16 = $this->json_utf82utf16($char);
                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
                            break;

                        case (($ord_var_c & 0xF8) == 0xF0):
                            // characters U-00010000 - U-001FFFFF, mask 11110XXX
                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                            $char = pack('C*', $ord_var_c,
                                         ord($var{$c + 1}),
                                         ord($var{$c + 2}),
                                         ord($var{$c + 3}));
                            $c += 3;
                            $utf16 = $this->json_utf82utf16($char);
                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
                            break;

                        case (($ord_var_c & 0xFC) == 0xF8):
                            // characters U-00200000 - U-03FFFFFF, mask 111110XX
                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                            $char = pack('C*', $ord_var_c,
                                         ord($var{$c + 1}),
                                         ord($var{$c + 2}),
                                         ord($var{$c + 3}),
                                         ord($var{$c + 4}));
                            $c += 4;
                            $utf16 = $this->json_utf82utf16($char);
                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
                            break;

                        case (($ord_var_c & 0xFE) == 0xFC):
                            // characters U-04000000 - U-7FFFFFFF, mask 1111110X
                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
                            $char = pack('C*', $ord_var_c,
                                         ord($var{$c + 1}),
                                         ord($var{$c + 2}),
                                         ord($var{$c + 3}),
                                         ord($var{$c + 4}),
                                         ord($var{$c + 5}));
                            $c += 5;
                            $utf16 = $this->json_utf82utf16($char);
                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
                            break;
                    }
                }

                return '"'.$ascii.'"';

            case 'array':
                /*
                 * As per JSON spec if any array key is not an integer
                 * we must treat the the whole array as an object. We
                 * also try to catch a sparsely populated associative
                 * array with numeric keys here because some JS engines
                 * will create an array with empty indexes up to
                 * max_index which can cause memory issues and because
                 * the keys, which may be relevant, will be remapped
                 * otherwise.
                 *
                 * As per the ECMA and JSON specification an object may
                 * have any string as a property. Unfortunately due to
                 * a hole in the ECMA specification if the key is a
                 * ECMA reserved word or starts with a digit the
                 * parameter is only accessible using ECMAScript's
                 * bracket notation.
                 */

                // treat as a JSON object
                if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
                  
                    $this->json_objectStack[] = $var;

                    $properties = array_map(array($this, 'json_name_value'),
                                            array_keys($var),
                                            array_values($var));

                    array_pop($this->json_objectStack);

                    foreach($properties as $property) {
                        if ($property instanceof Exception) {
                            return $property;
                        }
                    }

                    return '{' . join(',', $properties) . '}';
                }

                $this->json_objectStack[] = $var;

                // treat it like a regular array
                $elements = array_map(array($this, 'json_encode'), $var);

                array_pop($this->json_objectStack);

                foreach($elements as $element) {
                    if ($element instanceof Exception) {
                        return $element;
                    }
                }

                return '[' . join(',', $elements) . ']';

            case 'object':
                $vars = self::encodeObject($var);

                $this->json_objectStack[] = $var;

                $properties = array_map(array($this, 'json_name_value'),
                                        array_keys($vars),
                                        array_values($vars));

                array_pop($this->json_objectStack);
              
                foreach($properties as $property) {
                    if ($property instanceof Exception) {
                        return $property;
                    }
                }
                     
                return '{' . join(',', $properties) . '}';

            default:
                return null;
        }
    }

   /**
    * array-walking function for use in generating JSON-formatted name-value pairs
    *
    * @param    string  $name   name of key to use
    * @param    mixed   $value  reference to an array element to be encoded
    *
    * @return   string  JSON-formatted name-value pair, like '"name":value'
    * @access   private
    */
    private function json_name_value($name, $value)
    {
        // Encoding the $GLOBALS PHP array causes an infinite loop
        // if the recursion is not reset here as it contains
        // a reference to itself. This is the only way I have come up
        // with to stop infinite recursion in this case.
        if ($name=='GLOBALS'
           && is_array($value)
           && array_key_exists('GLOBALS',$value)) {
            $value['GLOBALS'] = '** Recursion **';
        }
    
        $encoded_value = $this->json_encode($value);

        if ($encoded_value instanceof Exception) {
            return $encoded_value;
        }

        return $this->json_encode(strval($name)) . ':' . $encoded_value;
    }

    /**
     * @deprecated
     */    
    public function setProcessorUrl($URL)
    {
        trigger_error("The FirePHP::setProcessorUrl() method is no longer supported", E_USER_DEPRECATED);
    }

    /**
     * @deprecated
     */
    public function setRendererUrl($URL)
    {
        trigger_error("The FirePHP::setRendererUrl() method is no longer supported", E_USER_DEPRECATED);
    }  
}


================================================
FILE: ThinkPHP/Library/Behavior/ParseTemplateBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
use Think\Storage;
use Think\Think;
/**
 * 系统行为扩展:模板解析
 */
class ParseTemplateBehavior {

    // 行为扩展的执行入口必须是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'])) { // 缓存有效
                //载入模版缓存文件
                Storage::load(C('CACHE_PATH').$_data['prefix'].md5($_content).C('TMPL_CACHFILE_SUFFIX'),$_data['var']);
            }else{
                $tpl = Think::instance('Think\\Template');
                // 编译并加载模板文件
                $tpl->fetch($_content,$_data['var'],$_data['prefix']);
            }
        }else{
            // 调用第三方模板引擎解析和输出
            if(strpos($engine,'\\')){
                $class  =   $engine;
            }else{
                $class   =  'Think\\Template\\Driver\\'.ucwords($engine);                
            }            
            if(class_exists($class)) {
                $tpl   =  new $class;
                $tpl->fetch($_content,$_data['var']);
            }else {  // 类没有定义
                E(L('_NOT_SUPPORT_').': ' . $class);
            }
        }
    }

    /**
     * 检查缓存文件是否有效
     * 如果无效则需要重新编译
     * @access public
     * @param string $tmplTemplateFile  模板文件名
     * @return boolean
     */
    protected function checkCache($tmplTemplateFile,$prefix='') {
        if (!C('TMPL_CACHE_ON')) // 优先对配置设定检测
            return false;
        $tmplCacheFile = C('CACHE_PATH').$prefix.md5($tmplTemplateFile).C('TMPL_CACHFILE_SUFFIX');
        if(!Storage::has($tmplCacheFile)){
            return false;
        }elseif (filemtime($tmplTemplateFile) > Storage::get($tmplCacheFile,'mtime')) {
            // 模板文件如果有更新则缓存需要更新
            return false;
        }elseif (C('TMPL_CACHE_TIME') != 0 && time() > Storage::get($tmplCacheFile,'mtime')+C('TMPL_CACHE_TIME')) {
            // 缓存是否在有效期
            return false;
        }
        // 开启布局模板
        if(C('LAYOUT_ON')) {
            $layoutFile  =  THEME_PATH.C('LAYOUT_NAME').C('TMPL_TEMPLATE_SUFFIX');
            if(filemtime($layoutFile) > Storage::get($tmplCacheFile,'mtime')) {
                return false;
            }
        }
        // 缓存有效
        return true;
    }

    /**
     * 检查缓存内容是否有效
     * 如果无效则需要重新编译
     * @access public
     * @param string $tmplContent  模板内容
     * @return boolean
     */
    protected function checkContentCache($tmplContent,$prefix='') {
        if(Storage::has(C('CACHE_PATH').$prefix.md5($tmplContent).C('TMPL_CACHFILE_SUFFIX'))){
            return true;
        }else{
            return false;
        }
    }    
}


================================================
FILE: ThinkPHP/Library/Behavior/ReadHtmlCacheBehavior.class.php
================================================
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Behavior;
use Think\Storage;
/**
 * 系统行为扩展:静态缓存读取
 */
class ReadHtmlCacheBehavior {
    // 行为扩展的执行入口必须是run
    public function run(&$params){
        // 开启静态缓存
        if(IS_GET && C('HTML_CACHE_ON'))  {
            $cacheTime = $this->requireHtmlCache();
            if( false !== $cacheTime && $this->checkHTMLCache(HTML_FILE_NAME,$cacheTime)) { //静态页面有效
                // 读取静态页面输出
                echo Storage::read(HTML_FILE_NAME,'html');
                exit();
            }
        }
    }

    // 判断是否需要静态缓存
    static private function requireHtmlCache() {
        // 分析当前的静态规则
         $htmls = C('HTML_CACHE_RULES'); // 读取静态规则
         if(!empty($htmls)) {
            $htmls = array_change_key_case($htmls);
            // 静态规则文件定义格式 actionName=>array('静态规则','缓存时间','附加规则')
            // 'read'=>array('{id},{name}',60,'md5') 必须保证静态规则的唯一性 和 可判断性
            // 检测静态规则
            $controllerName = strtolower(CONTROLLER_NAME);
            $actionName     = strtolower(ACTION_NAME);
            if(isset($htmls[$controllerName.':'.$actionName])) {
                $html   =   $htmls[$controllerName.':'.$actionName];   // 某个控制器的操作的静态规则
            }elseif(isset($htmls[$controllerName.':'])){// 某个控制器的静态规则
                $html   =   $htmls[$controllerName.':'];
            }elseif(isset($htmls[$actionName])){
                $html   =   $htmls[$actionName]; // 所有操作的静态规则
            }elseif(isset($htmls['*'])){
                $html   =   $htmls['*']; // 全局静态规则
            }
            if(!empty($html)) {
                // 解读静态规则
                $rule   = is_array($html)?$html[0]:$html;
                // 以$_开头的系统变量
                $callback = function($match){ 
                    switch($match[1]){
                        case '_GET':        $var = $_GET[$match[2]]; break;
                        case '_POST':       $var = $_POST[$match[2]]; break;
                        case '_REQUEST':    $var = $_REQUEST[$match[2]]; break;
                        case '_SERVER':     $var = $_SERVER[$match[2]]; break;
                        case '_SESSION':    $var = $_SESSION[$match[2]]; break;
                        case '_COOKIE':     $var = $_COOKIE[$match[2]]; break;
                    }
                    return (count($match) == 4) ? $match[3]($var) : $var;
                };
                $rule     = preg_replace_callback('/{\$(_\w+)\.(\w+)(?:\|(\w+))?}/', $callback, $rule);
                // {ID|FUN} GET变量的简写
                $rule     = preg_replace_callback('/{(\w+)\|(\w+)}/', function($match){return $match[2]($_GET[$match[1]]);}, $rule);
                $rule     = preg_replace_callback('/{(\w+)}/', function($match){return $_GET[$match[1]];}, $rule);
                // 特殊系统变量
                $rule   = str_ireplace(
                    array('{:controller}','{:action}','{:module}'),
                    array(CONTROLLER_NAME,ACTION_NAME,MODULE_NAME),
                    $rule);
                // {|FUN} 单独使用函数
                $rule  = preg_replace_callback('/{|(\w+)}/', function($match){return $match[1]();},$rule);
                $cacheTime  =   C('HTML_CACHE_TIME',null,60);
                if(is_array($html)){
                    if(!empty($html[2])) $rule    =   $html[2]($rule); // 应用附加函数
                    $cacheTime  =   isset($html[1])?$html[1]:$cacheTime; // 缓存有效期
                }else{
                    $cacheTime  =   $cacheTime;
                }
                
                // 当前缓存文件
                define('HTML_FILE_NAME',HTML_PATH . $rule.C('HTML_FILE_SUFFIX',null,'.html'));
                return $cacheTime;
            }
        }
        // 无需缓存
        return false;
    }

    /**
  
Download .txt
gitextract_dabn5tus/

├── .gitignore
├── .htaccess
├── Application/
│   ├── Common/
│   │   ├── Common/
│   │   │   └── index.html
│   │   ├── Conf/
│   │   │   ├── config.php
│   │   │   └── index.html
│   │   └── index.html
│   ├── Home/
│   │   ├── Common/
│   │   │   └── index.html
│   │   ├── Conf/
│   │   │   ├── config.php
│   │   │   └── index.html
│   │   ├── Controller/
│   │   │   ├── IndexController.class.php
│   │   │   └── index.html
│   │   ├── Model/
│   │   │   └── index.html
│   │   ├── View/
│   │   │   └── index.html
│   │   └── index.html
│   ├── README.md
│   └── index.html
├── Public/
│   └── README.md
├── ThinkPHP/
│   ├── Common/
│   │   └── functions.php
│   ├── Conf/
│   │   ├── convention.php
│   │   └── debug.php
│   ├── LICENSE.txt
│   ├── Lang/
│   │   ├── en-us.php
│   │   ├── pt-br.php
│   │   ├── zh-cn.php
│   │   └── zh-tw.php
│   ├── Library/
│   │   ├── Behavior/
│   │   │   ├── AgentCheckBehavior.class.php
│   │   │   ├── BorisBehavior.class.php
│   │   │   ├── BrowserCheckBehavior.class.php
│   │   │   ├── BuildLiteBehavior.class.php
│   │   │   ├── CheckActionRouteBehavior.class.php
│   │   │   ├── CheckLangBehavior.class.php
│   │   │   ├── ChromeShowPageTraceBehavior.class.php
│   │   │   ├── ContentReplaceBehavior.class.php
│   │   │   ├── CronRunBehavior.class.php
│   │   │   ├── FireShowPageTraceBehavior.class.php
│   │   │   ├── ParseTemplateBehavior.class.php
│   │   │   ├── ReadHtmlCacheBehavior.class.php
│   │   │   ├── RobotCheckBehavior.class.php
│   │   │   ├── ShowPageTraceBehavior.class.php
│   │   │   ├── ShowRuntimeBehavior.class.php
│   │   │   ├── TokenBuildBehavior.class.php
│   │   │   ├── UpgradeNoticeBehavior.class.php
│   │   │   └── WriteHtmlCacheBehavior.class.php
│   │   ├── Com/
│   │   │   ├── Wechat.class.php
│   │   │   ├── WechatAuth.class.php
│   │   │   └── WechatCrypt.class.php
│   │   ├── Org/
│   │   │   ├── Net/
│   │   │   │   ├── Http.class.php
│   │   │   │   └── IpLocation.class.php
│   │   │   └── Util/
│   │   │       ├── ArrayList.class.php
│   │   │       ├── CodeSwitch.class.php
│   │   │       ├── Date.class.php
│   │   │       ├── Rbac.class.php
│   │   │       ├── Stack.class.php
│   │   │       └── String.class.php
│   │   ├── Think/
│   │   │   ├── App.class.php
│   │   │   ├── Auth.class.php
│   │   │   ├── Behavior.class.php
│   │   │   ├── Build.class.php
│   │   │   ├── Cache/
│   │   │   │   └── Driver/
│   │   │   │       ├── Apachenote.class.php
│   │   │   │       ├── Apc.class.php
│   │   │   │       ├── Db.class.php
│   │   │   │       ├── Eaccelerator.class.php
│   │   │   │       ├── File.class.php
│   │   │   │       ├── Memcache.class.php
│   │   │   │       ├── Memcached.class.php
│   │   │   │       ├── Memcachesae.class.php
│   │   │   │       ├── Redis.class.php
│   │   │   │       ├── Shmop.class.php
│   │   │   │       ├── Sqlite.class.php
│   │   │   │       ├── Wincache.class.php
│   │   │   │       └── Xcache.class.php
│   │   │   ├── Cache.class.php
│   │   │   ├── Controller/
│   │   │   │   ├── HproseController.class.php
│   │   │   │   ├── JsonRpcController.class.php
│   │   │   │   ├── RestController.class.php
│   │   │   │   ├── RpcController.class.php
│   │   │   │   └── YarController.class.php
│   │   │   ├── Controller.class.php
│   │   │   ├── Crypt/
│   │   │   │   └── Driver/
│   │   │   │       ├── Base64.class.php
│   │   │   │       ├── Crypt.class.php
│   │   │   │       ├── Des.class.php
│   │   │   │       ├── Think.class.php
│   │   │   │       └── Xxtea.class.php
│   │   │   ├── Crypt.class.php
│   │   │   ├── Db/
│   │   │   │   ├── Driver/
│   │   │   │   │   ├── Firebird.class.php
│   │   │   │   │   ├── Mongo.class.php
│   │   │   │   │   ├── Mysql.class.php
│   │   │   │   │   ├── Oracle.class.php
│   │   │   │   │   ├── Pgsql.class.php
│   │   │   │   │   ├── Sqlite.class.php
│   │   │   │   │   └── Sqlsrv.class.php
│   │   │   │   ├── Driver.class.php
│   │   │   │   └── Lite.class.php
│   │   │   ├── Db.class.php
│   │   │   ├── Dispatcher.class.php
│   │   │   ├── Exception.class.php
│   │   │   ├── Hook.class.php
│   │   │   ├── Image/
│   │   │   │   └── Driver/
│   │   │   │       ├── GIF.class.php
│   │   │   │       ├── Gd.class.php
│   │   │   │       └── Imagick.class.php
│   │   │   ├── Image.class.php
│   │   │   ├── Log/
│   │   │   │   └── Driver/
│   │   │   │       ├── File.class.php
│   │   │   │       └── Sae.class.php
│   │   │   ├── Log.class.php
│   │   │   ├── Model/
│   │   │   │   ├── AdvModel.class.php
│   │   │   │   ├── MergeModel.class.php
│   │   │   │   ├── MongoModel.class.php
│   │   │   │   ├── RelationModel.class.php
│   │   │   │   └── ViewModel.class.php
│   │   │   ├── Model.class.php
│   │   │   ├── Page.class.php
│   │   │   ├── Route.class.php
│   │   │   ├── Session/
│   │   │   │   └── Driver/
│   │   │   │       ├── Db.class.php
│   │   │   │       ├── Memcache.class.php
│   │   │   │       └── Mysqli.class.php
│   │   │   ├── Storage/
│   │   │   │   └── Driver/
│   │   │   │       ├── File.class.php
│   │   │   │       └── Sae.class.php
│   │   │   ├── Storage.class.php
│   │   │   ├── Template/
│   │   │   │   ├── Driver/
│   │   │   │   │   ├── Ease.class.php
│   │   │   │   │   ├── Lite.class.php
│   │   │   │   │   ├── Mobile.class.php
│   │   │   │   │   ├── Smart.class.php
│   │   │   │   │   └── Smarty.class.php
│   │   │   │   ├── TagLib/
│   │   │   │   │   ├── Cx.class.php
│   │   │   │   │   └── Html.class.php
│   │   │   │   └── TagLib.class.php
│   │   │   ├── Template.class.php
│   │   │   ├── Think.class.php
│   │   │   ├── Upload/
│   │   │   │   └── Driver/
│   │   │   │       ├── Bcs/
│   │   │   │       │   ├── bcs.class.php
│   │   │   │       │   ├── mimetypes.class.php
│   │   │   │       │   └── requestcore.class.php
│   │   │   │       ├── Bcs.class.php
│   │   │   │       ├── Ftp.class.php
│   │   │   │       ├── Local.class.php
│   │   │   │       ├── Qiniu/
│   │   │   │       │   └── QiniuStorage.class.php
│   │   │   │       ├── Qiniu.class.php
│   │   │   │       ├── Sae.class.php
│   │   │   │       └── Upyun.class.php
│   │   │   ├── Upload.class.php
│   │   │   ├── Verify.class.php
│   │   │   └── View.class.php
│   │   └── Vendor/
│   │       ├── Boris/
│   │       │   ├── Boris.php
│   │       │   ├── CLIOptionsHandler.php
│   │       │   ├── ColoredInspector.php
│   │       │   ├── Config.php
│   │       │   ├── DumpInspector.php
│   │       │   ├── EvalWorker.php
│   │       │   ├── ExportInspector.php
│   │       │   ├── Inspector.php
│   │       │   ├── ReadlineClient.php
│   │       │   └── ShallowParser.php
│   │       ├── EaseTemplate/
│   │       │   ├── template.core.php
│   │       │   └── template.ease.php
│   │       ├── Hprose/
│   │       │   ├── HproseClassManager.php
│   │       │   ├── HproseClient.php
│   │       │   ├── HproseCommon.php
│   │       │   ├── HproseFormatter.php
│   │       │   ├── HproseHttpClient.php
│   │       │   ├── HproseHttpServer.php
│   │       │   ├── HproseIO.php
│   │       │   ├── HproseIOStream.php
│   │       │   ├── HproseReader.php
│   │       │   ├── HproseTags.php
│   │       │   └── HproseWriter.php
│   │       ├── README.txt
│   │       ├── SmartTemplate/
│   │       │   ├── class.smarttemplate.php
│   │       │   ├── class.smarttemplatedebugger.php
│   │       │   └── class.smarttemplateparser.php
│   │       ├── Smarty/
│   │       │   ├── Smarty.class.php
│   │       │   ├── SmartyBC.class.php
│   │       │   ├── debug.tpl
│   │       │   ├── plugins/
│   │       │   │   ├── block.textformat.php
│   │       │   │   ├── function.counter.php
│   │       │   │   ├── function.cycle.php
│   │       │   │   ├── function.fetch.php
│   │       │   │   ├── function.html_checkboxes.php
│   │       │   │   ├── function.html_image.php
│   │       │   │   ├── function.html_options.php
│   │       │   │   ├── function.html_radios.php
│   │       │   │   ├── function.html_select_date.php
│   │       │   │   ├── function.html_select_time.php
│   │       │   │   ├── function.html_table.php
│   │       │   │   ├── function.mailto.php
│   │       │   │   ├── function.math.php
│   │       │   │   ├── modifier.capitalize.php
│   │       │   │   ├── modifier.date_format.php
│   │       │   │   ├── modifier.debug_print_var.php
│   │       │   │   ├── modifier.escape.php
│   │       │   │   ├── modifier.regex_replace.php
│   │       │   │   ├── modifier.replace.php
│   │       │   │   ├── modifier.spacify.php
│   │       │   │   ├── modifier.truncate.php
│   │       │   │   ├── modifiercompiler.cat.php
│   │       │   │   ├── modifiercompiler.count_characters.php
│   │       │   │   ├── modifiercompiler.count_paragraphs.php
│   │       │   │   ├── modifiercompiler.count_sentences.php
│   │       │   │   ├── modifiercompiler.count_words.php
│   │       │   │   ├── modifiercompiler.default.php
│   │       │   │   ├── modifiercompiler.escape.php
│   │       │   │   ├── modifiercompiler.from_charset.php
│   │       │   │   ├── modifiercompiler.indent.php
│   │       │   │   ├── modifiercompiler.lower.php
│   │       │   │   ├── modifiercompiler.noprint.php
│   │       │   │   ├── modifiercompiler.string_format.php
│   │       │   │   ├── modifiercompiler.strip.php
│   │       │   │   ├── modifiercompiler.strip_tags.php
│   │       │   │   ├── modifiercompiler.to_charset.php
│   │       │   │   ├── modifiercompiler.unescape.php
│   │       │   │   ├── modifiercompiler.upper.php
│   │       │   │   ├── modifiercompiler.wordwrap.php
│   │       │   │   ├── outputfilter.trimwhitespace.php
│   │       │   │   ├── shared.escape_special_chars.php
│   │       │   │   ├── shared.literal_compiler_param.php
│   │       │   │   ├── shared.make_timestamp.php
│   │       │   │   ├── shared.mb_str_replace.php
│   │       │   │   ├── shared.mb_unicode.php
│   │       │   │   ├── shared.mb_wordwrap.php
│   │       │   │   └── variablefilter.htmlspecialchars.php
│   │       │   └── sysplugins/
│   │       │       ├── smarty_cacheresource.php
│   │       │       ├── smarty_cacheresource_custom.php
│   │       │       ├── smarty_cacheresource_keyvaluestore.php
│   │       │       ├── smarty_config_source.php
│   │       │       ├── smarty_internal_cacheresource_file.php
│   │       │       ├── smarty_internal_compile_append.php
│   │       │       ├── smarty_internal_compile_assign.php
│   │       │       ├── smarty_internal_compile_block.php
│   │       │       ├── smarty_internal_compile_break.php
│   │       │       ├── smarty_internal_compile_call.php
│   │       │       ├── smarty_internal_compile_capture.php
│   │       │       ├── smarty_internal_compile_config_load.php
│   │       │       ├── smarty_internal_compile_continue.php
│   │       │       ├── smarty_internal_compile_debug.php
│   │       │       ├── smarty_internal_compile_eval.php
│   │       │       ├── smarty_internal_compile_extends.php
│   │       │       ├── smarty_internal_compile_for.php
│   │       │       ├── smarty_internal_compile_foreach.php
│   │       │       ├── smarty_internal_compile_function.php
│   │       │       ├── smarty_internal_compile_if.php
│   │       │       ├── smarty_internal_compile_include.php
│   │       │       ├── smarty_internal_compile_include_php.php
│   │       │       ├── smarty_internal_compile_insert.php
│   │       │       ├── smarty_internal_compile_ldelim.php
│   │       │       ├── smarty_internal_compile_nocache.php
│   │       │       ├── smarty_internal_compile_private_block_plugin.php
│   │       │       ├── smarty_internal_compile_private_function_plugin.php
│   │       │       ├── smarty_internal_compile_private_modifier.php
│   │       │       ├── smarty_internal_compile_private_object_block_function.php
│   │       │       ├── smarty_internal_compile_private_object_function.php
│   │       │       ├── smarty_internal_compile_private_print_expression.php
│   │       │       ├── smarty_internal_compile_private_registered_block.php
│   │       │       ├── smarty_internal_compile_private_registered_function.php
│   │       │       ├── smarty_internal_compile_private_special_variable.php
│   │       │       ├── smarty_internal_compile_rdelim.php
│   │       │       ├── smarty_internal_compile_section.php
│   │       │       ├── smarty_internal_compile_setfilter.php
│   │       │       ├── smarty_internal_compile_while.php
│   │       │       ├── smarty_internal_compilebase.php
│   │       │       ├── smarty_internal_config.php
│   │       │       ├── smarty_internal_config_file_compiler.php
│   │       │       ├── smarty_internal_configfilelexer.php
│   │       │       ├── smarty_internal_configfileparser.php
│   │       │       ├── smarty_internal_data.php
│   │       │       ├── smarty_internal_debug.php
│   │       │       ├── smarty_internal_filter_handler.php
│   │       │       ├── smarty_internal_function_call_handler.php
│   │       │       ├── smarty_internal_get_include_path.php
│   │       │       ├── smarty_internal_nocache_insert.php
│   │       │       ├── smarty_internal_parsetree.php
│   │       │       ├── smarty_internal_resource_eval.php
│   │       │       ├── smarty_internal_resource_extends.php
│   │       │       ├── smarty_internal_resource_file.php
│   │       │       ├── smarty_internal_resource_php.php
│   │       │       ├── smarty_internal_resource_registered.php
│   │       │       ├── smarty_internal_resource_stream.php
│   │       │       ├── smarty_internal_resource_string.php
│   │       │       ├── smarty_internal_smartytemplatecompiler.php
│   │       │       ├── smarty_internal_template.php
│   │       │       ├── smarty_internal_templatebase.php
│   │       │       ├── smarty_internal_templatecompilerbase.php
│   │       │       ├── smarty_internal_templatelexer.php
│   │       │       ├── smarty_internal_templateparser.php
│   │       │       ├── smarty_internal_utility.php
│   │       │       ├── smarty_internal_write_file.php
│   │       │       ├── smarty_resource.php
│   │       │       ├── smarty_resource_custom.php
│   │       │       ├── smarty_resource_recompiled.php
│   │       │       ├── smarty_resource_uncompiled.php
│   │       │       └── smarty_security.php
│   │       ├── TemplateLite/
│   │       │   ├── class.compiler.php
│   │       │   ├── class.config.php
│   │       │   ├── class.template.php
│   │       │   └── internal/
│   │       │       ├── compile.compile_config.php
│   │       │       ├── compile.compile_custom_block.php
│   │       │       ├── compile.compile_custom_function.php
│   │       │       ├── compile.compile_if.php
│   │       │       ├── compile.generate_compiler_debug_output.php
│   │       │       ├── compile.include.php
│   │       │       ├── compile.parse_is_expr.php
│   │       │       ├── compile.section_start.php
│   │       │       ├── debug.tpl
│   │       │       ├── template.build_dir.php
│   │       │       ├── template.config_loader.php
│   │       │       ├── template.destroy_dir.php
│   │       │       ├── template.fetch_compile_include.php
│   │       │       └── template.generate_debug_output.php
│   │       ├── jsonRPC/
│   │       │   ├── jsonRPCClient.php
│   │       │   └── jsonRPCServer.php
│   │       ├── phpRPC/
│   │       │   ├── bigint.php
│   │       │   ├── compat.php
│   │       │   ├── dhparams/
│   │       │   │   ├── 1024.dhp
│   │       │   │   ├── 128.dhp
│   │       │   │   ├── 1536.dhp
│   │       │   │   ├── 160.dhp
│   │       │   │   ├── 192.dhp
│   │       │   │   ├── 2048.dhp
│   │       │   │   ├── 256.dhp
│   │       │   │   ├── 3072.dhp
│   │       │   │   ├── 4096.dhp
│   │       │   │   ├── 512.dhp
│   │       │   │   ├── 768.dhp
│   │       │   │   └── 96.dhp
│   │       │   ├── dhparams.php
│   │       │   ├── pecl/
│   │       │   │   └── xxtea/
│   │       │   │       ├── CREDITS
│   │       │   │       ├── INSTALL
│   │       │   │       ├── LICENSE
│   │       │   │       ├── README
│   │       │   │       ├── config.m4
│   │       │   │       ├── config.w32
│   │       │   │       ├── php_xxtea.c
│   │       │   │       ├── php_xxtea.dsp
│   │       │   │       ├── php_xxtea.h
│   │       │   │       ├── php_xxtea.sln
│   │       │   │       ├── php_xxtea.vcproj
│   │       │   │       ├── test/
│   │       │   │       │   └── test.php
│   │       │   │       ├── xxtea.c
│   │       │   │       └── xxtea.h
│   │       │   ├── phprpc_client.php
│   │       │   ├── phprpc_date.php
│   │       │   ├── phprpc_server.php
│   │       │   └── xxtea.php
│   │       └── spyc/
│   │           ├── COPYING
│   │           ├── README.md
│   │           ├── Spyc.php
│   │           ├── composer.json
│   │           ├── examples/
│   │           │   ├── yaml-dump.php
│   │           │   └── yaml-load.php
│   │           ├── php4/
│   │           │   ├── 5to4.php
│   │           │   ├── spyc.php4
│   │           │   └── test.php4
│   │           ├── spyc.yaml
│   │           └── tests/
│   │               ├── DumpTest.php
│   │               ├── IndentTest.php
│   │               ├── ParseTest.php
│   │               ├── RoundTripTest.php
│   │               ├── comments.yaml
│   │               ├── failing1.yaml
│   │               ├── indent_1.yaml
│   │               └── quotes.yaml
│   ├── Mode/
│   │   ├── Api/
│   │   │   ├── App.class.php
│   │   │   ├── Controller.class.php
│   │   │   ├── Dispatcher.class.php
│   │   │   └── functions.php
│   │   ├── Lite/
│   │   │   ├── App.class.php
│   │   │   ├── Controller.class.php
│   │   │   ├── Dispatcher.class.php
│   │   │   ├── Model.class.php
│   │   │   ├── View.class.php
│   │   │   ├── convention.php
│   │   │   └── functions.php
│   │   ├── Sae/
│   │   │   └── convention.php
│   │   ├── api.php
│   │   ├── common.php
│   │   ├── lite.php
│   │   └── sae.php
│   ├── ThinkPHP.php
│   └── Tpl/
│       ├── dispatch_jump.tpl
│       ├── page_trace.tpl
│       └── think_exception.tpl
├── index.php
├── readme.md
├── requirements.apt
└── tsuru.yml
Download .txt
Showing preview only (271K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3233 symbols across 304 files)

FILE: Application/Home/Controller/IndexController.class.php
  class IndexController (line 18) | class IndexController extends Controller{
    method index (line 24) | public function index($id = ''){
    method demo (line 94) | private function demo($wechat, $data){
    method upload (line 185) | private function upload($type){

FILE: ThinkPHP/Common/functions.php
  function C (line 23) | function C($name=null, $value=null,$default=null) {
  function load_config (line 60) | function load_config($file,$parse=CONF_PARSE){
  function yaml_parse_file (line 88) | function yaml_parse_file($file) {
  function E (line 101) | function E($msg, $code=0) {
  function G (line 122) | function G($start,$end='',$dec=4) {
  function L (line 149) | function L($name=null, $value=null) {
  function trace (line 185) | function trace($value='[think]',$label='',$level='DEBUG',$record=false) {
  function compile (line 194) | function compile($filename) {
  function T (line 215) | function T($template='',$layer=''){
  function I (line 271) | function I($name,$default='',$filter=null,$datas=null) {
  function array_map_recursive (line 406) | function array_map_recursive($filter, $data) {
  function N (line 430) | function N($key, $step=0,$save=false) {
  function parse_name (line 453) | function parse_name($name, $type=0) {
  function require_cache (line 466) | function require_cache($filename) {
  function file_exists_case (line 484) | function file_exists_case($filename) {
  function import (line 502) | function import($class, $baseUrl = '', $ext=EXT) {
  function load (line 544) | function load($name, $baseUrl='', $ext='.php') {
  function vendor (line 568) | function vendor($class, $baseUrl = '', $ext='.php') {
  function D (line 580) | function D($name='',$layer='') {
  function M (line 612) | function M($name='', $tablePrefix='',$connection='') {
  function parse_res_name (line 633) | function parse_res_name($name,$layer,$level=1){
  function controller (line 667) | function controller($name,$path=''){
  function A (line 694) | function A($name,$layer='',$level=0) {
  function R (line 719) | function R($url,$vars=array(),$layer='') {
  function tag (line 740) | function tag($tag, &$params=NULL) {
  function B (line 751) | function B($name, $tag='',&$params=NULL) {
  function strip_whitespace (line 763) | function strip_whitespace($content) {
  function throw_exception (line 815) | function throw_exception($msg, $type='Think\\Exception', $code=0) {
  function dump (line 831) | function dump($var, $echo=true, $label=null, $strict=true) {
  function layout (line 861) | function layout($layout) {
  function U (line 881) | function U($url='',$vars='',$suffix=true,$domain=false) {
  function W (line 1038) | function W($name, $data=array()) {
  function is_ssl (line 1046) | function is_ssl() {
  function redirect (line 1062) | function redirect($url, $time=0, $msg='') {
  function S (line 1091) | function S($name,$value='',$options=null) {
  function F (line 1125) | function F($name, $value='', $path=DATA_PATH) {
  function to_guid_string (line 1161) | function to_guid_string($mix) {
  function xml_encode (line 1182) | function xml_encode($data, $root='think', $item='item', $attr='', $id='i...
  function data_to_xml (line 1206) | function data_to_xml($data, $item='item', $id='id') {
  function session (line 1226) | function session($name='',$value='') {
  function cookie (line 1350) | function cookie($name='', $value='', $option=null) {
  function load_ext_file (line 1425) | function load_ext_file($path) {
  function get_client_ip (line 1452) | function get_client_ip($type = 0,$adv=false) {
  function send_http_status (line 1481) | function send_http_status($code) {
  function think_filter (line 1538) | function think_filter(&$value){
  function in_array_case (line 1548) | function in_array_case($value,$array){

FILE: ThinkPHP/Library/Behavior/AgentCheckBehavior.class.php
  class AgentCheckBehavior (line 15) | class AgentCheckBehavior {
    method run (line 16) | public function run(&$params) {

FILE: ThinkPHP/Library/Behavior/BorisBehavior.class.php
  class BorisBehavior (line 16) | class BorisBehavior {
    method run (line 17) | public function run(&$params) {

FILE: ThinkPHP/Library/Behavior/BrowserCheckBehavior.class.php
  class BrowserCheckBehavior (line 15) | class BrowserCheckBehavior {
    method run (line 16) | public function run(&$params) {

FILE: ThinkPHP/Library/Behavior/BuildLiteBehavior.class.php
  class BuildLiteBehavior (line 15) | class BuildLiteBehavior {
    method run (line 16) | public function run(&$params) {
    method buildArrayDefine (line 70) | private function buildArrayDefine($array) {

FILE: ThinkPHP/Library/Behavior/CheckActionRouteBehavior.class.php
  class CheckActionRouteBehavior (line 15) | class CheckActionRouteBehavior {
    method run (line 18) | public function run(&$config){
    method checkUrlMatch (line 53) | private function checkUrlMatch($regx,$rule) {
    method parseUrl (line 82) | private function parseUrl($url) {
    method parseRule (line 104) | private function parseRule($rule,$route,$regx) {
    method parseRegex (line 168) | private function parseRegex($matches,$route,$regx) {

FILE: ThinkPHP/Library/Behavior/CheckLangBehavior.class.php
  class CheckLangBehavior (line 15) | class CheckLangBehavior {
    method run (line 18) | public function run(&$params){
    method checkLanguage (line 29) | private function checkLanguage() {

FILE: ThinkPHP/Library/Behavior/ChromeShowPageTraceBehavior.class.php
  class ChromeShowPageTraceBehavior (line 35) | class ChromeShowPageTraceBehavior {
    method run (line 40) | public function run(&$params){
    method showTrace (line 49) | private function showTrace() {
    method showTime (line 138) | private function showTime() {
  function chrome_debug (line 148) | function chrome_debug($msg,$type='trace',$trace_level=1){
  class ChromePhp (line 188) | class ChromePhp{
    method __construct (line 295) | private function __construct()
    method getInstance (line 307) | public static function getInstance()
    method log (line 321) | public static function log()
    method warn (line 333) | public static function warn()
    method error (line 345) | public static function error()
    method group (line 356) | public static function group()
    method info (line 368) | public static function info()
    method groupCollapsed (line 379) | public static function groupCollapsed()
    method groupEnd (line 390) | public static function groupEnd()
    method table (line 401) | public static function table()
    method _log (line 413) | protected static function _log($type, array $args)
    method _convert (line 446) | protected function _convert($object)
    method _getPropertyKey (line 510) | protected function _getPropertyKey(ReflectionProperty $property)
    method _addRow (line 532) | protected function _addRow(array $logs, $backtrace, $type)
    method _writeHeader (line 555) | protected function _writeHeader($data)
    method _encode (line 566) | protected function _encode($data)
    method addSetting (line 578) | public function addSetting($key, $value)
    method addSettings (line 589) | public function addSettings(array $settings)
    method getSetting (line 602) | public function getSetting($key)

FILE: ThinkPHP/Library/Behavior/ContentReplaceBehavior.class.php
  class ContentReplaceBehavior (line 15) | class ContentReplaceBehavior {
    method run (line 18) | public function run(&$content){
    method templateContentReplace (line 28) | protected function templateContentReplace($content) {

FILE: ThinkPHP/Library/Behavior/CronRunBehavior.class.php
  class CronRunBehavior (line 15) | class CronRunBehavior {
    method run (line 17) | public function run(&$params) {

FILE: ThinkPHP/Library/Behavior/FireShowPageTraceBehavior.class.php
  class FireShowPageTraceBehavior (line 34) | class FireShowPageTraceBehavior {
    method run (line 38) | public function run(&$params){
    method showTrace (line 46) | private function showTrace() {
    method showTime (line 113) | private function showTime() {
  function fb (line 124) | function fb()
  class FB (line 133) | class FB
    method setEnabled (line 142) | public static function setEnabled($Enabled)
    method getEnabled (line 154) | public static function getEnabled()
    method setObjectFilter (line 170) | public static function setObjectFilter($Class, $Filter)
    method setOptions (line 183) | public static function setOptions($Options)
    method getOptions (line 195) | public static function getOptions()
    method send (line 209) | public static function send()
    method group (line 227) | public static function group($Name, $Options=null)
    method groupEnd (line 239) | public static function groupEnd()
    method log (line 253) | public static function log($Object, $Label=null)
    method info (line 267) | public static function info($Object, $Label=null)
    method warn (line 281) | public static function warn($Object, $Label=null)
    method error (line 295) | public static function error($Object, $Label=null)
    method dump (line 309) | public static function dump($Key, $Variable)
    method trace (line 322) | public static function trace($Label)
    method table (line 336) | public static function table($Label, $Table)
  method __sleep (line 546) | public function __sleep()
  method getInstance (line 557) | public static function getInstance($AutoCreate = false)
  method init (line 570) | public static function init()
  method setInstance (line 581) | public static function setInstance($instance)
  method setLogToInsightConsole (line 592) | public function setLogToInsightConsole($console)
  method setEnabled (line 610) | public function setEnabled($Enabled)
  method getEnabled (line 620) | public function getEnabled()
  method setObjectFilter (line 634) | public function setObjectFilter($Class, $Filter)
  method setOptions (line 652) | public function setOptions($Options)
  method getOptions (line 662) | public function getOptions()
  method setOption (line 675) | public function setOption($Name, $Value)
  method getOption (line 690) | public function getOption($Name)
  method registerErrorHandler (line 705) | public function registerErrorHandler($throwErrorExceptions = false)
  method errorHandler (line 728) | public function errorHandler($errno, $errstr, $errfile, $errline, $errco...
  method registerExceptionHandler (line 753) | public function registerExceptionHandler()
  method exceptionHandler (line 766) | function exceptionHandler($Exception)
  method registerAssertionHandler (line 788) | public function registerAssertionHandler($convertAssertionErrorsToExcept...
  method assertionHandler (line 809) | public function assertionHandler($file, $line, $code)
  method group (line 838) | public function group($Name, $Options = null)
  method groupEnd (line 863) | public function groupEnd()
  method log (line 877) | public function log($Object, $Label = null, $Options = array())
  method info (line 891) | public function info($Object, $Label = null, $Options = array())
  method warn (line 905) | public function warn($Object, $Label = null, $Options = array())
  method error (line 919) | public function error($Object, $Label = null, $Options = array())
  method dump (line 933) | public function dump($Key, $Variable, $Options = array())
  method trace (line 955) | public function trace($Label)
  method table (line 969) | public function table($Label, $Table, $Options = array())
  method to (line 979) | public static function to()
  method plugin (line 994) | public static function plugin()
  method detectClientExtension (line 1009) | public function detectClientExtension()
  method fb (line 1032) | public function fb($Object)
  method _standardizePath (line 1349) | protected function _standardizePath($Path)
  method _escapeTrace (line 1360) | protected function _escapeTrace($Trace)
  method _escapeTraceFile (line 1380) | protected function _escapeTraceFile($File)
  method headersSent (line 1399) | protected function headersSent(&$Filename, &$Linenum)
  method setHeader (line 1410) | protected function setHeader($Name, $Value)
  method getUserAgent (line 1420) | protected function getUserAgent()
  method getAllRequestHeaders (line 1431) | public static function getAllRequestHeaders() {
  method getRequestHeader (line 1456) | protected function getRequestHeader($Name)
  method newException (line 1471) | protected function newException($Message)
  method jsonEncode (line 1484) | public function jsonEncode($Object, $skipObjectEncode = false)
  method encodeTable (line 1505) | protected function encodeTable($Table)
  function json_name_value (line 2043) | function json_name_value($name, $value)
  function setProcessorUrl (line 2067) | function setProcessorUrl($URL)
  function setRendererUrl (line 2075) | function setRendererUrl($URL)

FILE: ThinkPHP/Library/Behavior/ParseTemplateBehavior.class.php
  class ParseTemplateBehavior (line 17) | class ParseTemplateBehavior {
    method run (line 20) | public function run(&$_data){
    method checkCache (line 57) | protected function checkCache($tmplTemplateFile,$prefix='') {
    method checkContentCache (line 88) | protected function checkContentCache($tmplContent,$prefix='') {

FILE: ThinkPHP/Library/Behavior/ReadHtmlCacheBehavior.class.php
  class ReadHtmlCacheBehavior (line 16) | class ReadHtmlCacheBehavior {
    method run (line 18) | public function run(&$params){
    method requireHtmlCache (line 31) | static private function requireHtmlCache() {
    method checkHTMLCache (line 101) | static public function checkHTMLCache($cacheFile='',$cacheTime='') {

FILE: ThinkPHP/Library/Behavior/RobotCheckBehavior.class.php
  class RobotCheckBehavior (line 16) | class RobotCheckBehavior {
    method run (line 18) | public function run(&$params) {
    method isRobot (line 26) | static private function isRobot() {

FILE: ThinkPHP/Library/Behavior/ShowPageTraceBehavior.class.php
  class ShowPageTraceBehavior (line 16) | class ShowPageTraceBehavior {
    method run (line 20) | public function run(&$params){
    method showTrace (line 30) | private function showTrace() {
    method showTime (line 112) | private function showTime() {

FILE: ThinkPHP/Library/Behavior/ShowRuntimeBehavior.class.php
  class ShowRuntimeBehavior (line 15) | class ShowRuntimeBehavior {
    method run (line 18) | public function run(&$content){
    method showTime (line 39) | private function showTime() {

FILE: ThinkPHP/Library/Behavior/TokenBuildBehavior.class.php
  class TokenBuildBehavior (line 15) | class TokenBuildBehavior {
    method run (line 17) | public function run(&$content){
    method getToken (line 36) | private function getToken(){

FILE: ThinkPHP/Library/Behavior/UpgradeNoticeBehavior.class.php
  class UpgradeNoticeBehavior (line 35) | class UpgradeNoticeBehavior {
    method run (line 42) | public function run(&$params) {
    method send_sms (line 65) | private function send_sms($msg) {
    method send (line 92) | private function send($url, $params = array() , $headers = array()) {

FILE: ThinkPHP/Library/Behavior/WriteHtmlCacheBehavior.class.php
  class WriteHtmlCacheBehavior (line 16) | class WriteHtmlCacheBehavior {
    method run (line 19) | public function run(&$content) {

FILE: ThinkPHP/Library/Com/Wechat.class.php
  class Wechat (line 19) | class Wechat {
    method __construct (line 81) | public function __construct($token, $appid = '', $key = ''){
    method init (line 115) | private function init(){
    method request (line 137) | public function request(){
    method response (line 146) | public function response($content, $type = self::MSG_TYPE_TEXT){
    method replyText (line 178) | public function replyText($text){
    method replyImage (line 186) | public function replyImage($media_id){
    method replyVoice (line 194) | public function replyVoice($media_id){
    method replyVideo (line 204) | public function replyVideo($media_id, $title, $discription){
    method replyMusic (line 216) | public function replyMusic($title, $discription, $musicurl, $hqmusicur...
    method replyNews (line 228) | public function replyNews($news, $news1, $news2, $news3){
    method replyNewsOnce (line 239) | public function replyNewsOnce($title, $discription, $url, $picurl){
    method data2xml (line 250) | protected static function data2xml($xml, $data, $item = 'item') {
    method xml2data (line 277) | protected static function xml2data($xml){
    method auth (line 297) | protected static function auth($token){
    method text (line 314) | private static function text($content){
    method image (line 323) | private static function image($media){
    method voice (line 332) | private static function voice($media){
    method video (line 341) | private static function video($video){
    method music (line 356) | private static function music($music){
    method news (line 378) | private static function news($news){
    method extract (line 401) | private static function extract($encrypt){
    method generate (line 423) | private static function generate($data){
    method sign (line 457) | private static function sign($timestamp, $nonce, $encrypt){

FILE: ThinkPHP/Library/Com/WechatAuth.class.php
  class WechatAuth (line 14) | class WechatAuth {
    method __construct (line 72) | public function __construct($appid, $secret, $token = null){
    method getRequestCodeURL (line 85) | public function getRequestCodeURL($redirect_uri, $state = null,
    method getAccessToken (line 107) | public function getAccessToken($type = 'client', $code = null){
    method getUserInfo (line 151) | public function getUserInfo($openid, $lang = 'zh_CN'){
    method mediaUpload (line 167) | public function mediaUpload($filename, $type){
    method materialAddMaterial (line 185) | public function materialAddMaterial($filename, $type, $description = ''){
    method mediaGet (line 213) | public function mediaGet($media_id){
    method messageCustomSend (line 230) | public function messageCustomSend($openid, $content, $type = self::MSG...
    method sendText (line 249) | public function sendText($openid, $text){
    method sendImage (line 258) | public function sendImage($openid, $media){
    method sendVoice (line 267) | public function sendVoice($openid, $media){
    method sendVideo (line 278) | public function sendVideo(){
    method sendMusic (line 293) | public function sendMusic(){
    method sendNews (line 308) | public function sendNews(){
    method sendNewsOnce (line 322) | public function sendNewsOnce(){
    method groupsCreate (line 333) | public function groupsCreate($name){
    method groupsGet (line 342) | public function groupsGet(){
    method groupsGetid (line 351) | public function groupsGetid($openid){
    method groupsUpdate (line 362) | public function groupsUpdate($id, $name){
    method groupsMemberUpdate (line 373) | public function groupsMemberUpdate($openid, $to_groupid){
    method userInfoUpdateremark (line 384) | public function userInfoUpdateremark($openid, $remark){
    method userInfo (line 394) | public function userInfo($openid, $lang = 'zh_CN'){
    method userGet (line 404) | public function userGet($next_openid = ''){
    method menuCreate (line 413) | public function menuCreate($button){
    method menuGet (line 422) | public function menuGet(){
    method menuDelete (line 429) | public function menuDelete(){
    method qrcodeCreate (line 438) | public function qrcodeCreate($scene_id, $expire_seconds = 0){
    method showqrcode (line 457) | public function showqrcode($ticket){
    method shorturl (line 466) | public function shorturl($long_url){
    method api (line 483) | protected function api($name, $data = '', $method = 'POST', $param = '...
    method http (line 512) | protected static function http($url, $param, $data = '', $method = 'GE...
    method text (line 552) | private static function text($content){
    method image (line 561) | private static function image($media){
    method voice (line 570) | private static function voice($media){
    method video (line 579) | private static function video($video){
    method music (line 594) | private static function music($music){
    method news (line 616) | private static function news($news){

FILE: ThinkPHP/Library/Com/WechatCrypt.class.php
  class WechatCrypt (line 14) | class WechatCrypt{
    method __construct (line 32) | public function __construct($key, $appid){
    method encrypt (line 46) | public function encrypt($text){
    method decrypt (line 81) | public function decrypt($encrypt){
    method PKCS7Encode (line 131) | private static function PKCS7Encode($text, $size){
    method PKCS7Decode (line 153) | private static function PKCS7Decode($text, $size){
    method getRandomStr (line 169) | private static function getRandomStr($len){

FILE: ThinkPHP/Library/Org/Net/Http.class.php
  class Http (line 17) | class Http {
    method curlDownload (line 26) | static public function curlDownload($remote,$local) {
    method fsockopenDownload (line 52) | static public function fsockopenDownload($url, $conf = array()) {
    method download (line 145) | static public function download ($filename, $showname='',$content='',$...
    method getHeaderInfo (line 189) | static function getHeaderInfo($header='',$echo=true) {
    method sendHttpStatus (line 213) | static function sendHttpStatus($code) {

FILE: ThinkPHP/Library/Org/Net/IpLocation.class.php
  class IpLocation (line 17) | class IpLocation {
    method __construct (line 52) | public function __construct($filename = "UTFWry.dat") {
    method getlong (line 67) | private function getlong() {
    method getlong3 (line 79) | private function getlong3() {
    method packip (line 92) | private function packip($ip) {
    method getstring (line 105) | private function getstring($data = "") {
    method getarea (line 120) | private function getarea() {
    method getlocation (line 145) | public function getlocation($ip='') {
    method __destruct (line 226) | public function __destruct() {

FILE: ThinkPHP/Library/Org/Util/ArrayList.class.php
  class ArrayList (line 19) | class ArrayList implements \IteratorAggregate {
    method __construct (line 33) | public function __construct($elements = array()) {
    method getIterator (line 44) | public function getIterator() {
    method add (line 54) | public function add($element) {
    method unshift (line 59) | public function unshift($element) {
    method pop (line 64) | public function pop() {
    method addAll (line 74) | public function addAll($list) {
    method clear (line 87) | public function clear() {
    method contains (line 97) | public function contains($element) {
    method get (line 107) | public function get($index) {
    method indexOf (line 118) | public function indexOf($element) {
    method isEmpty (line 127) | public function isEmpty() {
    method lastIndexOf (line 137) | public function lastIndexOf($element) {
    method toJson (line 143) | public function toJson() {
    method remove (line 154) | public function remove($index) {
    method removeRange (line 166) | public function removeRange($offset , $length) {
    method unique (line 174) | public function unique() {
    method range (line 184) | public function range($offset,$length=null) {
    method set (line 196) | public function set($index, $element) {
    method size (line 207) | public function size() {
    method toArray (line 216) | public function toArray() {
    method ksort (line 221) | public function ksort() {
    method asort (line 226) | public function asort() {
    method rsort (line 231) | public function rsort() {
    method natsort (line 236) | public function natsort() {

FILE: ThinkPHP/Library/Org/Util/CodeSwitch.class.php
  class CodeSwitch (line 12) | class CodeSwitch {
    method error (line 18) | static private function error($msg) {
    method info (line 22) | static private function info($info) {
    method DetectAndSwitch (line 35) | static function DetectAndSwitch($filename,$out_charset) {
    method searchdir (line 138) | static function searchdir($path,$mode = "FULL",$file_types = array(".h...
    method CodingSwitch (line 186) | static function CodingSwitch($app = "./",$charset='UTF-8',$mode = "FIL...
    method getError (line 193) | static public function getError() {
    method getInfo (line 197) | static public function getInfo() {

FILE: ThinkPHP/Library/Org/Util/Date.class.php
  class Date (line 21) | class Date {
    method __construct (line 138) | public function __construct($date='') {
    method parse (line 152) | public function parse($date) {
    method valid (line 187) | public function valid($date) {
    method setDate (line 198) | public function setDate($date) {
    method format (line 227) | public function format($format = "%Y-%m-%d %H:%M:%S") {
    method isLeapYear (line 237) | public function isLeapYear($year='') {
    method dateDiff (line 258) | public function dateDiff($date, $elaps = "d") {
    method timeDiff (line 298) | public function timeDiff( $time ,$precision=false) {
    method getDayOfWeek (line 326) | public function getDayOfWeek($n){
    method firstDayOfWeek (line 336) | public function firstDayOfWeek() {
    method firstDayOfMonth (line 345) | public function firstDayOfMonth() {
    method firstDayOfYear (line 354) | public function firstDayOfYear() {
    method lastDayOfWeek (line 363) | public function lastDayOfWeek() {
    method lastDayOfMonth (line 372) | public function lastDayOfMonth() {
    method lastDayOfYear (line 381) | public function lastDayOfYear() {
    method maxDayOfMonth (line 390) | public function maxDayOfMonth() {
    method dateAdd (line 413) | public function dateAdd($number = 0, $interval = "d") {
    method numberToCh (line 482) | public function  numberToCh($number) {
    method yearToCh (line 510) | public function  yearToCh( $yearStr ,$flag=false ) {
    method magicInfo (line 528) | public function magicInfo($type) {
    method __toString (line 566) | public function __toString() {

FILE: ThinkPHP/Library/Org/Util/Rbac.class.php
  class Rbac (line 75) | class Rbac {
    method authenticate (line 77) | static public function authenticate($map,$model='') {
    method saveAccessList (line 84) | static function saveAccessList($authId=null) {
    method getRecordAccessList (line 94) | static function getRecordAccessList($authId=null,$module='') {
    method checkAccess (line 103) | static function checkAccess() {
    method checkLogin (line 138) | static public function checkLogin() {
    method AccessDecision (line 158) | static public function AccessDecision($appName=MODULE_NAME) {
    method getAccessList (line 201) | static public function getAccessList($authId) {
    method getModuleAccessList (line 269) | static public function getModuleAccessList($authId,$module) {

FILE: ThinkPHP/Library/Org/Util/Stack.class.php
  class Stack (line 20) | class Stack extends ArrayList {
    method __construct (line 27) | public function __construct($values = array()) {
    method peek (line 36) | public function peek() {
    method push (line 46) | public function push($value) {

FILE: ThinkPHP/Library/Org/Util/String.class.php
  function uuid (line 19) | function uuid() {
  function keyGen (line 36) | function keyGen() {
  function isUtf8 (line 45) | function isUtf8($str) {
  function msubstr (line 82) | function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
  function randString (line 107) | function randString($len=6,$type='',$addChars='') {
  function buildCountRand (line 153) | function buildCountRand ($number,$length=4,$mode=1) {
  function buildFormatRand (line 182) | function buildFormatRand($format,$number=1) {
  function randNumber (line 215) | function randNumber ($min, $max) {
  function autoCharset (line 220) | function autoCharset($string, $from='gbk', $to='utf-8') {

FILE: ThinkPHP/Library/Think/App.class.php
  class App (line 15) | class App {
    method init (line 22) | static public function init() {
    method exec (line 62) | static public function exec() {
    method run (line 190) | static public function run() {
    method logo (line 208) | static public function logo(){

FILE: ThinkPHP/Library/Think/Auth.class.php
  class Auth (line 69) | class Auth{
    method __construct (line 81) | public function __construct() {
    method check (line 101) | public function check($name, $uid, $type=1, $mode='url', $relation='or...
    method getGroups (line 147) | public function getGroups($uid) {
    method getAuthList (line 165) | protected function getAuthList($uid,$type) {
    method getUserInfo (line 223) | protected function getUserInfo($uid) {

FILE: ThinkPHP/Library/Think/Behavior.class.php
  class Behavior (line 15) | abstract class Behavior {
    method run (line 22) | abstract public function run(&$params);

FILE: ThinkPHP/Library/Think/Build.class.php
  class Build (line 15) | class Build {
    method checkDir (line 33) | static public function checkDir($module){
    method buildAppDir (line 44) | static public function buildAppDir($module) {
    method buildRuntime (line 103) | static public function buildRuntime() {
    method buildController (line 118) | static public function buildController($module,$controller='Index') {
    method buildModel (line 134) | static public function buildModel($module,$model) {
    method buildDirSecure (line 150) | static public function buildDirSecure($dirs=array()) {

FILE: ThinkPHP/Library/Think/Cache.class.php
  class Cache (line 15) | class Cache {
    method connect (line 38) | public function connect($type='',$options=array()) {
    method getInstance (line 54) | static function getInstance($type='',$options=array()) {
    method __get (line 64) | public function __get($name) {
    method __set (line 68) | public function __set($name,$value) {
    method __unset (line 72) | public function __unset($name) {
    method setOptions (line 75) | public function setOptions($name,$value) {
    method getOptions (line 79) | public function getOptions($name) {
    method queue (line 90) | protected function queue($key) {
    method __call (line 118) | public function __call($method,$args){

FILE: ThinkPHP/Library/Think/Cache/Driver/Apachenote.class.php
  class Apachenote (line 17) | class Apachenote extends Cache {
    method __construct (line 24) | public function __construct($options=array()) {
    method get (line 48) | public function get($name) {
    method set (line 69) | public function set($name, $value) {
    method rm (line 95) | public function rm($name) {
    method close (line 109) | private function close() {
    method open (line 118) | private function open() {

FILE: ThinkPHP/Library/Think/Cache/Driver/Apc.class.php
  class Apc (line 17) | class Apc extends Cache {
    method __construct (line 24) | public function __construct($options=array()) {
    method get (line 39) | public function get($name) {
    method set (line 52) | public function set($name, $value, $expire = null) {
    method rm (line 73) | public function rm($name) {
    method clear (line 82) | public function clear() {

FILE: ThinkPHP/Library/Think/Cache/Driver/Db.class.php
  class Db (line 24) | class Db extends Cache {
    method __construct (line 31) | public function __construct($options=array()) {
    method get (line 50) | public function get($name) {
    method set (line 82) | public function set($name, $value,$expire=null) {
    method rm (line 124) | public function rm($name) {
    method clear (line 134) | public function clear() {

FILE: ThinkPHP/Library/Think/Cache/Driver/Eaccelerator.class.php
  class Eaccelerator (line 17) | class Eaccelerator extends Cache {
    method __construct (line 24) | public function __construct($options=array()) {
    method get (line 36) | public function get($name) {
    method set (line 49) | public function set($name, $value, $expire = null) {
    method rm (line 73) | public function rm($name) {

FILE: ThinkPHP/Library/Think/Cache/Driver/File.class.php
  class File (line 17) | class File extends Cache {
    method __construct (line 23) | public function __construct($options=array()) {
    method init (line 40) | private function init() {
    method filename (line 53) | private function filename($name) {

FILE: ThinkPHP/Library/Think/Cache/Driver/Memcache.class.php
  class Memcache (line 17) | class Memcache extends Cache {
    method __construct (line 24) | function __construct($options=array()) {
    method get (line 53) | public function get($name) {
    method set (line 66) | public function set($name, $value, $expire = null) {
    method rm (line 88) | public function rm($name, $ttl = false) {
    method clear (line 100) | public function clear() {

FILE: ThinkPHP/Library/Think/Cache/Driver/Memcached.class.php
  class Memcached (line 20) | class Memcached extends Cache {
    method __construct (line 26) | public function __construct($options = array()) {
    method get (line 52) | public function get($name) {
    method set (line 65) | public function set($name, $value, $expire = null) {
    method rm (line 87) | public function rm($name, $ttl = false) {
    method clear (line 99) | public function clear() {

FILE: ThinkPHP/Library/Think/Cache/Driver/Memcachesae.class.php
  class Memcachesae (line 22) | class Memcachesae extends Cache {
    method __construct (line 29) | function __construct($options=array()) {
    method isConnected (line 51) | private function isConnected() {
    method get (line 61) | public function get($name) {
    method set (line 74) | public function set($name, $value, $expire = null) {
    method rm (line 96) | public function rm($name, $ttl = false) {
    method clear (line 108) | public function clear() {
    method queue (line 119) | protected function queue($key) {

FILE: ThinkPHP/Library/Think/Cache/Driver/Redis.class.php
  class Redis (line 19) | class Redis extends Cache {
    method __construct (line 25) | public function __construct($options=array()) {
    method get (line 53) | public function get($name) {
    method set (line 68) | public function set($name, $value, $expire = null) {
    method rm (line 94) | public function rm($name) {
    method clear (line 103) | public function clear() {

FILE: ThinkPHP/Library/Think/Cache/Driver/Shmop.class.php
  class Shmop (line 17) | class Shmop extends Cache {
    method __construct (line 24) | public function __construct($options=array()) {
    method get (line 48) | public function get($name = false) {
    method set (line 81) | public function set($name, $value) {
    method rm (line 109) | public function rm($name) {
    method _ftok (line 125) | private function _ftok($project) {
    method _write (line 144) | private function _write(&$val, &$lh) {
    method _lock (line 162) | private function _lock() {
    method _unlock (line 179) | private function _unlock(&$fp) {

FILE: ThinkPHP/Library/Think/Cache/Driver/Sqlite.class.php
  class Sqlite (line 17) | class Sqlite extends Cache {
    method __construct (line 24) | public function __construct($options=array()) {
    method get (line 49) | public function get($name) {
    method set (line 73) | public function set($name, $value,$expire=null) {
    method rm (line 102) | public function rm($name) {
    method clear (line 114) | public function clear() {

FILE: ThinkPHP/Library/Think/Cache/Driver/Wincache.class.php
  class Wincache (line 17) | class Wincache extends Cache {
    method __construct (line 24) | public function __construct($options=array()) {
    method get (line 39) | public function get($name) {
    method set (line 53) | public function set($name, $value,$expire=null) {
    method rm (line 75) | public function rm($name) {
    method clear (line 84) | public function clear() {

FILE: ThinkPHP/Library/Think/Cache/Driver/Xcache.class.php
  class Xcache (line 17) | class Xcache extends Cache {
    method __construct (line 24) | public function __construct($options=array()) {
    method get (line 39) | public function get($name) {
    method set (line 56) | public function set($name, $value,$expire=null) {
    method rm (line 78) | public function rm($name) {
    method clear (line 87) | public function clear() {

FILE: ThinkPHP/Library/Think/Controller.class.php
  class Controller (line 15) | abstract class Controller {
    method __construct (line 35) | public function __construct() {
    method display (line 55) | protected function display($templateFile='',$charset='',$contentType='...
    method show (line 68) | protected function show($content,$charset='',$contentType='',$prefix='...
    method fetch (line 82) | protected function fetch($templateFile='',$content='',$prefix='') {
    method buildHtml (line 95) | protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='...
    method theme (line 109) | protected function theme($theme){
    method assign (line 121) | protected function assign($name,$value='') {
    method __set (line 126) | public function __set($name,$value) {
    method get (line 136) | public function get($name='') {
    method __get (line 140) | public function __get($name) {
    method __isset (line 150) | public function __isset($name) {
    method __call (line 161) | public function __call($method,$args) {
    method error (line 186) | protected function error($message='',$jumpUrl='',$ajax=false) {
    method success (line 198) | protected function success($message='',$jumpUrl='',$ajax=false) {
    method ajaxReturn (line 210) | protected function ajaxReturn($data,$type='',$json_option=0) {
    method redirect (line 245) | protected function redirect($url,$params=array(),$delay=0,$msg='') {
    method dispatchJump (line 261) | private function dispatchJump($message,$status=1,$jumpUrl='',$ajax=fal...
    method __destruct (line 301) | public function __destruct() {

FILE: ThinkPHP/Library/Think/Controller/HproseController.class.php
  class HproseController (line 15) | class HproseController {
    method __construct (line 27) | public function __construct() {
    method __call (line 60) | public function __call($method,$args){}

FILE: ThinkPHP/Library/Think/Controller/JsonRpcController.class.php
  class JsonRpcController (line 15) | class JsonRpcController {
    method __construct (line 21) | public function __construct() {
    method __call (line 38) | public function __call($method,$args){}

FILE: ThinkPHP/Library/Think/Controller/RestController.class.php
  class RestController (line 16) | class RestController extends Controller {
    method __construct (line 40) | public function __construct() {
    method __call (line 69) | public function __call($method,$args) {
    method getAcceptType (line 96) | protected function getAcceptType(){
    method sendHttpStatus (line 126) | protected function sendHttpStatus($code) {
    method encodeData (line 190) | protected function encodeData($data,$type='') {
    method setContentType (line 213) | public function setContentType($type, $charset=''){
    method response (line 229) | protected function response($data,$type='',$code=200) {

FILE: ThinkPHP/Library/Think/Controller/RpcController.class.php
  class RpcController (line 15) | class RpcController {
    method __construct (line 24) | public function __construct() {
    method __call (line 55) | public function __call($method,$args){}

FILE: ThinkPHP/Library/Think/Controller/YarController.class.php
  class YarController (line 15) | class YarController {
    method __construct (line 21) | public function __construct() {
    method __call (line 41) | public function __call($method,$args){}

FILE: ThinkPHP/Library/Think/Crypt.class.php
  class Crypt (line 15) | class Crypt {
    method init (line 19) | public static function init($type=''){
    method encrypt (line 32) | public static function encrypt($data,$key,$expire=0){
    method decrypt (line 46) | public static function decrypt($data,$key){

FILE: ThinkPHP/Library/Think/Crypt/Driver/Base64.class.php
  class Base64 (line 15) | class Base64 {
    method encrypt (line 24) | public static function encrypt($data,$key,$expire=0) {
    method decrypt (line 49) | public static function decrypt($data,$key) {

FILE: ThinkPHP/Library/Think/Crypt/Driver/Crypt.class.php
  class Crypt (line 19) | class Crypt {
    method encrypt (line 28) | public static function encrypt($str,$key,$expire=0){
    method decrypt (line 51) | public static function decrypt($str,$key) {
    method ed (line 70) | static private function ed($str,$key) {

FILE: ThinkPHP/Library/Think/Crypt/Driver/Des.class.php
  method encrypt (line 28) | public static function encrypt($str, $key,$expire=0) {
  method decrypt (line 43) | public static function decrypt($str, $key) {

FILE: ThinkPHP/Library/Think/Crypt/Driver/Think.class.php
  class Think (line 15) | class Think {
    method encrypt (line 24) | public static function encrypt($data,$key,$expire=0) {
    method decrypt (line 51) | public static function decrypt($data,$key) {

FILE: ThinkPHP/Library/Think/Crypt/Driver/Xxtea.class.php
  class Xxtea (line 15) | class Xxtea {
    method encrypt (line 24) | public static function encrypt($str, $key,$expire=0) {
    method decrypt (line 57) | public static function decrypt($str, $key) {
    method long2str (line 88) | private static function long2str($v, $w) {
    method str2long (line 101) | private static function str2long($s, $w) {
    method int32 (line 110) | private static function int32($n) {

FILE: ThinkPHP/Library/Think/Db.class.php
  class Db (line 17) | class Db {
    method getInstance (line 29) | static public function getInstance($config=array()) {
    method parseConfig (line 56) | static private function parseConfig($config){
    method parseDsn (line 109) | static private function parseDsn($dsnStr) {
    method __callStatic (line 134) | static public function __callStatic($method, $params){

FILE: ThinkPHP/Library/Think/Db/Driver.class.php
  class Driver (line 18) | abstract class Driver {
    method __construct (line 79) | public function __construct($config=''){
    method connect (line 92) | public function connect($config='',$linkNum=0,$autoConnection=false) {
    method parseDsn (line 122) | protected function parseDsn($config){}
    method free (line 128) | public function free() {
    method query (line 139) | public function query($str,$fetchSql=false) {
    method execute (line 192) | public function execute($str,$fetchSql=false) {
    method startTrans (line 247) | public function startTrans() {
    method commit (line 263) | public function commit() {
    method rollback (line 280) | public function rollback() {
    method getResult (line 297) | private function getResult() {
    method getQueryTimes (line 310) | public function getQueryTimes($execute=false){
    method getExecuteTimes (line 319) | public function getExecuteTimes(){
    method close (line 327) | public function close() {
    method error (line 337) | public function error() {
    method parseLock (line 361) | protected function parseLock($lock=false) {
    method parseSet (line 371) | protected function parseSet($data) {
    method bindParam (line 397) | protected function bindParam($name,$value){
    method parseKey (line 407) | protected function parseKey(&$key) {
    method parseValue (line 417) | protected function parseValue($value) {
    method parseField (line 438) | protected function parseField($fields) {
    method parseTable (line 466) | protected function parseTable($tables) {
    method parseWhere (line 489) | protected function parseWhere($where) {
    method parseWhereItem (line 547) | protected function parseWhereItem($key,$val) {
    method parseThinkWhere (line 624) | protected function parseThinkWhere($key,$val) {
    method parseLimit (line 659) | protected function parseLimit($limit) {
    method parseJoin (line 669) | protected function parseJoin($join) {
    method parseOrder (line 683) | protected function parseOrder($order) {
    method parseGroup (line 704) | protected function parseGroup($group) {
    method parseHaving (line 714) | protected function parseHaving($having) {
    method parseComment (line 724) | protected function parseComment($comment) {
    method parseDistinct (line 734) | protected function parseDistinct($distinct) {
    method parseUnion (line 744) | protected function parseUnion($union) {
    method parseBind (line 764) | protected function parseBind($bind){
    method parseForce (line 774) | protected function parseForce($index) {
    method parseDuplicate (line 786) | protected function parseDuplicate($duplicate){
    method insert (line 798) | public function insert($data,$options=array(),$replace=false) {
    method insertAll (line 836) | public function insertAll($dataSet,$options=array(),$replace=false) {
    method selectInsert (line 874) | public function selectInsert($fields,$table,$options=array()) {
    method update (line 891) | public function update($data,$options) {
    method delete (line 915) | public function delete($options=array()) {
    method select (line 942) | public function select($options=array()) {
    method buildSelectSql (line 956) | public function buildSelectSql($options=array()) {
    method parseSql (line 975) | public function parseSql($sql,$options=array()){
    method getLastSql (line 1002) | public function getLastSql($model='') {
    method getLastInsID (line 1011) | public function getLastInsID() {
    method getError (line 1020) | public function getError() {
    method escapeString (line 1030) | public function escapeString($str) {
    method setModel (line 1040) | public function setModel($model){
    method debug (line 1049) | protected function debug($start) {
    method initConnect (line 1069) | protected function initConnect($master=true) {
    method multiConnect (line 1084) | protected function multiConnect($master=false) {
    method __destruct (line 1141) | public function __destruct() {

FILE: ThinkPHP/Library/Think/Db/Driver/Firebird.class.php
  class Firebird (line 17) | class Firebird extends Driver{
    method parseDsn (line 26) | protected function parseDsn($config){
    method execute (line 38) | public function execute($str,$fetchSql=false) {
    method getFields (line 82) | public function getFields($tableName) {
    method getTables (line 113) | public function getTables($dbName='') {
    method escapeString (line 129) | public function escapeString($str) {
    method parseLimit (line 139) | public function parseLimit($limit) {

FILE: ThinkPHP/Library/Think/Db/Driver/Mongo.class.php
  class Mongo (line 18) | class Mongo extends Driver {
    method __construct (line 32) | public function __construct($config=''){
    method connect (line 48) | public function connect($config='',$linkNum=0) {
    method switchCollection (line 69) | public function switchCollection($collection,$db='',$master=true){
    method free (line 99) | public function free() {
    method command (line 109) | public function command($command=array(), $options=array()) {
    method execute (line 146) | public function execute($code,$args=array()) {
    method close (line 164) | public function close() {
    method error (line 179) | public function error() {
    method insert (line 193) | public function insert($data,$options=array(),$replace=false) {
    method insertAll (line 229) | public function insertAll($dataList,$options=array()) {
    method getMongoNextId (line 252) | public function getMongoNextId($pk) {
    method update (line 274) | public function update($data,$options) {
    method delete (line 309) | public function delete($options=array()) {
    method clear (line 336) | public function clear($options=array()){
    method select (line 362) | public function select($options=array()) {
    method find (line 427) | public function find($options=array()){
    method count (line 439) | public function count($options=array()){
    method group (line 462) | public function group($keys,$initial,$reduce,$options=array()){
    method getFields (line 507) | public function getFields($collection=''){
    method getTables (line 541) | public function getTables(){
    method getDB (line 562) | public function getDB(){
    method getCollection (line 571) | public function getCollection(){
    method parseSet (line 581) | protected function parseSet($data) {
    method parseOrder (line 615) | protected function parseOrder($order) {
    method parseLimit (line 638) | protected function parseLimit($limit) {
    method parseField (line 653) | public function parseField($fields){
    method parseWhere (line 681) | public function parseWhere($where){
    method parseThinkWhere (line 737) | protected function parseThinkWhere($key,$val) {
    method parseWhereItem (line 777) | protected function parseWhereItem($key,$val) {

FILE: ThinkPHP/Library/Think/Db/Driver/Mysql.class.php
  class Mysql (line 18) | class Mysql extends Driver{
    method parseDsn (line 26) | protected function parseDsn($config){
    method getFields (line 46) | public function getFields($tableName) {
    method getTables (line 80) | public function getTables($dbName='') {
    method parseKey (line 96) | protected function parseKey(&$key) {
    method insertAll (line 112) | public function insertAll($dataSet,$options=array(),$replace=false) {
    method parseDuplicate (line 150) | protected function parseDuplicate($duplicate){
    method procedure (line 195) | public function procedure($str,$fetchSql=false) {

FILE: ThinkPHP/Library/Think/Db/Driver/Oracle.class.php
  class Oracle (line 18) | class Oracle extends Driver{
    method parseDsn (line 29) | protected function parseDsn($config){
    method execute (line 44) | public function execute($str,$fetchSql=false) {
    method getFields (line 97) | public function getFields($tableName) {
    method getTables (line 123) | public function getTables($dbName='') {
    method escapeString (line 138) | public function escapeString($str) {
    method parseLimit (line 147) | public function parseLimit($limit) {
    method parseLock (line 164) | protected function parseLock($lock=false) {

FILE: ThinkPHP/Library/Think/Db/Driver/Pgsql.class.php
  class Pgsql (line 18) | class Pgsql extends Driver{
    method parseDsn (line 26) | protected function parseDsn($config){
    method getFields (line 39) | public function getFields($tableName) {
    method getTables (line 63) | public function getTables($dbName='') {
    method parseLimit (line 78) | public function parseLimit($limit) {

FILE: ThinkPHP/Library/Think/Db/Driver/Sqlite.class.php
  class Sqlite (line 18) | class Sqlite extends Driver {
    method parseDsn (line 26) | protected function parseDsn($config){
    method getFields (line 36) | public function getFields($tableName) {
    method getTables (line 60) | public function getTables($dbName='') {
    method escapeString (line 77) | public function escapeString($str) {
    method parseLimit (line 86) | public function parseLimit($limit) {

FILE: ThinkPHP/Library/Think/Db/Driver/Sqlsrv.class.php
  class Sqlsrv (line 19) | class Sqlsrv extends Driver{
    method parseDsn (line 35) | protected function parseDsn($config){
    method getFields (line 48) | public function getFields($tableName) {
    method getTables (line 78) | public function getTables($dbName='') {
    method parseOrder (line 96) | protected function parseOrder($order) {
    method parseKey (line 106) | protected function parseKey(&$key) {
    method parseLimit (line 120) | public function parseLimit($limit) {
    method update (line 137) | public function update($data,$options) {
    method delete (line 155) | public function delete($options=array()) {

FILE: ThinkPHP/Library/Think/Db/Lite.class.php
  class Lite (line 18) | class Lite {
    method __construct (line 77) | public function __construct($config=''){
    method connect (line 90) | public function connect($config='',$linkNum=0) {
    method parseDsn (line 114) | protected function parseDsn($config){}
    method free (line 120) | public function free() {
    method query (line 131) | public function query($str,$bind=array()) {
    method execute (line 173) | public function execute($str,$bind=array()) {
    method startTrans (line 217) | public function startTrans() {
    method commit (line 233) | public function commit() {
    method rollback (line 250) | public function rollback() {
    method getResult (line 267) | private function getResult() {
    method getQueryTimes (line 280) | public function getQueryTimes($execute=false){
    method getExecuteTimes (line 289) | public function getExecuteTimes(){
    method close (line 297) | public function close() {
    method error (line 307) | public function error() {
    method getLastSql (line 332) | public function getLastSql($model='') {
    method getLastInsID (line 341) | public function getLastInsID() {
    method getError (line 350) | public function getError() {
    method escapeString (line 360) | public function escapeString($str) {
    method setModel (line 370) | public function setModel($model){
    method debug (line 379) | protected function debug($start) {
    method initConnect (line 399) | protected function initConnect($master=true) {
    method multiConnect (line 414) | protected function multiConnect($master=false) {
    method __destruct (line 458) | public function __destruct() {

FILE: ThinkPHP/Library/Think/Dispatcher.class.php
  class Dispatcher (line 16) | class Dispatcher {
    method dispatch (line 23) | static public function dispatch() {
    method getSpace (line 256) | static private function getSpace($var,$urlCase) {
    method getController (line 265) | static private function getController($var,$urlCase) {
    method getAction (line 290) | static private function getAction($var,$urlCase) {
    method getModule (line 322) | static private function getModule($var) {

FILE: ThinkPHP/Library/Think/Exception.class.php
  class Exception (line 15) | class Exception extends \Exception {

FILE: ThinkPHP/Library/Think/Hook.class.php
  class Hook (line 15) | class Hook {
    method add (line 25) | static public function add($tag,$name) {
    method import (line 42) | static public function import($data,$recursive=true) {
    method get (line 66) | static public function get($tag='') {
    method listen (line 81) | static public function listen($tag, &$params=NULL) {
    method exec (line 113) | static public function exec($name, $tag,&$params=NULL) {

FILE: ThinkPHP/Library/Think/Image.class.php
  class Image (line 21) | class Image{
    method __construct (line 55) | public function __construct($type = self::IMAGE_GD, $imgname = null){
    method open (line 78) | public function open($imgname){
    method save (line 91) | public function save($imgname, $type = null, $quality=80,$interlace = ...
    method width (line 100) | public function width(){
    method height (line 108) | public function height(){
    method type (line 116) | public function type(){
    method mime (line 124) | public function mime(){
    method size (line 132) | public function size(){
    method crop (line 146) | public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = ...
    method thumb (line 158) | public function thumb($width, $height, $type = self::IMAGE_THUMB_SCALE){
    method water (line 170) | public function water($source, $locate = self::IMAGE_WATER_SOUTHEAST,$...
    method text (line 186) | public function text($text, $font, $size, $color = '#00000000',

FILE: ThinkPHP/Library/Think/Image/Driver/GIF.class.php
  class GIF (line 14) | class GIF{
    method __construct (line 32) | public function __construct($src = null, $mod = 'url') {
    method image (line 54) | public function image($stream = null){
    method nextImage (line 67) | public function nextImage(){
    method save (line 75) | public function save($gifname){
  method __construct (line 131) | public function __construct($GIF_src, $GIF_dly, $GIF_lop, $GIF_dis,$GIF_...
  method GIFAddHeader (line 182) | private function GIFAddHeader ( ) {
  function GIFAddFooter (line 274) | function GIFAddFooter ( ) {
  function GIFWord (line 303) | function GIFWord ( $int ) {
  function GetAnimation (line 313) | function GetAnimation ( ) {
  class GIFDecoder (line 336) | Class GIFDecoder {
    method __construct (line 357) | public function __construct ( $GIF_pointer ) {
    method GIFReadExtensions (line 423) | private function GIFReadExtensions ( ) {
    method GIFReadDescriptor (line 449) | private function GIFReadDescriptor ( ) {
    method GIFGetByte (line 524) | private function GIFGetByte ( $len ) {
    method GIFPutByte (line 541) | private function GIFPutByte ( $bytes ) {
    method GIFGetFrames (line 555) | public function GIFGetFrames ( ) {
    method GIFGetDelays (line 564) | public function GIFGetDelays ( ) {

FILE: ThinkPHP/Library/Think/Image/Driver/Gd.class.php
  class Gd (line 15) | class Gd{
    method __construct (line 32) | public function __construct($imgname = null) {
    method open (line 40) | public function open($imgname){
    method save (line 81) | public function save($imgname, $type = null, $quality=80,$interlace = ...
    method width (line 107) | public function width(){
    method height (line 116) | public function height(){
    method type (line 125) | public function type(){
    method mime (line 134) | public function mime(){
    method size (line 143) | public function size(){
    method crop (line 157) | public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = ...
    method thumb (line 189) | public function thumb($width, $height, $type = Image::IMAGE_THUMB_SCALE){
    method water (line 298) | public function water($source, $locate = Image::IMAGE_WATER_SOUTHEAST,...
    method text (line 409) | public function text($text, $font, $size, $color = '#00000000',
    method gifNext (line 518) | private function gifNext(){
    method __destruct (line 539) | public function __destruct() {

FILE: ThinkPHP/Library/Think/Image/Driver/Imagick.class.php
  class Imagick (line 15) | class Imagick{
    method __construct (line 32) | public function __construct($imgname = null) {
    method open (line 40) | public function open($imgname){
    method save (line 66) | public function save($imgname, $type = null, $quality=80,$interlace = ...
    method width (line 101) | public function width(){
    method height (line 110) | public function height(){
    method type (line 119) | public function type(){
    method mime (line 128) | public function mime(){
    method size (line 137) | public function size(){
    method crop (line 151) | public function crop($w, $h, $x = 0, $y = 0, $width = null, $height = ...
    method _crop (line 177) | private function _crop($w, $h, $x, $y, $width, $height, $img = null){
    method thumb (line 203) | public function thumb($width, $height, $type = Image::IMAGE_THUMB_SCALE){
    method _fill (line 332) | private function _fill($newimg, $posx, $posy, $neww, $newh, $img = null){
    method water (line 351) | public function water($source, $locate = Image::IMAGE_WATER_SOUTHEAST,...
    method text (line 461) | public function text($text, $font, $size, $color = '#00000000',
    method __destruct (line 590) | public function __destruct() {

FILE: ThinkPHP/Library/Think/Log.class.php
  class Log (line 15) | class Log {
    method init (line 35) | static public function init($config=array()){
    method record (line 51) | static function record($message,$level=self::ERR,$record=false) {
    method save (line 65) | static function save($type='',$destination='') {
    method write (line 92) | static function write($message,$level=self::ERR,$type='',$destination=...

FILE: ThinkPHP/Library/Think/Log/Driver/File.class.php
  class File (line 14) | class File {
    method __construct (line 23) | public function __construct($config=array()){
    method write (line 34) | public function write($log,$destination='') {

FILE: ThinkPHP/Library/Think/Log/Driver/Sae.class.php
  class Sae (line 14) | class Sae {
    method __construct (line 21) | public function __construct($config=array()){
    method write (line 32) | public function write($log,$destination='') {

FILE: ThinkPHP/Library/Think/Model.class.php
  class Model (line 16) | class Model {
    method __construct (line 72) | public function __construct($name='',$tablePrefix='',$connection='') {
    method _checkTableInfo (line 105) | protected function _checkTableInfo() {
    method flush (line 131) | public function flush() {
    method __set (line 177) | public function __set($name,$value) {
    method __get (line 188) | public function __get($name) {
    method __isset (line 198) | public function __isset($name) {
    method __unset (line 208) | public function __unset($name) {
    method __call (line 219) | public function __call($method,$args) {
    method _initialize (line 246) | protected function _initialize() {}
    method _facade (line 254) | protected function _facade($data) {
    method _before_write (line 290) | protected function _before_write(&$data) {}
    method add (line 300) | public function add($data='',$options=array(),$replace=false) {
    method _before_insert (line 341) | protected function _before_insert(&$data,$options) {}
    method _after_insert (line 343) | protected function _after_insert($data,$options) {}
    method addAll (line 345) | public function addAll($dataList,$options=array(),$replace=false){
    method selectAdd (line 375) | public function selectAdd($fields='',$table='',$options=array()) {
    method save (line 396) | public function save($data='',$options=array()) {
    method _before_update (line 459) | protected function _before_update(&$data,$options) {}
    method _after_update (line 461) | protected function _after_update($data,$options) {}
    method delete (line 469) | public function delete($options=array()) {
    method _before_delete (line 528) | protected function _before_delete($options) {}
    method _after_delete (line 530) | protected function _after_delete($data,$options) {}
    method select (line 538) | public function select($options=array()) {
    method _after_select (line 610) | protected function _after_select(&$resultSet,$options) {}
    method buildSql (line 617) | public function buildSql() {
    method _parseOptions (line 627) | protected function _parseOptions($options=array()) {
    method _options_filter (line 671) | protected function _options_filter(&$options) {}
    method _parseType (line 680) | protected function _parseType(&$data,$key) {
    method _read_data (line 701) | protected function _read_data($data) {
    method find (line 720) | public function find($options=array()) {
    method _after_find (line 783) | protected function _after_find(&$result,$options) {}
    method returnResult (line 785) | protected function returnResult($data,$type=''){
    method parseFieldsMap (line 807) | public function parseFieldsMap($data,$type=1) {
    method setField (line 835) | public function setField($field,$value='') {
    method setInc (line 852) | public function setInc($field,$step=1,$lazyTime=0) {
    method setDec (line 874) | public function setDec($field,$step=1,$lazyTime=0) {
    method lazyWrite (line 897) | protected function lazyWrite($guid,$step,$lazyTime) {
    method getField (line 924) | public function getField($field,$sepa=null) {
    method create (line 1001) | public function create($data='',$type='') {
    method autoCheckToken (line 1073) | public function autoCheckToken($data) {
    method regex (line 1102) | public function regex($value,$rule) {
    method autoOperation (line 1127) | private function autoOperation(&$data,$type) {
    method autoValidation (line 1184) | protected function autoValidation($data,$type) {
    method _validationField (line 1242) | protected function _validationField($data,$val) {
    method _validationFieldItem (line 1263) | protected function _validationFieldItem($data,$val) {
    method check (line 1315) | public function check($value,$rule,$type='regex'){
    method procedure (line 1365) | public function procedure($sql, $parse = false) {
    method query (line 1376) | public function query($sql,$parse=false) {
    method execute (line 1392) | public function execute($sql,$parse=false) {
    method parseSql (line 1408) | protected function parseSql($sql,$parse) {
    method db (line 1433) | public function db($linkNum='',$config='',$force=false) {
    method _after_db (line 1458) | protected function _after_db() {}
    method getModelName (line 1465) | public function getModelName() {
    method getTableName (line 1482) | public function getTableName() {
    method startTrans (line 1500) | public function startTrans() {
    method commit (line 1511) | public function commit() {
    method rollback (line 1520) | public function rollback() {
    method getError (line 1529) | public function getError(){
    method getDbError (line 1538) | public function getDbError() {
    method getLastInsID (line 1547) | public function getLastInsID() {
    method getLastSql (line 1556) | public function getLastSql() {
    method _sql (line 1560) | public function _sql(){
    method getPk (line 1569) | public function getPk() {
    method getDbFields (line 1578) | public function getDbFields(){
    method data (line 1606) | public function data($data=''){
    method table (line 1627) | public function table($table) {
    method using (line 1645) | public function using($using){
    method join (line 1664) | public function join($join,$type='INNER') {
    method union (line 1687) | public function union($union,$all=false) {
    method cache (line 1722) | public function cache($key=true,$expire=null,$type=''){
    method field (line 1740) | public function field($field,$except=false){
    method scope (line 1762) | public function scope($scope='',$args=NULL){
    method where (line 1797) | public function where($where,$parse=null){
    method limit (line 1829) | public function limit($offset,$length=null){
    method page (line 1844) | public function page($page,$listRows=null){
    method comment (line 1858) | public function comment($comment){
    method fetchSql (line 1869) | public function fetchSql($fetch=true){
    method bind (line 1881) | public function bind($key,$value=false) {
    method setProperty (line 1904) | public function setProperty($name,$value) {

FILE: ThinkPHP/Library/Think/Model/AdvModel.class.php
  class AdvModel (line 16) | class AdvModel extends Model {
    method __construct (line 26) | public function __construct($name='',$tablePrefix='',$connection='') {
    method __call (line 43) | public function __call($method,$args) {
    method _facade (line 60) | protected function _facade($data) {
    method _after_find (line 67) | protected function _after_find(&$result,$options='') {
    method _after_select (line 79) | protected function _after_select(&$resultSet,$options='') {
    method _before_insert (line 89) | protected function _before_insert(&$data,$options='') {
    method _after_insert (line 98) | protected function _after_insert($data,$options) {
    method _before_update (line 104) | protected function _before_update(&$data,$options='') {
    method _after_update (line 121) | protected function _after_update($data,$options) {
    method _after_delete (line 126) | protected function _after_delete($data,$options) {
    method recordLockVersion (line 137) | protected function recordLockVersion($data) {
    method cacheLockVersion (line 153) | protected function cacheLockVersion($data) {
    method checkLockVersion (line 169) | protected function checkLockVersion($id,&$data) {
    method topN (line 202) | public function topN($count,$options=array()) {
    method getN (line 215) | public function getN($position=0,$options=array()) {
    method first (line 232) | public function first($options=array()) {
    method last (line 242) | public function last($options=array()) {
    method returnResult (line 253) | public function returnResult($data,$type='') {
    method getFilterFields (line 273) | protected function getFilterFields(&$result) {
    method getFilterListFields (line 293) | protected function getFilterListFields(&$resultSet) {
    method setFilterFields (line 307) | protected function setFilterFields($data) {
    method returnResultSet (line 334) | protected function returnResultSet(&$resultSet,$type='') {
    method checkBlobFields (line 340) | protected function checkBlobFields(&$data) {
    method getListBlobFields (line 363) | protected function getListBlobFields(&$resultSet,$field='') {
    method getBlobFields (line 380) | protected function getBlobFields(&$data,$field='') {
    method saveBlobFields (line 403) | protected function saveBlobFields(&$data) {
    method delBlobFields (line 420) | protected function delBlobFields(&$data,$field='') {
    method serializeField (line 442) | protected function serializeField(&$data) {
    method checkSerializeField (line 465) | protected function checkSerializeField(&$result) {
    method checkListSerializeField (line 481) | protected function checkListSerializeField(&$resultSet) {
    method checkReadonlyField (line 505) | protected function checkReadonlyField(&$data) {
    method patchQuery (line 522) | public function patchQuery($sql=array()) {
    method getPartitionTableName (line 549) | public function getPartitionTableName($data=array()) {

FILE: ThinkPHP/Library/Think/Model/MergeModel.class.php
  class MergeModel (line 16) | class MergeModel extends Model {
    method __construct (line 32) | public function __construct($name='',$tablePrefix='',$connection=''){
    method getTableName (line 66) | public function getTableName() {
    method _checkTableInfo (line 83) | protected function _checkTableInfo() {}
    method add (line 93) | public function add($data='',$options=array(),$replace=false){
    method _facade (line 137) | protected function _facade($data) {
    method save (line 177) | public function save($data='',$options=array()){
    method delete (line 227) | public function delete($options=array()){
    method _options_filter (line 279) | protected function _options_filter(&$options) {
    method checkCondition (line 303) | protected function checkCondition($where) {
    method checkOrder (line 324) | protected function checkOrder($order='') {
    method checkGroup (line 349) | protected function checkGroup($group='') {
    method checkFields (line 372) | protected function checkFields($fields='') {
    method getDbFields (line 399) | public function getDbFields(){

FILE: ThinkPHP/Library/Think/Model/MongoModel.class.php
  class MongoModel (line 17) | class MongoModel extends Model{
    method __call (line 41) | public function __call($method,$args) {
    method flush (line 67) | public function flush() {
    method _before_write (line 90) | protected function _before_write(&$data) {
    method count (line 103) | public function count(){
    method distinct (line 114) | public function distinct($field, $where=array() ){
    method getMongoNextId (line 135) | public function getMongoNextId($pk=''){
    method add (line 150) | public function add($data='',$options=array(),$replace=false) {
    method _before_insert (line 181) | protected function _before_insert(&$data,$options) {
    method clear (line 191) | public function clear(){
    method _after_select (line 196) | protected function _after_select(&$resultSet,$options) {
    method checkMongoId (line 206) | protected function checkMongoId(&$result){
    method _options_filter (line 214) | protected function _options_filter(&$options) {
    method find (line 227) | public function find($options=array()) {
    method setInc (line 257) | public function setInc($field,$step=1) {
    method setDec (line 268) | public function setDec($field,$step=1) {
    method getField (line 279) | public function getField($field,$sepa=null) {
    method command (line 331) | public function command($command, $options=array()) {
    method mongoCode (line 343) | public function mongoCode($code,$args=array()) {
    method _after_db (line 348) | protected function _after_db() {
    method getTableName (line 358) | public function getTableName() {
    method group (line 376) | public function group($key, $init, $reduce, $option=array()) {
    method getLastError (line 391) | public function getLastError(){
    method status (line 400) | public function status(){
    method getDB (line 410) | public function getDB(){
    method getCollection (line 419) | public function getCollection(){

FILE: ThinkPHP/Library/Think/Model/RelationModel.class.php
  class RelationModel (line 16) | class RelationModel extends Model {
    method __call (line 33) | public function __call($method,$args) {
    method getRelationTableName (line 50) | public function getRelationTableName($relation) {
    method _after_find (line 58) | protected function _after_find(&$result,$options) {
    method _after_select (line 65) | protected function _after_select(&$result,$options) {
    method _after_insert (line 72) | protected function _after_insert($data,$options) {
    method _after_update (line 79) | protected function _after_update($data,$options) {
    method _after_delete (line 86) | protected function _after_delete($data,$options) {
    method _facade (line 98) | protected function _facade($data) {
    method getRelations (line 110) | protected function getRelations(&$resultSet,$name='') {
    method getRelation (line 127) | protected function getRelation(&$result,$name='',$return=false) {
    method opRelation (line 247) | protected function opRelation($opType,$data='',$name='') {
    method relation (line 396) | public function relation($name) {
    method relationGet (line 407) | public function relationGet($name) {

FILE: ThinkPHP/Library/Think/Model/ViewModel.class.php
  class ViewModel (line 16) | class ViewModel extends Model {
    method _checkTableInfo (line 25) | protected function _checkTableInfo() {}
    method getTableName (line 32) | public function getTableName() {
    method _options_filter (line 67) | protected function _options_filter(&$options) {
    method _checkFields (line 87) | private function _checkFields($name,$fields) {
    method checkCondition (line 101) | protected function checkCondition($where) {
    method checkOrder (line 128) | protected function checkOrder($order='') {
    method checkGroup (line 159) | protected function checkGroup($group='') {
    method checkFields (line 187) | protected function checkFields($fields='') {

FILE: ThinkPHP/Library/Think/Page.class.php
  class Page (line 13) | class Page{
    method __construct (line 42) | public function __construct($totalRows, $listRows=20, $parameter = arr...
    method setConfig (line 58) | public function setConfig($name,$value) {
    method url (line 69) | private function url($page){
    method show (line 77) | public function show() {

FILE: ThinkPHP/Library/Think/Route.class.php
  class Route (line 15) | class Route {
    method check (line 18) | public static function check(){
    method checkUrlMatch (line 97) | private static function checkUrlMatch($regx,$rule) {
    method parseUrl (line 138) | private static function parseUrl($url) {
    method parseRule (line 170) | private static function parseRule($rule,$route,$regx) {
    method parseRegex (line 246) | private static function parseRegex($matches,$route,$regx) {
    method invokeRegx (line 285) | static private function invokeRegx($closure, $var = array()) {
    method invokeRule (line 301) | static private function invokeRule($closure, $var = array()) {

FILE: ThinkPHP/Library/Think/Session/Driver/Db.class.php
  class Db (line 21) | class Db {
    method open (line 44) | public function open($savePath, $sessName) {
    method close (line 109) | public function close() {
    method read (line 123) | public function read($sessID) {
    method write (line 139) | public function write($sessID,$sessData) {
    method destroy (line 154) | public function destroy($sessID) {
    method gc (line 167) | public function gc($sessMaxLifeTime) {

FILE: ThinkPHP/Library/Think/Session/Driver/Memcache.class.php
  class Memcache (line 4) | class Memcache {
    method open (line 15) | public function open($savePath, $sessName) {
    method close (line 36) | public function close() {
    method read (line 48) | public function read($sessID) {
    method write (line 58) | public function write($sessID, $sessData) {
    method destroy (line 67) | public function destroy($sessID) {
    method gc (line 76) | public function gc($sessMaxLifeTime) {

FILE: ThinkPHP/Library/Think/Session/Driver/Mysqli.class.php
  class Db (line 23) | class Db
    method open (line 47) | public function open($savePath, $sessName)
    method close (line 116) | public function close()
    method read (line 131) | public function read($sessID)
    method write (line 148) | public function write($sessID, $sessData)
    method destroy (line 163) | public function destroy($sessID)
    method gc (line 177) | public function gc($sessMaxLifeTime)

FILE: ThinkPHP/Library/Think/Storage.class.php
  class Storage (line 13) | class Storage {
    method connect (line 29) | static public function connect($type='File',$options=array()) {
    method __callstatic (line 34) | static public function __callstatic($method,$args){

FILE: ThinkPHP/Library/Think/Storage/Driver/File.class.php
  class File (line 14) | class File extends Storage{
    method __construct (line 22) | public function __construct() {
    method read (line 31) | public function read($filename,$type=''){
    method put (line 42) | public function put($filename,$content,$type=''){
    method append (line 62) | public function append($filename,$content,$type=''){
    method load (line 76) | public function load($_filename,$vars=null){
    method has (line 89) | public function has($filename,$type=''){
    method unlink (line 99) | public function unlink($filename,$type=''){
    method get (line 111) | public function get($filename,$name,$type=''){

FILE: ThinkPHP/Library/Think/Storage/Driver/Sae.class.php
  class Sae (line 14) | class Sae extends Storage{
    method __construct (line 24) | public function __construct() {
    method getKv (line 39) | private function getKv(){
    method read (line 56) | public function read($filename,$type=''){
    method put (line 76) | public function put($filename,$content,$type=''){
    method append (line 105) | public function append($filename,$content,$type=''){
    method load (line 119) | public function load($_filename,$vars=null){
    method has (line 131) | public function has($filename,$type=''){
    method unlink (line 145) | public function unlink($filename,$type=''){
    method get (line 168) | public function get($filename,$name,$type=''){

FILE: ThinkPHP/Library/Think/Template.class.php
  class Template (line 17) | class  Template {
    method __construct (line 33) | public function __construct(){
    method stripPreg (line 47) | private function stripPreg($str) {
    method get (line 55) | public function get($name) {
    method set (line 62) | public function set($name,$value) {
    method fetch (line 74) | public function fetch($templateFile,$templateVar,$prefix='') {
    method loadTemplate (line 88) | public function loadTemplate ($templateFile,$prefix='') {
    method compiler (line 124) | protected function compiler($tmplContent) {
    method parse (line 145) | public function parse($content) {
    method parsePhp (line 189) | protected function parsePhp($content) {
    method parseLayout (line 202) | protected function parseLayout($content) {
    method parseInclude (line 224) | protected function parseInclude($content, $extend = true) {
    method parseExtend (line 245) | protected function parseExtend($content) {
    method parseXmlAttrs (line 273) | private function parseXmlAttrs($attrs) {
    method parseLiteral (line 289) | private function parseLiteral($content) {
    method restoreLiteral (line 305) | private function restoreLiteral($tag) {
    method parseBlock (line 321) | private function parseBlock($name,$content = '') {
    method replaceBlock (line 336) | private function replaceBlock($content){
    method getIncludeTagLib (line 367) | public function getIncludeTagLib(& $content) {
    method parseTagLib (line 388) | public function parseTagLib($tagLib,&$content,$hide=false) {
    method parseXmlTag (line 444) | public function parseXmlTag($tagLib,$tag,$attr,$content) {
    method parseTag (line 460) | public function parseTag($tagStr){
    method parseVar (line 491) | public function parseVar($varStr){
    method parseVarFunction (line 554) | public function parseVarFunction($name,$varArray){
    method parseThinkVar (line 592) | public function parseThinkVar($varStr){
    method parseIncludeItem (line 666) | private function parseIncludeItem($tmplPublicName,$vars=array(),$extend){
    method parseTemplateName (line 683) | private function parseTemplateName($templateName){

FILE: ThinkPHP/Library/Think/Template/Driver/Ease.class.php
  class Ease (line 15) | class Ease {
    method fetch (line 23) | public function fetch($templateFile,$var) {

FILE: ThinkPHP/Library/Think/Template/Driver/Lite.class.php
  class Lite (line 15) | class Lite {
    method fetch (line 23) | public function fetch($templateFile,$var) {

FILE: ThinkPHP/Library/Think/Template/Driver/Mobile.class.php
  class Mobile (line 15) | class Mobile {
    method fetch (line 23) | public function fetch($templateFile,$var) {

FILE: ThinkPHP/Library/Think/Template/Driver/Smart.class.php
  class Smart (line 15) | class Smart {
    method fetch (line 23) | public function fetch($templateFile,$var) {

FILE: ThinkPHP/Library/Think/Template/Driver/Smarty.class.php
  class Smarty (line 15) | class Smarty {
    method fetch (line 24) | public function fetch($templateFile,$var) {

FILE: ThinkPHP/Library/Think/Template/TagLib.class.php
  class TagLib (line 15) | class TagLib {
    method __construct (line 65) | public function __construct() {
    method parseXmlAttr (line 76) | public function parseXmlAttr($attr,$tag) {
    method parseCondition (line 126) | public function parseCondition($condition) {
    method autoBuildVar (line 150) | public function autoBuildVar($name) {
    method parseThinkVar (line 192) | public function parseThinkVar($varStr){
    method getTags (line 243) | public function getTags(){

FILE: ThinkPHP/Library/Think/Template/TagLib/Cx.class.php
  class Cx (line 16) | class Cx extends TagLib {
    method _php (line 51) | public function _php($tag,$content) {
    method _volist (line 68) | public function _volist($tag,$content) {
    method _foreach (line 111) | public function _foreach($tag,$content) {
    method _if (line 139) | public function _if($tag,$content) {
    method _elseif (line 153) | public function _elseif($tag,$content) {
    method _else (line 165) | public function _else($tag) {
    method _switch (line 183) | public function _switch($tag,$content) {
    method _case (line 201) | public function _case($tag,$content) {
    method _default (line 235) | public function _default($tag) {
    method _compare (line 249) | public function _compare($tag,$content,$type='eq') {
    method _eq (line 268) | public function _eq($tag,$content) {
    method _equal (line 272) | public function _equal($tag,$content) {
    method _neq (line 276) | public function _neq($tag,$content) {
    method _notequal (line 280) | public function _notequal($tag,$content) {
    method _gt (line 284) | public function _gt($tag,$content) {
    method _lt (line 288) | public function _lt($tag,$content) {
    method _egt (line 292) | public function _egt($tag,$content) {
    method _elt (line 296) | public function _elt($tag,$content) {
    method _heq (line 300) | public function _heq($tag,$content) {
    method _nheq (line 304) | public function _nheq($tag,$content) {
    method _range (line 319) | public function _range($tag,$content,$type='in') {
    method _in (line 349) | public function _in($tag,$content) {
    method _notin (line 354) | public function _notin($tag,$content) {
    method _between (line 358) | public function _between($tag,$content){
    method _notbetween (line 362) | public function _notbetween($tag,$content){
    method _present (line 375) | public function _present($tag,$content) {
    method _notpresent (line 391) | public function _notpresent($tag,$content) {
    method _empty (line 407) | public function _empty($tag,$content) {
    method _notempty (line 414) | public function _notempty($tag,$content) {
    method _defined (line 428) | public function _defined($tag,$content) {
    method _notdefined (line 434) | public function _notdefined($tag,$content) {
    method _import (line 450) | public function _import($tag,$content,$isFile=false,$type='') {
    method _load (line 516) | public function _load($tag,$content) {
    method _css (line 521) | public function _css($tag,$content) {
    method _js (line 526) | public function _js($tag,$content) {
    method _assign (line 539) | public function _assign($tag,$content) {
    method _define (line 559) | public function _define($tag,$content) {
    method _for (line 578) | public function _for($tag, $content){

FILE: ThinkPHP/Library/Think/Template/TagLib/Html.class.php
  class Html (line 16) | class Html extends TagLib{
    method _editor (line 36) | public function _editor($tag,$content) {
    method _imageBtn (line 77) | public function _imageBtn($tag) {
    method _imgLink (line 101) | public function _imgLink($tag) {
    method _select (line 123) | public function _select($tag) {
    method _checkbox (line 179) | public function _checkbox($tag) {
    method _radio (line 204) | public function _radio($tag) {
    method _grid (line 230) | public function _grid($tag) {
    method _list (line 369) | public function _list($tag) {

FILE: ThinkPHP/Library/Think/Think.class.php
  class Think (line 16) | class Think {
    method start (line 29) | static public function start() {
    method addMap (line 124) | static public function addMap($class, $map=''){
    method getMap (line 133) | static public function getMap($class=''){
    method autoload (line 148) | public static function autoload($class) {
    method instance (line 194) | static public function instance($class,$method='') {
    method appException (line 215) | static public function appException($e) {
    method appError (line 243) | static public function appError($errno, $errstr, $errfile, $errline) {
    method fatalError (line 263) | static public function fatalError() {
    method halt (line 284) | static public function halt($error) {
    method trace (line 326) | static public function trace($value='[think]',$label='',$level='DEBUG'...

FILE: ThinkPHP/Library/Think/Upload.class.php
  class Upload (line 12) | class Upload {
    method __construct (line 51) | public function __construct($config = array(), $driver = '', $driverCo...
    method __get (line 78) | public function __get($name) {
    method __set (line 82) | public function __set($name,$value){
    method __isset (line 93) | public function __isset($name){
    method getError (line 101) | public function getError(){
    method uploadOne (line 110) | public function uploadOne($file){
    method upload (line 119) | public function upload($files='') {
    method dealFiles (line 226) | private function dealFiles($files) {
    method setDriver (line 253) | private function setDriver($driver = null, $config = null){
    method check (line 267) | private function check($file) {
    method error (line 313) | private function error($errorNo) {
    method checkSize (line 342) | private function checkSize($size) {
    method checkMime (line 350) | private function checkMime($mime) {
    method checkExt (line 358) | private function checkExt($ext) {
    method getSaveName (line 366) | private function getSaveName($file) {
    method getSubPath (line 390) | private function getSubPath($filename) {
    method getName (line 410) | private function getName($rule, $filename){

FILE: ThinkPHP/Library/Think/Upload/Driver/Bcs.class.php
  class Bcs (line 13) | class Bcs {
    method __construct (line 41) | public function __construct($config){
    method checkRootPath (line 56) | public function checkRootPath($rootpath){
    method checkSavePath (line 67) | public function checkSavePath($savepath){
    method mkdir (line 76) | public function mkdir($savepath){
    method save (line 86) | public function save(&$file,$replace=true) {
    method download (line 100) | public function download($file){
    method getError (line 112) | public function getError(){
    method request (line 124) | private function request($path, $method, $headers = null, $body = null){
    method response (line 198) | private function response($text){
    method sign (line 207) | private function sign($method, $Bucket, $object='/', $size=''){
    method error (line 231) | private function error($header) {

FILE: ThinkPHP/Library/Think/Upload/Driver/Bcs/bcs.class.php
  class BCS_Exception (line 25) | class BCS_Exception extends \Exception {
  class BaiduBCS (line 30) | class BaiduBCS {
    method __construct (line 119) | public function __construct($ak = NULL, $sk = NULL, $hostname = NULL) {
    method authenticate (line 154) | private function authenticate($opt) {
    method list_bucket (line 253) | public function list_bucket($opt = array()) {
    method create_bucket (line 271) | public function create_bucket($bucket, $acl = NULL, $opt = array()) {
    method delete_bucket (line 293) | public function delete_bucket($bucket, $opt = array()) {
    method set_bucket_acl (line 315) | public function set_bucket_acl($bucket, $acl, $opt = array()) {
    method get_bucket_acl (line 335) | public function get_bucket_acl($bucket, $opt = array()) {
    method list_object (line 357) | public function list_object($bucket, $opt = array()) {
    method list_object_by_dir (line 396) | public function list_object_by_dir($bucket, $dir = '/', $list_model = ...
    method create_object (line 432) | public function create_object($bucket, $object, $file, $opt = array()) {
    method create_object_by_content (line 464) | public function create_object_by_content($bucket, $object, $content, $...
    method create_object_superfile (line 500) | public function create_object_superfile($bucket, $object, $file, $opt ...
    method upload_directory (line 604) | public function upload_directory($bucket, $dir, $opt = array()) {
    method copy_object (line 752) | public function copy_object($source, $dest, $opt = array()) {
    method set_object_meta (line 787) | public function set_object_meta($bucket, $object, $meta, $opt = array(...
    method get_object_acl (line 817) | public function get_object_acl($bucket, $object, $opt = array()) {
    method set_object_acl (line 842) | public function set_object_acl($bucket, $object, $acl, $opt = array()) {
    method delete_object (line 865) | public function delete_object($bucket, $object, $opt = array()) {
    method is_object_exist (line 886) | public function is_object_exist($bucket, $object, $opt = array()) {
    method get_object_info (line 908) | public function get_object_info($bucket, $object, $opt = array()) {
    method get_object (line 927) | public function get_object($bucket, $object, $opt = array()) {
    method generate_user_url (line 962) | private function generate_user_url($method, $bucket, $object, $opt = a...
    method generate_get_object_url (line 984) | public function generate_get_object_url($bucket, $object, $opt = array...
    method generate_put_object_url (line 995) | public function generate_put_object_url($bucket, $object, $opt = array...
    method generate_post_object_url (line 1006) | public function generate_post_object_url($bucket, $object, $opt = arra...
    method generate_delete_object_url (line 1017) | public function generate_delete_object_url($bucket, $object, $opt = ar...
    method generate_head_object_url (line 1028) | public function generate_head_object_url($bucket, $object, $opt = arra...
    method getUse_ssl (line 1036) | public function getUse_ssl() {
    method setUse_ssl (line 1043) | public function setUse_ssl($use_ssl) {
    method validate_bucket (line 1055) | public static function validate_bucket($bucket) {
    method validate_object (line 1070) | public static function validate_object($object) {
    method set_header_into_opt (line 1086) | private static function set_header_into_opt($header, $value, &$opt) {
    method array_recursive (line 1104) | private static function array_recursive(&$array, $function, $apply_to_...
    method array_to_json (line 1126) | private static function array_to_json($array) {
    method analyze_user_acl (line 1145) | private function analyze_user_acl($acl) {
    method format_signature (line 1170) | private function format_signature($opt) {
    method check_user_acl (line 1209) | private function check_user_acl($acl) {
    method format_url (line 1242) | private function format_url($opt) {
    method trimUrl (line 1270) | public static function trimUrl($url) {
    method get_filetree (line 1284) | public static function get_filetree($dir, $file_prefix = "/*") {
    method log (line 1301) | public function log($log, $opt) {
    method assertParameterArray (line 1313) | private function assertParameterArray($opt) {

FILE: ThinkPHP/Library/Think/Upload/Driver/Bcs/mimetypes.class.php
  class BCS_MimeTypes (line 3) | class BCS_MimeTypes {
    method get_mimetype (line 133) | public static function get_mimetype($ext) {

FILE: ThinkPHP/Library/Think/Upload/Driver/Bcs/requestcore.class.php
  class BCS_RequestCore (line 14) | class BCS_RequestCore {
    method __construct (line 156) | public function __construct($url = null, $proxy = null, $helpers = nul...
    method __destruct (line 181) | public function __destruct() {
    method set_credentials (line 200) | public function set_credentials($user, $pass) {
    method add_header (line 213) | public function add_header($key, $value) {
    method remove_header (line 224) | public function remove_header($key) {
    method set_method (line 237) | public function set_method($method) {
    method set_useragent (line 248) | public function set_useragent($ua) {
    method set_body (line 259) | public function set_body($body) {
    method set_request_url (line 270) | public function set_request_url($url) {
    method set_curlopts (line 282) | public function set_curlopts($curlopts) {
    method set_read_stream_size (line 293) | public function set_read_stream_size($size) {
    method set_read_stream (line 307) | public function set_read_stream($resource, $size = null) {
    method set_read_file (line 327) | public function set_read_file($location) {
    method set_write_stream (line 339) | public function set_write_stream($resource) {
    method set_write_file (line 350) | public function set_write_file($location) {
    method set_proxy (line 362) | public function set_proxy($proxy) {
    method set_seek_position (line 377) | public function set_seek_position($position) {
    method register_streaming_read_callback (line 400) | public function register_streaming_read_callback($callback) {
    method register_streaming_write_callback (line 422) | public function register_streaming_write_callback($callback) {
    method streaming_read_callback (line 437) | public function streaming_read_callback($curl_handle, $file_handle, $l...
    method streaming_write_callback (line 466) | public function streaming_write_callback($curl_handle, $data) {
    method prep_request (line 490) | public function prep_request() {
    method isBaeEnv (line 590) | private function isBaeEnv() {
    method process_response (line 617) | public function process_response($curl_handle = null, $response = null) {
    method send_request (line 662) | public function send_request($parse = false) {
    method send_multi_request (line 690) | public function send_multi_request($handles, $opt = null) {
    method get_response_header (line 762) | public function get_response_header($header = null) {
    method get_response_body (line 775) | public function get_response_body() {
    method get_response_code (line 784) | public function get_response_code() {
  class BCS_ResponseCore (line 791) | class BCS_ResponseCore {
    method __construct (line 813) | public function __construct($header, $body, $status = null) {
    method isOK (line 826) | public function isOK($codes = array(200, 201, 204, 206)) {
  class BCS_RequestCore_Exception (line 836) | class BCS_RequestCore_Exception extends \Exception {

FILE: ThinkPHP/Library/Think/Upload/Driver/Ftp.class.php
  class Ftp (line 13) | class Ftp {
    method __construct (line 44) | public function __construct($config){
    method checkRootPath (line 59) | public function checkRootPath($rootpath){
    method checkSavePath (line 75) | public function checkSavePath($savepath){
    method save (line 91) | public function save($file, $replace=true) {
    method mkdir (line 113) | public function mkdir($savepath){
    method getError (line 133) | public function getError(){
    method login (line 141) | private function login(){
    method __destruct (line 159) | public function __destruct() {

FILE: ThinkPHP/Library/Think/Upload/Driver/Local.class.php
  class Local (line 13) | class Local{
    method __construct (line 29) | public function __construct($config = null){
    method checkRootPath (line 38) | public function checkRootPath($rootpath){
    method checkSavePath (line 52) | public function checkSavePath($savepath){
    method save (line 73) | public function save($file, $replace=true) {
    method mkdir (line 96) | public function mkdir($savepath){
    method getError (line 114) | public function getError(){

FILE: ThinkPHP/Library/Think/Upload/Driver/Qiniu.class.php
  class Qiniu (line 15) | class Qiniu{
    method __construct (line 40) | public function __construct($config){
    method checkRootPath (line 51) | public function checkRootPath($rootpath){
    method checkSavePath (line 61) | public function checkSavePath($savepath){
    method mkdir (line 70) | public function mkdir($savepath){
    method save (line 80) | public function save(&$file,$replace=true) {
    method getError (line 99) | public function getError(){

FILE: ThinkPHP/Library/Think/Upload/Driver/Qiniu/QiniuStorage.class.php
  class QiniuStorage (line 4) | class QiniuStorage {
    method __construct (line 11) | public function __construct($config){
    method sign (line 19) | static function sign($sk, $ak, $data){
    method signWithData (line 24) | static function signWithData($sk, $ak, $data){
    method accessToken (line 29) | public function accessToken($url, $body=''){
    method UploadToken (line 44) | public function UploadToken($sk ,$ak ,$param){
    method upload (line 70) | public function upload($config, $file){
    method dealWithType (line 113) | public function dealWithType($key, $type){
    method buildUrlParam (line 150) | public function buildUrlParam(){
    method getList (line 155) | public function getList($query = array(), $path = ''){
    method info (line 164) | public function info($key){
    method downLink (line 175) | public function downLink($key){
    method rename (line 183) | public function rename($file, $new_file){
    method del (line 193) | public function del($file){
    method delBatch (line 202) | public function delBatch($files){
    method Qiniu_Encode (line 216) | static function Qiniu_Encode($str) {// URLSafeBase64Encode
    method Qiniu_escapeQuotes (line 222) | static function Qiniu_escapeQuotes($str){
    method request (line 236) | private function request($path, $method, $headers = null, $body = null){
    method response (line 308) | private function response($text){
    method error (line 325) | private function error($header, $body) {

FILE: ThinkPHP/Library/Think/Upload/Driver/Sae.class.php
  class Sae (line 13) | class Sae{
    method __construct (line 32) | public function __construct($config = null){
    method checkRootPath (line 43) | public function checkRootPath($rootpath){
    method checkSavePath (line 65) | public function checkSavePath($savepath){
    method save (line 75) | public function save(&$file, $replace=true) {
    method mkdir (line 94) | public function mkdir(){
    method getError (line 102) | public function getError(){

FILE: ThinkPHP/Library/Think/Upload/Driver/Upyun.class.php
  class Upyun (line 13) | class Upyun{
    method __construct (line 38) | public function __construct($config){
    method checkRootPath (line 49) | public function checkRootPath($rootpath){
    method checkSavePath (line 60) | public function checkSavePath($savepath){
    method mkdir (line 69) | public function mkdir($savepath){
    method save (line 79) | public function save($file, $replace = true) {
    method getError (line 94) | public function getError(){
    method request (line 106) | private function request($path, $method, $headers = null, $body = null){
    method response (line 181) | private function response($text){
    method sign (line 202) | private function sign($method, $uri, $date, $length){
    method error (line 211) | private function error($header) {

FILE: ThinkPHP/Library/Think/Verify.class.php
  class Verify (line 14) | class Verify {
    method __construct (line 41) | public function __construct($config=array()){
    method __get (line 51) | public function __get($name) {
    method __set (line 62) | public function __set($name,$value){
    method __isset (line 74) | public function __isset($name){
    method check (line 85) | public function check($code, $id = '') {
    method entry (line 113) | public function entry($id = '') {
    method _writeCurve (line 200) | private function _writeCurve() {
    method _writeNoise (line 249) | private function _writeNoise() {
    method _background (line 265) | private function _background() {
    method authcode (line 287) | private function authcode($str){

FILE: ThinkPHP/Library/Think/View.class.php
  class View (line 15) | class View {
    method assign (line 36) | public function assign($name,$value=''){
    method get (line 50) | public function get($name=''){
    method display (line 67) | public function display($templateFile='',$charset='',$contentType='',$...
    method render (line 87) | private function render($content,$charset='',$contentType=''){
    method fetch (line 106) | public function fetch($templateFile='',$content='',$prefix='') {
    method parseTemplate (line 142) | public function parseTemplate($template='') {
    method getThemePath (line 178) | protected function getThemePath($module=MODULE_NAME){
    method theme (line 196) | public function theme($theme){
    method getTemplateTheme (line 206) | private function getTemplateTheme() {

FILE: ThinkPHP/Library/Vendor/Boris/Boris.php
  class Boris (line 10) | class Boris {
    method __construct (line 26) | public function __construct($prompt = 'boris> ', $historyFile = null) {
    method onStart (line 62) | public function onStart($hook) {
    method onFailure (line 90) | public function onFailure($hook){
    method setLocal (line 108) | public function setLocal($local, $value = null) {
    method setPrompt (line 121) | public function setPrompt($prompt) {
    method setInspector (line 130) | public function setInspector($inspector) {
    method start (line 139) | public function start() {

FILE: ThinkPHP/Library/Vendor/Boris/CLIOptionsHandler.php
  class CLIOptionsHandler (line 10) | class CLIOptionsHandler {
    method handle (line 16) | public function handle($boris) {
    method _handleRequire (line 51) | private function _handleRequire($boris, $paths) {
    method _handleUsageInfo (line 67) | private function _handleUsageInfo() {
    method _handleVersion (line 81) | private function _handleVersion() {

FILE: ThinkPHP/Library/Vendor/Boris/ColoredInspector.php
  class ColoredInspector (line 17) | class ColoredInspector implements Inspector {
    method __construct (line 77) | public function __construct($colorMap = null) {
    method inspect (line 87) | public function inspect($variable) {
    method objectVars (line 103) | public function objectVars($value) {
    method _dump (line 109) | public function _dump($value) {
    method _dumpNull (line 128) | private function _dumpNull($value) {
    method _dumpString (line 132) | private function _dumpString($value) {
    method _dumpBoolean (line 136) | private function _dumpBoolean($value) {
    method _dumpInteger (line 140) | private function _dumpInteger($value) {
    method _dumpFloat (line 144) | private function _dumpFloat($value) {
    method _dumpArray (line 148) | private function _dumpArray($value) {
    method _dumpObject (line 152) | private function _dumpObject($value) {
    method _dumpStructure (line 159) | private function _dumpStructure($type, $value) {
    method _buildAst (line 163) | public function _buildAst($type, $value, $seen = array()) {
    method _astToString (line 203) | public function _astToString($node, $indent = 0) {
    method _defaultColorMap (line 239) | private function _defaultColorMap() {
    method _colorize (line 251) | private function _colorize($type, $value) {
    method _isSeen (line 265) | private function _isSeen($value, $seen) {

FILE: ThinkPHP/Library/Vendor/Boris/Config.php
  class Config (line 10) | class Config {
    method __construct (line 26) | public function __construct($searchPaths = null, $cascade = false) {
    method apply (line 51) | public function apply(Boris $boris) {
    method loadedFiles (line 76) | public function loadedFiles() {
    method _loadInIsolation (line 82) | private function _loadInIsolation($path, $boris) {

FILE: ThinkPHP/Library/Vendor/Boris/DumpInspector.php
  class DumpInspector (line 10) | class DumpInspector implements Inspector {
    method inspect (line 11) | public function inspect($variable) {

FILE: ThinkPHP/Library/Vendor/Boris/EvalWorker.php
  class EvalWorker (line 10) | class EvalWorker {
    method __construct (line 32) | public function __construct($socket) {
    method setLocal (line 44) | public function setLocal($local, $value = null) {
    method setStartHooks (line 57) | public function setStartHooks($hooks) {
    method setFailureHooks (line 66) | public function setFailureHooks($hooks) {
    method setInspector (line 75) | public function setInspector($inspector) {
    method start (line 84) | public function start() {
    method cancelOperation (line 158) | public function cancelOperation() {
    method delegateExceptionHandler (line 168) | public function delegateExceptionHandler($ex) {
    method _runHooks (line 175) | private function _runHooks($hooks) {
    method _expungeOldWorker (line 199) | private function _expungeOldWorker() {
    method _write (line 204) | private function _write($socket, $data) {
    method _read (line 210) | private function _read($socket)
    method _select (line 224) | private function _select(&$read, &$except) {
    method _transform (line 232) | private function _transform($input) {

FILE: ThinkPHP/Library/Vendor/Boris/ExportInspector.php
  class ExportInspector (line 10) | class ExportInspector implements Inspector {
    method inspect (line 11) | public function inspect($variable) {

FILE: ThinkPHP/Library/Vendor/Boris/Inspector.php
  type Inspector (line 10) | interface Inspector {
    method inspect (line 18) | public function inspect($variable);

FILE: ThinkPHP/Library/Vendor/Boris/ReadlineClient.php
  class ReadlineClient (line 12) | class ReadlineClient {
    method __construct (line 23) | public function __construct($socket) {
    method start (line 35) | public function start($prompt, $historyFile) {
    method clear (line 105) | public function clear() {

FILE: ThinkPHP/Library/Vendor/Boris/ShallowParser.php
  class ShallowParser (line 10) | class ShallowParser {
    method __construct (line 25) | public function __construct() {
    method statements (line 38) | public function statements($buffer) {
    method quote (line 70) | public function quote($token) {
    method _createResult (line 76) | private function _createResult($buffer) {
    method _resetResult (line 88) | private function _resetResult($result) {
    method _combineStatements (line 97) | private function _combineStatements($result) {
    method _prepareForDebug (line 111) | private function _prepareForDebug($result) {
    method _initializeHeredoc (line 115) | private function _initializeHeredoc($result) {
    method _scanWsp (line 129) | private function _scanWsp($result) {
    method _scanEscapedChar (line 144) | private function _scanEscapedChar($result) {
    method _scanRegion (line 157) | private function _scanRegion($result) {
    method _scanStateEntrant (line 173) | private function _scanStateEntrant($result) {
    method _scanChar (line 185) | private function _scanChar($result) {
    method _isLambda (line 203) | private function _isLambda($input) {
    method _isReturnable (line 210) | private function _isReturnable($input) {
    method _prepareDebugStmt (line 226) | private function _prepareDebugStmt($input) {

FILE: ThinkPHP/Library/Vendor/EaseTemplate/template.core.php
  class ETCore (line 14) | class ETCore{
    method ETCoreStart (line 33) | function ETCoreStart(
    method set_var (line 134) | function set_var(
    method set_file (line 150) | function set_file(
    method ParseCode (line 172) | function ParseCode(
    method lang (line 277) | function lang(
    method inc_preg (line 356) | function inc_preg(
    method inc (line 366) | function inc(
    method CompilePHP (line 401) | function CompilePHP(
    method FixPHP (line 428) | function FixPHP(
    method FileUpdate (line 441) | function FileUpdate($filname,$settime=0){
    method output (line 468) | function output(
    method n (line 609) | function n(){
    method r (line 619) | function r(
    method p (line 630) | function p(
    method ImgCheck (line 640) | function ImgCheck(
    method Value (line 674) | function Value(){
    method clear (line 682) | function clear(){
    method htm_w (line 690) | function htm_w(
    method htm_time (line 724) | function htm_time($times=0){
    method htm_dir (line 734) | function htm_dir($Name = ''){
    method HtmCheck (line 744) | function HtmCheck(
    method htm_p (line 763) | function htm_p(
    method htm_r (line 776) | function htm_r(
    method FileName (line 789) | function FileName(
    method inc_php (line 804) | function inc_php(
    method Row (line 821) | function Row(
    method Color (line 846) | function Color(
    method Dirs (line 861) | function Dirs(
    method reader (line 875) | function reader(
    method writer (line 887) | function writer(
    method inc_list (line 907) | function inc_list(){

FILE: ThinkPHP/Library/Vendor/EaseTemplate/template.ease.php
  class template (line 19) | Class template extends ETCore{
    method template (line 24) | function template(

FILE: ThinkPHP/Library/Vendor/Hprose/HproseClassManager.php
  class HproseClassManager (line 23) | class HproseClassManager {
    method register (line 26) | public static function register($class, $alias) {
    method getClassAlias (line 30) | public static function getClassAlias($class) {
    method getClass (line 38) | public static function getClass($alias) {

FILE: ThinkPHP/Library/Vendor/Hprose/HproseClient.php
  class HproseClient (line 26) | abstract class HproseClient {
    method send (line 30) | protected abstract function send($request);
    method __construct (line 31) | public function __construct($url = '') {
    method useService (line 36) | public function useService($url = '', $namespace = '') {
    method invoke (line 42) | public function invoke($functionName, &$arguments = array(), $byRef = ...
    method getFilter (line 99) | public function getFilter() {
    method setFilter (line 102) | public function setFilter($filter) {
    method getSimpleMode (line 105) | public function getSimpleMode() {
    method setSimpleMode (line 108) | public function setSimpleMode($simple = true) {
    method __call (line 111) | public function __call($function, $arguments) {
    method __get (line 114) | public function __get($name) {
  class HproseProxy (line 119) | class HproseProxy {
    method __construct (line 122) | public function __construct($client, $namespace = '') {
    method __call (line 126) | public function __call($function, $arguments) {
    method __get (line 130) | public function __get($name) {

FILE: ThinkPHP/Library/Vendor/Hprose/HproseCommon.php
  class HproseResultMode (line 23) | class HproseResultMode {
  class HproseException (line 30) | class HproseException extends Exception {}
  type HproseFilter (line 32) | interface HproseFilter {
    method inputFilter (line 33) | function inputFilter($data);
    method outputFilter (line 34) | function outputFilter($data);
  class HproseDate (line 37) | class HproseDate {
    method __construct (line 42) | public function __construct() {
    method addDays (line 88) | public function addDays($days) {
    method addMonths (line 184) | public function addMonths($months) {
    method addYears (line 206) | public function addYears($years) {
    method timestamp (line 214) | public function timestamp() {
    method toString (line 222) | public function toString($fullformat = true) {
    method __toString (line 230) | public function __toString() {
    method isLeapYear (line 234) | public static function isLeapYear($year) {
    method daysInMonth (line 237) | public static function daysInMonth($year, $month) {
    method isValidDate (line 243) | public static function isValidDate($year, $month, $day) {
    method dayOfWeek (line 250) | public function dayOfWeek() {
    method dayOfYear (line 266) | public function dayOfYear() {
  class HproseTime (line 286) | class HproseTime {
    method __construct (line 292) | public function __construct() {
    method timestamp (line 346) | public function timestamp() {
    method toString (line 356) | public function toString($fullformat = true) {
    method __toString (line 374) | public function __toString() {
    method isValidTime (line 377) | public static function isValidTime($hour, $minute, $second, $microseco...
  class HproseDateTime (line 385) | class HproseDateTime extends HproseDate {
    method __construct (line 390) | public function __construct() {
    method addMicroseconds (line 502) | public function addMicroseconds($microseconds) {
    method addSeconds (line 520) | public function addSeconds($seconds) {
    method addMinutes (line 537) | public function addMinutes($minutes) {
    method addHours (line 554) | public function addHours($hours) {
    method after (line 571) | public function after($when) {
    method before (line 592) | public function before($when) {
    method equals (line 613) | public function equals($when) {
    method timestamp (line 626) | public function timestamp() {
    method toString (line 646) | public function toString($fullformat = true) {
    method __toString (line 675) | public function __toString() {
    method isValidTime (line 678) | public static function isValidTime($hour, $minute, $second, $microseco...
  function is_utf8 (line 688) | function is_utf8($s) {
  function is_utf8 (line 693) | function is_utf8($s) {
  function is_utf8 (line 698) | function is_utf8($s) {
  function is_list (line 780) | function is_list(array $a) {
  function array_ref_search (line 790) | function array_ref_search(&$value, &$array) {
  function spl_object_hash (line 809) | function spl_object_hash($object) {

FILE: ThinkPHP/Library/Vendor/Hprose/HproseFormatter.php
  class HproseFormatter (line 27) | class HproseFormatter {
    method serialize (line 28) | public static function serialize(&$var, $simple = false) {
    method unserialize (line 34) | public static function &unserialize($data, $simple = false) {

FILE: ThinkPHP/Library/Vendor/Hprose/HproseHttpClient.php
  class HproseBaseHttpClient (line 27) | abstract class HproseBaseHttpClient extends HproseClient {
    method hproseKeepCookieInSession (line 37) | static function hproseKeepCookieInSession() {
    method keepSession (line 40) | public static function keepSession() {
    method setCookie (line 46) | protected function setCookie($headers) {
    method formatCookie (line 84) | protected abstract function formatCookie($cookies);
    method getCookie (line 85) | protected function getCookie() {
    method __construct (line 108) | public function __construct($url = '') {
    method useService (line 112) | public function useService($url = '', $namespace = '') {
    method setHeader (line 125) | public function setHeader($name, $value) {
    method setProxy (line 138) | public function setProxy($proxy = NULL) {
    method setTimeout (line 141) | public function setTimeout($timeout) {
    method getTimeout (line 144) | public function getTimeout() {
    method setKeepAlive (line 147) | public function setKeepAlive($keepAlive = true) {
    method getKeepAlive (line 150) | public function getKeepAlive() {
    method setKeepAliveTimeout (line 153) | public function setKeepAliveTimeout($timeout) {
    method getKeepAliveTimeout (line 156) | public function getKeepAliveTimeout() {
  class HproseHttpClient (line 162) | class HproseHttpClient extends HproseBaseHttpClient {
    method formatCookie (line 163) | protected function formatCookie($cookies) {
    method send (line 169) | protected function send($request) {
    method formatCookie (line 203) | protected function formatCookie($cookies) {
    method __construct (line 209) | public function __construct($url = '') {
    method send (line 213) | protected function send($request) {
    method __destruct (line 267) | public function __destruct() {
    method formatCookie (line 274) | protected function formatCookie($cookies) {
    method __errorHandler (line 280) | public function __errorHandler($errno, $errstr, $errfile, $errline) {
    method send (line 283) | protected function send($request) {
  class HproseHttpClient (line 201) | class HproseHttpClient extends HproseBaseHttpClient {
    method formatCookie (line 163) | protected function formatCookie($cookies) {
    method send (line 169) | protected function send($request) {
    method formatCookie (line 203) | protected function formatCookie($cookies) {
    method __construct (line 209) | public function __construct($url = '') {
    method send (line 213) | protected function send($request) {
    method __destruct (line 267) | public function __destruct() {
    method formatCookie (line 274) | protected function formatCookie($cookies) {
    method __errorHandler (line 280) | public function __errorHandler($errno, $errstr, $errfile, $errline) {
    method send (line 283) | protected function send($request) {
  class HproseHttpClient (line 273) | class HproseHttpClient extends HproseBaseHttpClient {
    method formatCookie (line 163) | protected function formatCookie($cookies) {
    method send (line 169) | protected function send($request) {
    method formatCookie (line 203) | protected function formatCookie($cookies) {
    method __construct (line 209) | public function __construct($url = '') {
    method send (line 213) | protected function send($request) {
    method __destruct (line 267) | public function __destruct() {
    method formatCookie (line 274) | protected function formatCookie($cookies) {
    method __errorHandler (line 280) | public function __errorHandler($errno, $errstr, $errfile, $errline) {
    method send (line 283) | protected function send($request) {

FILE: ThinkPHP/Library/Vendor/Hprose/HproseHttpServer.php
  class HproseHttpServer (line 26) | class HproseHttpServer {
    method __construct (line 57) | public function __construct() {
    method __filterHandler (line 78) | public function __filterHandler($data) {
    method __errorHandler (line 93) | public function __errorHandler($errno, $errstr, $errfile, $errline) {
    method sendHeader (line 101) | private function sendHeader() {
    method sendError (line 121) | private function sendError() {
    method doInvoke (line 132) | private function doInvoke() {
    method doFunctionList (line 217) | private function doFunctionList() {
    method getDeclaredOnlyMethods (line 225) | private function getDeclaredOnlyMethods($class) {
    method addMissingFunction (line 236) | public function addMissingFunction($function, $resultMode = HproseResu...
    method addFunction (line 239) | public function addFunction($function, $alias = NULL, $resultMode = Hp...
    method addFunctions (line 264) | public function addFunctions($functions, $aliases = NULL, $resultMode ...
    method addMethod (line 280) | public function addMethod($methodname, $belongto, $alias = NULL, $resu...
    method addMethods (line 291) | public function addMethods($methods, $belongto, $aliases = NULL, $resu...
    method addInstanceMethods (line 320) | public function addInstanceMethods($object, $class = NULL, $aliasPrefi...
    method addClassMethods (line 324) | public function addClassMethods($class, $execclass = NULL, $aliasPrefi...
    method add (line 328) | public function add() {
    method isDebugEnabled (line 403) | public function isDebugEnabled() {
    method setDebugEnabled (line 406) | public function setDebugEnabled($enable = true) {
    method isCrossDomainEnabled (line 409) | public function isCrossDomainEnabled() {
    method setCrossDomainEnabled (line 412) | public function setCrossDomainEnabled($enable = true) {
    method isP3PEnabled (line 415) | public function isP3PEnabled() {
    method setP3PEnabled (line 418) | public function setP3PEnabled($enable = true) {
    method isGetEnabled (line 421) | public function isGetEnabled() {
    method setGetEnabled (line 424) | public function setGetEnabled($enable = true) {
    method getFilter (line 427) | public function getFilter() {
    method setFilter (line 430) | public function setFilter($filter) {
    method getSimpleMode (line 433) | public function getSimpleMode() {
    method setSimpleMode (line 436) | public function setSimpleMode($simple = true) {
    method getErrorTypes (line 439) | public function getErrorTypes() {
    method setErrorTypes (line 442) | public function setErrorTypes($error_types) {
    method handle (line 445) | public function handle() {
    method start (line 479) | public function start() {

FILE: ThinkPHP/Library/Vendor/Hprose/HproseIOStream.php
  class HproseAbstractStream (line 23) | abstract class HproseAbstractStream {
    method close (line 24) | public abstract function close();
    method getc (line 25) | public abstract function getc();
    method read (line 26) | public abstract function read($length);
    method readuntil (line 27) | public abstract function readuntil($char);
    method seek (line 28) | public abstract function seek($offset, $whence = SEEK_SET);
    method mark (line 29) | public abstract function mark();
    method unmark (line 30) | public abstract function unmark();
    method reset (line 31) | public abstract function reset();
    method skip (line 32) | public abstract function skip($n);
    method eof (line 33) | public abstract function eof();
    method write (line 34) | public abstract function write($string, $length = -1);
  class HproseStringStream (line 37) | class HproseStringStream extends HproseAbstractStream {
    method __construct (line 42) | public function __construct($string = '') {
    method close (line 48) | public function close() {
    method length (line 54) | public function length() {
    method getc (line 57) | public function getc() {
    method read (line 60) | public function read($length) {
    method readuntil (line 65) | public function readuntil($tag) {
    method seek (line 77) | public function seek($offset, $whence = SEEK_SET) {
    method mark (line 92) | public function mark() {
    method unmark (line 95) | public function unmark() {
    method reset (line 98) | public function reset() {
    method skip (line 103) | public function skip($n) {
    method eof (line 106) | public function eof() {
    method write (line 109) | public function write($string, $length = -1) {
    method toString (line 119) | public function toString() {
  class HproseFileStream (line 124) | class HproseFileStream extends HproseAbstractStream {
    method __construct (line 130) | public function __construct($fp) {
    method close (line 137) | public function close() {
    method getc (line 140) | public function getc() {
    method read (line 160) | public function read($length) {
    method readuntil (line 188) | public function readuntil($char) {
    method seek (line 193) | public function seek($offset, $whence = SEEK_SET) {
    method mark (line 203) | public function mark() {
    method unmark (line 216) | public function unmark() {
    method reset (line 219) | public function reset() {
    method skip (line 222) | public function skip($n) {
    method eof (line 225) | public function eof() {
    method write (line 229) | public function write($string, $length = -1) {
  class HproseProcStream (line 235) | class HproseProcStream extends HproseAbstractStream {
    method __construct (line 242) | public function __construct($process, $pipes) {
    method close (line 250) | public function close() {
    method getc (line 255) | public function getc() {
    method read (line 275) | public function read($length) {
    method readuntil (line 303) | public function readuntil($char) {
    method seek (line 308) | public function seek($offset, $whence = SEEK_SET) {
    method mark (line 318) | public function mark() {
    method unmark (line 331) | public function unmark() {
    method reset (line 334) | public function reset() {
    method skip (line 337) | public function skip($n) {
    method eof (line 340) | public function eof() {
    method write (line 344) | public function write($string, $length = -1) {

FILE: ThinkPHP/Library/Vendor/Hprose/HproseReader.php
  class HproseRawReader (line 27) | class HproseRawReader {
    method __construct (line 29) | function __construct(&$stream) {
    method readRaw (line 32) | public function readRaw($ostream = NULL, $tag = NULL) {
    method readNumberRaw (line 104) | private function readNumberRaw($ostream, $tag) {
    method readDateTimeRaw (line 111) | private function readDateTimeRaw($ostream, $tag) {
    method readUTF8CharRaw (line 121) | private function readUTF8CharRaw($ostream, $tag) {
    method readBytesRaw (line 138) | private function readBytesRaw($ostream, $tag) {
    method readStringRaw (line 145) | private function readStringRaw($ostream, $tag) {
    method readGuidRaw (line 197) | private function readGuidRaw($ostream, $tag) {
    method readComplexRaw (line 202) | private function readComplexRaw($ostream, $tag) {
  class HproseSimpleReader (line 214) | class HproseSimpleReader extends HproseRawReader {
    method __construct (line 216) | function __construct(&$stream) {
    method unserialize (line 220) | public function &unserialize($tag = NULL) {
    method checkTag (line 262) | public function checkTag($expectTag, $tag = NULL) {
    method checkTags (line 268) | public function checkTags($expectTags, $tag = NULL) {
    method readInteger (line 276) | public function readInteger($includeTag = false) {
    method readLong (line 286) | public function readLong($includeTag = false) {
    method readDouble (line 296) | public function readDouble($includeTag = false) {
    method readNaN (line 306) | public function readNaN() {
    method readInfinity (line 310) | public function readInfinity($includeTag = false) {
    method readNull (line 314) | public function readNull() {
    method readEmpty (line 318) | public function readEmpty() {
    method readBoolean (line 322) | public function readBoolean() {
    method readDate (line 326) | public function readDate($includeTag = false) {
    method readTime (line 369) | public function readTime($includeTag = false) {
    method readBytes (line 396) | public function readBytes($includeTag = false) {
    method readUTF8Char (line 403) | public function readUTF8Char($includeTag = false) {
    method readString (line 419) | public function readString($includeTag = false) {
    method readGuid (line 469) | public function readGuid($includeTag = false) {
    method readListBegin (line 476) | protected function &readListBegin() {
    method readListEnd (line 480) | protected function &readListEnd(&$list) {
    method readList (line 488) | public function &readList($includeTag = false) {
    method readMapBegin (line 493) | protected function &readMapBegin() {
    method readMapEnd (line 497) | protected function &readMapEnd(&$map) {
    method readMap (line 506) | public function &readMap($includeTag = false) {
    method readObjectBegin (line 511) | protected function readObjectBegin() {
    method readObjectEnd (line 516) | protected function readObjectEnd($object, $fields) {
    method readObject (line 540) | public function readObject($includeTag = false) {
    method readClass (line 551) | protected function readClass() {
    method reset (line 561) | public function reset() {
  class HproseReader (line 566) | class HproseReader extends HproseSimpleReader {
    method __construct (line 568) | function __construct(&$stream) {
    method unserialize (line 572) | public function &unserialize($tag = NULL) {
    method readDate (line 581) | public function readDate($includeTag = false) {
    method readTime (line 590) | public function readTime($includeTag = false) {
    method readBytes (line 599) | public function readBytes($includeTag = false) {
    method readString (line 608) | public function readString($includeTag = false) {
    method readGuid (line 617) | public function readGuid($includeTag = false) {
    method readList (line 626) | public function &readList($includeTag = false) {
    method readMap (line 635) | public function &readMap($includeTag = false) {
    method readObject (line 644) | public function readObject($includeTag = false) {
    method readRef (line 657) | private function &readRef() {
    method reset (line 667) | public function reset() {

FILE: ThinkPHP/Library/Vendor/Hprose/HproseTags.php
  class HproseTags (line 23) | class HproseTags {

FILE: ThinkPHP/Library/Vendor/Hprose/HproseWriter.php
  class HproseSimpleWriter (line 27) | class HproseSimpleWriter {
    method __construct (line 31) | function __construct(&$stream) {
    method serialize (line 36) | public function serialize(&$var) {
    method writeInteger (line 91) | public function writeInteger($integer) {
    method writeLong (line 99) | public function writeLong($long) {
    method writeDouble (line 107) | public function writeDouble($double) {
    method writeNaN (line 118) | public function writeNaN() {
    method writeInfinity (line 121) | public function writeInfinity($positive = true) {
    method writeNull (line 124) | public function writeNull() {
    method writeEmpty (line 127) | public function writeEmpty() {
    method writeBoolean (line 130) | public function writeBoolean($bool) {
    method writeDate (line 133) | public function writeDate($date, $checkRef = false) {
    method writeTime (line 141) | public function writeTime($time, $checkRef = false) {
    method writeBytes (line 149) | public function writeBytes($bytes, $checkRef = false) {
    method writeUTF8Char (line 155) | public function writeUTF8Char($char) {
    method writeString (line 158) | public function writeString($str, $checkRef = false) {
    method writeList (line 164) | public function writeList(&$list, $checkRef = false) {
    method writeMap (line 174) | public function writeMap(&$map, $checkRef = false) {
    method writeStdObject (line 185) | public function writeStdObject($obj, $checkRef = false) {
    method writeObjectBegin (line 189) | protected function writeObjectBegin($obj) {
    method writeObjectEnd (line 201) | protected function writeObjectEnd($obj, $index) {
    method writeObject (line 211) | public function writeObject($obj, $checkRef = false) {
    method writeClass (line 214) | protected function writeClass($alias, $fields) {
    method reset (line 234) | public function reset() {
  class HproseWriter (line 239) | class HproseWriter extends HproseSimpleWriter {
    method __construct (line 242) | function __construct(&$stream) {
    method writeRef (line 247) | private function writeRef(&$obj, $checkRef, $writeBegin, $writeEnd) {
    method writeDate (line 271) | public function writeDate($date, $checkRef = false) {
    method writeTime (line 274) | public function writeTime($time, $checkRef = false) {
    method writeBytes (line 277) | public function writeBytes($bytes, $checkRef = false) {
    method writeString (line 280) | public function writeString($str, $checkRef = false) {
    method writeList (line 283) | public function writeList(&$list, $checkRef = false) {
    method writeMap (line 286) | public function writeMap(&$map, $checkRef = false) {
    method writeStdObject (line 289) | public function writeStdObject($obj, $checkRef = false) {
    method writeObject (line 292) | public function writeObject($obj, $checkRef = false) {
    method reset (line 295) | public function reset() {

FILE: ThinkPHP/Library/Vendor/SmartTemplate/class.smarttemplate.php
  class SmartTemplate (line 31) | class SmartTemplate
    method SmartTemplate (line 120) | function SmartTemplate ( $template_filename = '' )
    method set_templatefile (line 145) | function set_templatefile ($template_filename)	{	$this->tpl_file  =  $...
    method add_value (line 146) | function add_value ($name, $value )				{	$this->assign($name, $value);	}
    method add_array (line 147) | function add_array ($name, $value )				{	$this->append($name, $value);	}
    method assign (line 165) | function assign ( $name, $value = '' )
    method append (line 193) | function append ( $name, $value )
    method result (line 215) | function result ( $_top = '' )
    method output (line 233) | function output ( $_top = '' )
    method debug (line 309) | function debug ( $_top = '' )
    method use_cache (line 339) | function use_cache ( $key = '' )
    method cache_callback (line 364) | function cache_callback ( $output )
    method mtime (line 383) | function mtime ( $filename )

FILE: ThinkPHP/Library/Vendor/SmartTemplate/class.smarttemplatedebugger.php
  class SmartTemplateDebugger (line 13) | class SmartTemplateDebugger
    method SmartTemplateDebugger (line 34) | function SmartTemplateDebugger ( $template_filename )
    method start (line 61) | function start ( $vars )
    method toggleview (line 341) | function toggleview ( $suffix = '')
    method tip (line 361) | function tip ( $value )
    method vardump (line 384) | function vardump($var, $depth = 0)
    method var_name (line 411) | function var_name($tag)
    method highlight_html (line 445) | function highlight_html ( $code )

FILE: ThinkPHP/Library/Vendor/SmartTemplate/class.smarttemplateparser.php
  class SmartTemplateParser (line 13) | class SmartTemplateParser
    method SmartTemplateParser (line 48) | function SmartTemplateParser ( $template_filename )
    method compile (line 77) | function compile( $compiled_template_filename = '' )
    method var_name (line 288) | function var_name($tag)
    method cmd_name (line 336) | function cmd_name($tag)
    method count_subtemplates (line 357) | function count_subtemplates()

FILE: ThinkPHP/Library/Vendor/Smarty/Smarty.class.php
  class Smarty (line 101) | class Smarty extends Smarty_Internal_TemplateBase {
    method __construct (line 582) | public function __construct()
    method __destruct (line 607) | public function __destruct()
    method __clone (line 615) | public function __clone()
    method __get (line 630) | public function __get($name)
    method __set (line 656) | public function __set($name, $value)
    method templateExists (line 679) | public function templateExists($resource_name)
    method getGlobal (line 697) | public function getGlobal($varname = null)
    method clearAllCache (line 721) | function clearAllCache($exp_time = null, $type = null)
    method clearCache (line 739) | public function clearCache($template_name, $cache_id = null, $compile_...
    method enableSecurity (line 754) | public function enableSecurity($security_class = null)
    method disableSecurity (line 780) | public function disableSecurity()
    method setTemplateDir (line 793) | public function setTemplateDir($template_dir)
    method addTemplateDir (line 812) | public function addTemplateDir($template_dir, $key=null)
    method getTemplateDir (line 844) | public function getTemplateDir($index=null)
    method setConfigDir (line 859) | public function setConfigDir($config_dir)
    method addConfigDir (line 877) | public function addConfigDir($config_dir, $key=null)
    method getConfigDir (line 910) | public function getConfigDir($index=null)
    method setPluginsDir (line 925) | public function setPluginsDir($plugins_dir)
    method addPluginsDir (line 942) | public function addPluginsDir($plugins_dir)
    method getPluginsDir (line 971) | public function getPluginsDir()
    method setCompileDir (line 982) | public function setCompileDir($compile_dir)
    method getCompileDir (line 996) | public function getCompileDir()
    method setCacheDir (line 1007) | public function setCacheDir($cache_dir)
    method getCacheDir (line 1021) | public function getCacheDir()
    method setDefaultModifiers (line 1032) | public function setDefaultModifiers($modifiers)
    method addDefaultModifiers (line 1044) | public function addDefaultModifiers($modifiers)
    method getDefaultModifiers (line 1060) | public function getDefaultModifiers()
    method setAutoloadFilters (line 1073) | public function setAutoloadFilters($filters, $type=null)
    method addAutoloadFilters (line 1091) | public function addAutoloadFilters($filters, $type=null)
    method getAutoloadFilters (line 1118) | public function getAutoloadFilters($type=null)
    method getDebugTemplate (line 1132) | public function getDebugTemplate()
    method setDebugTemplate (line 1144) | public function setDebugTemplate($tpl_name)
    method createTemplate (line 1164) | public function createTemplate($template, $cache_id = null, $compile_i...
    method loadPlugin (line 1230) | public function loadPlugin($plugin_name, $check = true)
    method compileAllTemplates (line 1290) | public function compileAllTemplates($extention = '.tpl', $force_compil...
    method compileAllConfig (line 1304) | public function compileAllConfig($extention = '.conf', $force_compile ...
    method clearCompiledTemplate (line 1317) | public function clearCompiledTemplate($resource_name = null, $compile_...
    method getTags (line 1329) | public function getTags(Smarty_Internal_Template $template)
    method testInstall (line 1340) | public function testInstall(&$errors=null)
    method mutingErrorHandler (line 1352) | public static function mutingErrorHandler($errno, $errstr, $errfile, $...
    method muteExpectedErrors (line 1397) | public static function muteExpectedErrors()
    method unmuteExpectedErrors (line 1429) | public static function unmuteExpectedErrors()
  class SmartyException (line 1439) | class SmartyException extends Exception {
  class SmartyCompilerException (line 1446) | class SmartyCompilerException extends SmartyException  {
  function smartyAutoload (line 1452) | function smartyAutoload($class)

FILE: ThinkPHP/Library/Vendor/Smarty/SmartyBC.class.php
  class SmartyBC (line 42) | class SmartyBC extends Smarty {
    method __construct (line 55) | public function __construct(array $options=array())
    method assign_by_ref (line 68) | public function assign_by_ref($tpl_var, &$value)
    method append_by_ref (line 80) | public function append_by_ref($tpl_var, &$value, $merge = false)
    method clear_assign (line 90) | public function clear_assign($tpl_var)
    method register_function (line 103) | public function register_function($function, $function_impl, $cacheabl...
    method unregister_function (line 113) | public function unregister_function($function)
    method register_object (line 127) | public function register_object($object, $object_impl, $allowed = arra...
    method unregister_object (line 139) | public function unregister_object($object)
    method register_block (line 152) | public function register_block($block, $block_impl, $cacheable=true, $...
    method unregister_block (line 162) | public function unregister_block($block)
    method register_compiler_function (line 174) | public function register_compiler_function($function, $function_impl, ...
    method unregister_compiler_function (line 184) | public function unregister_compiler_function($function)
    method register_modifier (line 195) | public function register_modifier($modifier, $modifier_impl)
    method unregister_modifier (line 205) | public function unregister_modifier($modifier)
    method register_resource (line 216) | public function register_resource($type, $functions)
    method unregister_resource (line 226) | public function unregister_resource($type)
    method register_prefilter (line 237) | public function register_prefilter($function)
    method unregister_prefilter (line 247) | public function unregister_prefilter($function)
    method register_postfilter (line 258) | public function register_postfilter($function)
    method unregister_postfilter (line 268) | public function unregister_postfilter($function)
    method register_outputfilter (line 279) | public function register_outputfilter($function)
    method unregister_outputfilter (line 289) | public function unregister_outputfilter($function)
    method load_filter (line 300) | public function load_filter($type, $name)
    method clear_cache (line 314) | public function clear_cache($tpl_file = null, $cache_id = null, $compi...
    method clear_all_cache (line 325) | public function clear_all_cache($exp_time = null)
    method is_cached (line 338) | public function is_cached($tpl_file, $cache_id = null, $compile_id = n...
    method clear_all_assign (line 346) | public function clear_all_assign()
    method clear_compiled_tpl (line 361) | public function clear_compiled_tpl($tpl_file = null, $compile_id = nul...
    method template_exists (line 372) | public function template_exists($tpl_file)
    method get_template_vars (line 383) | public function get_template_vars($name=null)
    method get_config_vars (line 394) | public function get_config_vars($name=null)
    method config_load (line 406) | public function config_load($file, $section = null, $scope = 'global')
    method get_registered_object (line 417) | public function get_registered_object($name)
    method clear_config (line 427) | public function clear_config($var = null)
    method trigger_error (line 438) | public function trigger_error($error_msg, $error_type = E_USER_WARNING)
  function smarty_php_tag (line 454) | function smarty_php_tag($params, $content, $template, &$repeat)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/block.textformat.php
  function smarty_block_textformat (line 35) | function smarty_block_textformat($params, $content, $template, &$repeat)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.counter.php
  function smarty_function_counter (line 22) | function smarty_function_counter($params, $template)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.cycle.php
  function smarty_function_cycle (line 46) | function smarty_function_cycle($params, $template)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.fetch.php
  function smarty_function_fetch (line 23) | function smarty_function_fetch($params, $template)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.html_checkboxes.php
  function smarty_function_html_checkboxes (line 45) | function smarty_function_html_checkboxes($params, $template)
  function smarty_function_html_checkboxes_output (line 153) | function smarty_function_html_checkboxes_output($name, $value, $output, ...

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.html_image.php
  function smarty_function_html_image (line 37) | function smarty_function_html_image($params, $template)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.html_options.php
  function smarty_function_html_options (line 36) | function smarty_function_html_options($params, $template)
  function smarty_function_html_options_optoutput (line 132) | function smarty_function_html_options_optoutput($key, $value, $selected,...
  function smarty_function_html_options_optgroup (line 164) | function smarty_function_html_options_optgroup($key, $values, $selected,...

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.html_radios.php
  function smarty_function_html_radios (line 45) | function smarty_function_html_radios($params, $template)
  function smarty_function_html_radios_output (line 140) | function smarty_function_html_radios_output($name, $value, $output, $sel...

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.html_select_date.php
  function smarty_function_html_select_date (line 54) | function smarty_function_html_select_date($params, $template)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.html_select_time.php
  function smarty_function_html_select_time (line 34) | function smarty_function_html_select_time($params, $template)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.html_table.php
  function smarty_function_html_table (line 50) | function smarty_function_html_table($params, $template)
  function smarty_function_html_table_cycle (line 166) | function smarty_function_html_table_cycle($name, $var, $no)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.mailto.php
  function smarty_function_mailto (line 51) | function smarty_function_mailto($params, $template)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/function.math.php
  function smarty_function_math (line 24) | function smarty_function_math($params, $template)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifier.capitalize.php
  function smarty_modifier_capitalize (line 25) | function smarty_modifier_capitalize($string, $uc_digits = false, $lc_res...

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifier.date_format.php
  function smarty_modifier_date_format (line 29) | function smarty_modifier_date_format($string, $format = SMARTY_RESOURCE_...

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifier.debug_print_var.php
  function smarty_modifier_debug_print_var (line 22) | function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifier.escape.php
  function smarty_modifier_escape (line 24) | function smarty_modifier_escape($string, $esc_type = 'html', $char_set =...

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifier.regex_replace.php
  function smarty_modifier_regex_replace (line 24) | function smarty_modifier_regex_replace($string, $search, $replace)
  function _smarty_regex_replace_check (line 41) | function _smarty_regex_replace_check($search)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifier.replace.php
  function smarty_modifier_replace (line 23) | function smarty_modifier_replace($string, $search, $replace)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifier.spacify.php
  function smarty_modifier_spacify (line 21) | function smarty_modifier_spacify($string, $spacify_char = ' ')

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifier.truncate.php
  function smarty_modifier_truncate (line 27) | function smarty_modifier_truncate($string, $length = 80, $etc = '...', $...

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.cat.php
  function smarty_modifiercompiler_cat (line 25) | function smarty_modifiercompiler_cat($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.count_characters.php
  function smarty_modifiercompiler_count_characters (line 21) | function smarty_modifiercompiler_count_characters($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.count_paragraphs.php
  function smarty_modifiercompiler_count_paragraphs (line 22) | function smarty_modifiercompiler_count_paragraphs($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.count_sentences.php
  function smarty_modifiercompiler_count_sentences (line 22) | function smarty_modifiercompiler_count_sentences($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.count_words.php
  function smarty_modifiercompiler_count_words (line 21) | function smarty_modifiercompiler_count_words($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.default.php
  function smarty_modifiercompiler_default (line 21) | function smarty_modifiercompiler_default ($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.escape.php
  function smarty_modifiercompiler_escape (line 26) | function smarty_modifiercompiler_escape($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.from_charset.php
  function smarty_modifiercompiler_from_charset (line 20) | function smarty_modifiercompiler_from_charset($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.indent.php
  function smarty_modifiercompiler_indent (line 21) | function smarty_modifiercompiler_indent($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.lower.php
  function smarty_modifiercompiler_lower (line 22) | function smarty_modifiercompiler_lower($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.noprint.php
  function smarty_modifiercompiler_noprint (line 20) | function smarty_modifiercompiler_noprint($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.string_format.php
  function smarty_modifiercompiler_string_format (line 21) | function smarty_modifiercompiler_string_format($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.strip.php
  function smarty_modifiercompiler_strip (line 25) | function smarty_modifiercompiler_strip($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.strip_tags.php
  function smarty_modifiercompiler_strip_tags (line 21) | function smarty_modifiercompiler_strip_tags($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.to_charset.php
  function smarty_modifiercompiler_to_charset (line 20) | function smarty_modifiercompiler_to_charset($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.unescape.php
  function smarty_modifiercompiler_unescape (line 20) | function smarty_modifiercompiler_unescape($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.upper.php
  function smarty_modifiercompiler_upper (line 21) | function smarty_modifiercompiler_upper($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.wordwrap.php
  function smarty_modifiercompiler_wordwrap (line 21) | function smarty_modifiercompiler_wordwrap($params, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/outputfilter.trimwhitespace.php
  function smarty_outputfilter_trimwhitespace (line 19) | function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Tem...

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/shared.escape_special_chars.php
  function smarty_function_escape_special_chars (line 21) | function smarty_function_escape_special_chars($string)
  function smarty_function_escape_special_chars (line 40) | function smarty_function_escape_special_chars($string)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/shared.literal_compiler_param.php
  function smarty_literal_compiler_param (line 19) | function smarty_literal_compiler_param($params, $index, $default=null)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/shared.make_timestamp.php
  function smarty_make_timestamp (line 17) | function smarty_make_timestamp($string)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/shared.mb_str_replace.php
  function smarty_mb_str_replace (line 20) | function smarty_mb_str_replace($search, $replace, $subject, &$count=0)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/shared.mb_unicode.php
  function smarty_mb_to_unicode (line 18) | function smarty_mb_to_unicode($string, $encoding=null) {
  function smarty_mb_from_unicode (line 36) | function smarty_mb_from_unicode($unicode, $encoding=null) {

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/shared.mb_wordwrap.php
  function smarty_mb_wordwrap (line 22) | function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false)

FILE: ThinkPHP/Library/Vendor/Smarty/plugins/variablefilter.htmlspecialchars.php
  function smarty_variablefilter_htmlspecialchars (line 16) | function smarty_variablefilter_htmlspecialchars($source, $smarty)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_cacheresource.php
  class Smarty_CacheResource (line 16) | abstract class Smarty_CacheResource {
    method populate (line 38) | public abstract function populate(Smarty_Template_Cached $cached, Smar...
    method populateTimestamp (line 46) | public abstract function populateTimestamp(Smarty_Template_Cached $cac...
    method process (line 55) | public abstract function process(Smarty_Internal_Template $_template, ...
    method writeCachedContent (line 64) | public abstract function writeCachedContent(Smarty_Internal_Template $...
    method getCachedContent (line 72) | public function getCachedContent(Smarty_Internal_Template $_template)
    method clearAll (line 89) | public abstract function clearAll(Smarty $smarty, $exp_time=null);
    method clear (line 101) | public abstract function clear(Smarty $smarty, $resource_name, $cache_...
    method locked (line 104) | public function locked(Smarty $smarty, Smarty_Template_Cached $cached)
    method hasLock (line 120) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 126) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 132) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method load (line 146) | public static function load(Smarty $smarty, $type = null)
    method invalidLoadedCache (line 187) | public static function invalidLoadedCache(Smarty $smarty)
  class Smarty_Template_Cached (line 207) | class Smarty_Template_Cached {
    method __construct (line 285) | public function __construct(Smarty_Internal_Template $_template)
    method write (line 364) | public function write(Smarty_Internal_Template $_template, $content)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_cacheresource_custom.php
  class Smarty_CacheResource_Custom (line 16) | abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
    method fetch (line 29) | protected abstract function fetch($id, $name, $cache_id, $compile_id, ...
    method fetchTimestamp (line 43) | protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
    method save (line 59) | protected abstract function save($id, $name, $cache_id, $compile_id, $...
    method delete (line 70) | protected abstract function delete($name, $cache_id, $compile_id, $exp...
    method populate (line 79) | public function populate(Smarty_Template_Cached $cached, Smarty_Intern...
    method populateTimestamp (line 94) | public function populateTimestamp(Smarty_Template_Cached $cached)
    method process (line 115) | public function process(Smarty_Internal_Template $_template, Smarty_Te...
    method writeCachedContent (line 147) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method clearAll (line 166) | public function clearAll(Smarty $smarty, $exp_time=null)
    method clear (line 182) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...
    method hasLock (line 195) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 214) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 229) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_cacheresource_keyvaluestore.php
  class Smarty_CacheResource_KeyValueStore (line 34) | abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheRe...
    method populate (line 54) | public function populate(Smarty_Template_Cached $cached, Smarty_Intern...
    method populateTimestamp (line 70) | public function populateTimestamp(Smarty_Template_Cached $cached)
    method process (line 87) | public function process(Smarty_Internal_Template $_template, Smarty_Te...
    method writeCachedContent (line 114) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method clearAll (line 131) | public function clearAll(Smarty $smarty, $exp_time=null)
    method clear (line 154) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...
    method getTemplateUid (line 171) | protected function getTemplateUid(Smarty $smarty, $resource_name, $cac...
    method sanitize (line 200) | protected function sanitize($string)
    method fetch (line 222) | protected function fetch($cid, $resource_name = null, $cache_id = null...
    method addMetaTimestamp (line 246) | protected function addMetaTimestamp(&$content)
    method getMetaTimestamp (line 259) | protected function getMetaTimestamp(&$content)
    method invalidate (line 277) | protected function invalidate($cid = null, $resource_name = null, $cac...
    method getLatestInvalidationTimestamp (line 314) | protected function getLatestInvalidationTimestamp($cid, $resource_name...
    method listInvalidationKeys (line 347) | protected function listInvalidationKeys($cid, $resource_name = null, $...
    method hasLock (line 393) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 406) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 419) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method read (line 432) | protected abstract function read(array $keys);
    method write (line 441) | protected abstract function write(array $keys, $expire=null);
    method delete (line 449) | protected abstract function delete(array $keys);
    method purge (line 456) | protected function purge()

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_config_source.php
  class Smarty_Config_Source (line 22) | class Smarty_Config_Source extends Smarty_Template_Source {
    method __construct (line 34) | public function __construct(Smarty_Resource $handler, Smarty $smarty, ...
    method __set (line 57) | public function __set($property_name, $value)
    method __get (line 77) | public function __get($property_name)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_cacheresource_file.php
  class Smarty_Internal_CacheResource_File (line 19) | class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
    method populate (line 28) | public function populate(Smarty_Template_Cached $cached, Smarty_Intern...
    method populateTimestamp (line 74) | public function populateTimestamp(Smarty_Template_Cached $cached)
    method process (line 87) | public function process(Smarty_Internal_Template $_template, Smarty_Te...
    method writeCachedContent (line 100) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method clearAll (line 117) | public function clearAll(Smarty $smarty, $exp_time = null)
    method clear (line 132) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...
    method hasLock (line 228) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 245) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 257) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_append.php
  class Smarty_Internal_Compile_Append (line 18) | class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Ass...
    method compile (line 28) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_block.php
  class Smarty_Internal_Compile_Block (line 18) | class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
    method compile (line 49) | public function compile($args, $compiler)
    method saveBlockData (line 76) | public static function saveBlockData($block_content, $block_tag, $temp...
    method compileChildBlock (line 128) | public static function compileChildBlock($compiler, $_name = null)
  class Smarty_Internal_Compile_Blockclose (line 199) | class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile...
    method compile (line 208) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_break.php
  class Smarty_Internal_Compile_Break (line 17) | class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase {
    method compile (line 42) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_call.php
  class Smarty_Internal_Compile_Call (line 18) | class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
    method compile (line 50) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_capture.php
  class Smarty_Internal_Compile_Capture (line 18) | class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
    method compile (line 42) | public function compile($args, $compiler)
  class Smarty_Internal_Compile_CaptureClose (line 67) | class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_Compi...
    method compile (line 76) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_config_load.php
  class Smarty_Internal_Compile_Config_Load (line 18) | class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_Compil...
    method compile (line 49) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_continue.php
  class Smarty_Internal_Compile_Continue (line 18) | class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBa...
    method compile (line 43) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_debug.php
  class Smarty_Internal_Compile_Debug (line 19) | class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_eval.php
  class Smarty_Internal_Compile_Eval (line 18) | class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
    method compile (line 49) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_extends.php
  class Smarty_Internal_Compile_Extends (line 19) | class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
    method compile (line 43) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_for.php
  class Smarty_Internal_Compile_For (line 18) | class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
    method compile (line 39) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_foreach.php
  class Smarty_Internal_Compile_Foreach (line 18) | class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
    method compile (line 49) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Foreachelse (line 176) | class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_Compil...
    method compile (line 186) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Foreachclose (line 205) | class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_Compi...
    method compile (line 215) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_function.php
  class Smarty_Internal_Compile_Function (line 18) | class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBa...
    method compile (line 50) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Functionclose (line 100) | class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_Comp...
    method compile (line 110) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_if.php
  class Smarty_Internal_Compile_If (line 18) | class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Else (line 73) | class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase {
    method compile (line 83) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Elseif (line 99) | class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
    method compile (line 109) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Ifclose (line 181) | class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
    method compile (line 191) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_include.php
  class Smarty_Internal_Compile_Include (line 18) | class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
    method compile (line 61) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_include_php.php
  class Smarty_Internal_Compile_Include_Php (line 18) | class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_Compil...
    method compile (line 49) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_insert.php
  class Smarty_Internal_Compile_Insert (line 19) | class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
    method compile (line 50) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_ldelim.php
  class Smarty_Internal_Compile_Ldelim (line 18) | class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_nocache.php
  class Smarty_Internal_Compile_Nocache (line 18) | class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
    method compile (line 29) | public function compile($args, $compiler)
  class Smarty_Internal_Compile_Nocacheclose (line 50) | class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_Compi...
    method compile (line 61) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_private_block_plugin.php
  class Smarty_Internal_Compile_Private_Block_Plugin (line 18) | class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Intern...
    method compile (line 38) | public function compile($args, $compiler, $parameter, $tag, $function)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_private_function_plugin.php
  class Smarty_Internal_Compile_Private_Function_Plugin (line 18) | class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Int...
    method compile (line 45) | public function compile($args, $compiler, $parameter, $tag, $function)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_private_modifier.php
  class Smarty_Internal_Compile_Private_Modifier (line 19) | class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_C...
    method compile (line 29) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_private_object_block_function.php
  class Smarty_Internal_Compile_Private_Object_Block_Function (line 18) | class Smarty_Internal_Compile_Private_Object_Block_Function extends Smar...
    method compile (line 38) | public function compile($args, $compiler, $parameter, $tag, $method)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_private_object_function.php
  class Smarty_Internal_Compile_Private_Object_Function (line 18) | class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Int...
    method compile (line 38) | public function compile($args, $compiler, $parameter, $tag, $method)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_private_print_expression.php
  class Smarty_Internal_Compile_Private_Print_Expression (line 18) | class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_In...
    method compile (line 43) | public function compile($args, $compiler, $parameter)
    method compile_output_filter (line 135) | private function compile_output_filter($compiler, $name, $output)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_private_registered_block.php
  class Smarty_Internal_Compile_Private_Registered_Block (line 18) | class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_In...
    method compile (line 37) | public function compile($args, $compiler, $parameter, $tag)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_private_registered_function.php
  class Smarty_Internal_Compile_Private_Registered_Function (line 18) | class Smarty_Internal_Compile_Private_Registered_Function extends Smarty...
    method compile (line 37) | public function compile($args, $compiler, $parameter, $tag)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_private_special_variable.php
  class Smarty_Internal_Compile_Private_Special_Variable (line 18) | class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_In...
    method compile (line 27) | public function compile($args, $compiler, $parameter)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_rdelim.php
  class Smarty_Internal_Compile_Rdelim (line 17) | class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_section.php
  class Smarty_Internal_Compile_Section (line 18) | class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
    method compile (line 49) | public function compile($args, $compiler)
  class Smarty_Internal_Compile_Sectionelse (line 145) | class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_Compil...
    method compile (line 154) | public function compile($args, $compiler)
  class Smarty_Internal_Compile_Sectionclose (line 173) | class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_Compi...
    method compile (line 182) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_setfilter.php
  class Smarty_Internal_Compile_Setfilter (line 18) | class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileB...
    method compile (line 28) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Setfilterclose (line 45) | class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_Com...
    method compile (line 56) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compile_while.php
  class Smarty_Internal_Compile_While (line 18) | class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
    method compile (line 28) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Whileclose (line 73) | class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_Compile...
    method compile (line 82) | public function compile($args, $compiler)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_compilebase.php
  class Smarty_Internal_CompileBase (line 16) | abstract class Smarty_Internal_CompileBase {
    method getAttributes (line 56) | public function getAttributes($compiler, $attributes)
    method openTag (line 136) | public function openTag($compiler, $openTag, $data = null)
    method closeTag (line 150) | public function closeTag($compiler, $expectedTag)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_config.php
  class Smarty_Internal_Config (line 22) | class Smarty_Internal_Config {
    method __construct (line 78) | public function __construct($config_resource, $smarty, $data = null)
    method getCompiledFilepath (line 90) | public function getCompiledFilepath()
    method buildCompiledFilepath (line 102) | public function buildCompiledFilepath()
    method getCompiledTimestamp (line 128) | public function getCompiledTimestamp()
    method mustCompile (line 142) | public function mustCompile()
    method getCompiledConfig (line 156) | public function getCompiledConfig()
    method compileConfigSource (line 174) | public function compileConfigSource()
    method loadConfigVars (line 208) | public function loadConfigVars($sections = null, $scope = 'local')
    method __set (line 265) | public function __set($property_name, $value)
    method __get (line 283) | public function __get($property_name)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_config_file_compiler.php
  class Smarty_Internal_Config_File_Compiler (line 19) | class Smarty_Internal_Config_File_Compiler {
    method __construct (line 61) | public function __construct($smarty)
    method compileSource (line 74) | public function compileSource(Smarty_Internal_Config $config)
    method trigger_config_file_error (line 110) | public function trigger_config_file_error($args = null)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_configfilelexer.php
  class Smarty_Internal_Configfilelexer (line 13) | class Smarty_Internal_Configfilelexer
    method __construct (line 27) | function __construct($data, $smarty)
    method instance (line 37) | public static function &instance($new_instance = null)
    method yylex (line 50) | function yylex()
    method yypushstate (line 55) | function yypushstate($state)
    method yypopstate (line 61) | function yypopstate()
    method yybegin (line 66) | function yybegin($state)
    method yylex1 (line 74) | function yylex1()
    method yy_r1_1 (line 138) | function yy_r1_1($yy_subpatterns)
    method yy_r1_2 (line 144) | function yy_r1_2($yy_subpatterns)
    method yy_r1_3 (line 150) | function yy_r1_3($yy_subpatterns)
    method yy_r1_4 (line 155) | function yy_r1_4($yy_subpatterns)
    method yy_r1_5 (line 161) | function yy_r1_5($yy_subpatterns)
    method yy_r1_6 (line 166) | function yy_r1_6($yy_subpatterns)
    method yy_r1_7 (line 171) | function yy_r1_7($yy_subpatterns)
    method yylex2 (line 179) | function yylex2()
    method yy_r2_1 (line 245) | function yy_r2_1($yy_subpatterns)
    method yy_r2_2 (line 250) | function yy_r2_2($yy_subpatterns)
    method yy_r2_3 (line 256) | function yy_r2_3($yy_subpatterns)
    method yy_r2_4 (line 262) | function yy_r2_4($yy_subpatterns)
    method yy_r2_5 (line 268) | function yy_r2_5($yy_subpatterns)
    method yy_r2_6 (line 274) | function yy_r2_6($yy_subpatterns)
    method yy_r2_7 (line 280) | function yy_r2_7($yy_subpatterns)
    method yy_r2_8 (line 292) | function yy_r2_8($yy_subpatterns)
    method yy_r2_9 (line 298) | function yy_r2_9($yy_subpatterns)
    method yylex3 (line 308) | function yylex3()
    method yy_r3_1 (line 366) | function yy_r3_1($yy_subpatterns)
    method yylex4 (line 375) | function yylex4()
    method yy_r4_1 (line 435) | function yy_r4_1($yy_subpatterns)
    method yy_r4_2 (line 440) | function yy_r4_2($yy_subpatterns)
    method yy_r4_3 (line 445) | function yy_r4_3($yy_subpatterns)
    method yylex5 (line 454) | function yylex5()
    method yy_r5_1 (line 513) | function yy_r5_1($yy_subpatterns)
    method yy_r5_2 (line 518) | function yy_r5_2($yy_subpatterns)
    method yylex6 (line 526) | function yylex6()
    method yy_r6_1 (line 586) | function yy_r6_1($yy_subpatterns)
    method yy_r6_2 (line 593) | function yy_r6_2($yy_subpatterns)
    method yy_r6_3 (line 598) | function yy_r6_3($yy_subpatterns)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_configfileparser.php
  class TPC_yyToken (line 12) | class TPC_yyToken implements ArrayAccess
    method __construct (line 17) | function __construct($s, $m = array())
    method __toString (line 32) | function __toString()
    method offsetExists (line 37) | function offsetExists($offset)
    method offsetGet (line 42) | function offsetGet($offset)
    method offsetSet (line 47) | function offsetSet($offset, $value)
    method offsetUnset (line 70) | function offsetUnset($offset)
  class TPC_yyStackEntry (line 76) | class TPC_yyStackEntry
  class Smarty_Internal_Configfileparser (line 87) | class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfi...
    method __construct (line 97) | function __construct($lex, $compiler) {
    method instance (line 104) | public static function &instance($new_instance = null)
    method parse_bool (line 112) | private function parse_bool($str) {
    method parse_single_quoted_string (line 123) | private static function parse_single_quoted_string($qstr) {
    method parse_double_quoted_string (line 142) | private static function parse_double_quoted_string($qstr) {
    method parse_tripple_double_quoted_string (line 147) | private static function parse_tripple_double_quoted_string($qstr) {
    method set_var (line 151) | private function set_var(Array $var, Array &$target_array) {
    method add_global_vars (line 163) | private function add_global_vars(Array $vars) {
    method add_section_vars (line 172) | private function add_section_vars($section_name, Array $vars) {
    method Trace (line 281) | static function Trace($TraceFILE, $zTracePrompt)
    method PrintTrace (line 292) | static function PrintTrace()
    method tokenName (line 340) | function tokenName($tokenType)
    method yy_destructor (line 352) | static function yy_destructor($yymajor, $yypminor)
    method yy_pop_parser_stack (line 359) | function yy_pop_parser_stack()
    method __destruct (line 376) | function __destruct()
    method yy_get_expected_tokens (line 386) | function yy_get_expected_tokens($token)
    method yy_is_expected_token (line 454) | function yy_is_expected_token($token)
    method yy_find_shift_action (line 525) | function yy_find_shift_action($iLookAhead)
    method yy_find_reduce_action (line 559) | function yy_find_reduce_action($stateno, $iLookAhead)
    method yy_shift (line 582) | function yy_shift($yyNewState, $yyMajor, $yypMinor)
    method yy_r0 (line 669) | function yy_r0(){
    method yy_r1 (line 674) | function yy_r1(){
    method yy_r4 (line 679) | function yy_r4(){
    method yy_r5 (line 685) | function yy_r5(){
    method yy_r6 (line 693) | function yy_r6(){
    method yy_r7 (line 698) | function yy_r7(){
    method yy_r8 (line 703) | function yy_r8(){
    method yy_r9 (line 708) | function yy_r9(){
    method yy_r10 (line 713) | function yy_r10(){
    method yy_r11 (line 718) | function yy_r11(){
    method yy_r12 (line 723) | function yy_r12(){
    method yy_r13 (line 728) | function yy_r13(){
    method yy_r14 (line 733) | function yy_r14(){
    method yy_r15 (line 738) | function yy_r15(){
    method yy_r16 (line 743) | function yy_r16(){
    method yy_r17 (line 748) | function yy_r17(){
    method yy_r19 (line 753) | function yy_r19(){
    method yy_reduce (line 760) | function yy_reduce($yyruleno)
    method yy_parse_failed (line 801) | function yy_parse_failed()
    method yy_syntax_error (line 811) | function yy_syntax_error($yymajor, $TOKEN)
    method yy_accept (line 821) | function yy_accept()
    method doParse (line 838) | function doParse($yymajor, $yytokenvalue)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_data.php
  class Smarty_Internal_Data (line 18) | class Smarty_Internal_Data {
    method assign (line 54) | public function assign($tpl_var, $value = null, $nocache = false)
    method assignGlobal (line 79) | public function assignGlobal($varname, $value = null, $nocache = false)
    method assignByRef (line 95) | public function assignByRef($tpl_var, &$value, $nocache = false)
    method append (line 114) | public function append($tpl_var, $value = null, $merge = false, $nocac...
    method appendByRef (line 174) | public function appendByRef($tpl_var, &$value, $merge = false)
    method getTemplateVars (line 203) | public function getTemplateVars($varname = null, $_ptr = null, $search...
    method clearAssign (line 246) | public function clearAssign($tpl_var)
    method clearAllAssign (line 263) | public function clearAllAssign()
    method configLoad (line 276) | public function configLoad($config_file, $sections = null)
    method getVariable (line 292) | public function getVariable($variable, $_ptr = null, $search_parents =...
    method getConfigVariable (line 325) | public function getConfigVariable($variable, $error_enable = true)
    method getStreamVariable (line 349) | public function getStreamVariable($variable)
    method getConfigVars (line 374) | public function getConfigVars($varname = null, $search_parents = true)
    method clearConfig (line 406) | public function clearConfig($varname = null)
  class Smarty_Data (line 426) | class Smarty_Data extends Smarty_Internal_Data {
    method __construct (line 441) | public function __construct ($_parent = null, $smarty = null)
  class Smarty_Variable (line 467) | class Smarty_Variable {
    method __construct (line 495) | public function __construct($value = null, $nocache = false, $scope = ...
    method __toString (line 507) | public function __toString()
  class Undefined_Smarty_Variable (line 522) | class Undefined_Smarty_Variable {
    method __get (line 530) | public function __get($name)
    method __toString (line 544) | public function __toString()

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_debug.php
  class Smarty_Internal_Debug (line 18) | class Smarty_Internal_Debug extends Smarty_Internal_Data {
    method start_compile (line 32) | public static function start_compile($template)
    method end_compile (line 43) | public static function end_compile($template)
    method start_render (line 54) | public static function start_render($template)
    method end_render (line 65) | public static function end_render($template)
    method start_cache (line 76) | public static function start_cache($template)
    method end_cache (line 87) | public static function end_cache($template)
    method display_debug (line 98) | public static function display_debug($obj)
    method get_debug_vars (line 144) | public static function get_debug_vars($obj)
    method get_key (line 181) | private static function get_key($template)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_filter_handler.php
  class Smarty_Internal_Filter_Handler (line 18) | class Smarty_Internal_Filter_Handler {
    method runFilter (line 33) | public static function runFilter($type, $content, Smarty_Internal_Temp...

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_function_call_handler.php
  class Smarty_Internal_Function_Call_Handler (line 16) | class Smarty_Internal_Function_Call_Handler {
    method call (line 28) | public static function call($_name, Smarty_Internal_Template $_templat...

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_get_include_path.php
  class Smarty_Internal_Get_Include_Path (line 16) | class Smarty_Internal_Get_Include_Path {
    method getIncludePath (line 24) | public static function getIncludePath($filepath)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_nocache_insert.php
  class Smarty_Internal_Nocache_Insert (line 18) | class Smarty_Internal_Nocache_Insert {
    method compile (line 30) | public static function compile($_function, $_attr, $_template, $_scrip...

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_parsetree.php
  class _smarty_parsetree (line 18) | abstract class _smarty_parsetree {
    method to_smarty_php (line 36) | abstract public function to_smarty_php();
  class _smarty_tag (line 47) | class _smarty_tag extends _smarty_parsetree {
    method __construct (line 61) | public function __construct($parser, $data)
    method to_smarty_php (line 73) | public function to_smarty_php()
    method assign_to_var (line 83) | public function assign_to_var()
  class _smarty_code (line 99) | class _smarty_code extends _smarty_parsetree {
    method __construct (line 108) | public function __construct($parser, $data)
    method to_smarty_php (line 119) | public function to_smarty_php()
  class _smarty_doublequoted (line 133) | class _smarty_doublequoted extends _smarty_parsetree {
    method __construct (line 141) | public function __construct($parser, _smarty_parsetree $subtree)
    method append_subtree (line 155) | public function append_subtree(_smarty_parsetree $subtree)
    method to_smarty_php (line 179) | public function to_smarty_php()
  class _smarty_dq_content (line 210) | class _smarty_dq_content extends _smarty_parsetree {
    method __construct (line 219) | public function __construct($parser, $data)
    method to_smarty_php (line 230) | public function to_smarty_php()
  class _smarty_template_buffer (line 244) | class _smarty_template_buffer extends _smarty_parsetree {
    method __construct (line 258) | public function __construct($parser)
    method append_subtree (line 268) | public function append_subtree(_smarty_parsetree $subtree)
    method to_smarty_php (line 278) | public function to_smarty_php()
  class _smarty_text (line 335) | class _smarty_text extends _smarty_parsetree {
    method __construct (line 344) | public function __construct($parser, $data)
    method to_smarty_php (line 355) | public function to_smarty_php()
  class _smarty_linebreak (line 369) | class _smarty_linebreak extends _smarty_parsetree {
    method __construct (line 377) | public function __construct($parser, $data)
    method to_smarty_php (line 388) | public function to_smarty_php()

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_resource_eval.php
  class Smarty_Internal_Resource_Eval (line 21) | class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled {
    method populate (line 30) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 44) | public function getContent(Smarty_Template_Source $source)
    method decode (line 55) | protected function decode($string)
    method buildUniqueResourceName (line 76) | protected function buildUniqueResourceName(Smarty $smarty, $resource_n...
    method getBasename (line 87) | protected function getBasename(Smarty_Template_Source $source)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_resource_extends.php
  class Smarty_Internal_Resource_Extends (line 19) | class Smarty_Internal_Resource_Extends extends Smarty_Resource {
    method populate (line 27) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 60) | public function populateTimestamp(Smarty_Template_Source $source)
    method getContent (line 76) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 141) | public function getBasename(Smarty_Template_Source $source)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_resource_file.php
  class Smarty_Internal_Resource_File (line 19) | class Smarty_Internal_Resource_File extends Smarty_Resource {
    method populate (line 27) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 49) | public function populateTimestamp(Smarty_Template_Source $source)
    method getContent (line 62) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 79) | public function getBasename(Smarty_Template_Source $source)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_resource_php.php
  class Smarty_Internal_Resource_PHP (line 13) | class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
    method __construct (line 24) | public function __construct()
    method populate (line 36) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 59) | public function populateTimestamp(Smarty_Template_Source $source)
    method getContent (line 72) | public function getContent(Smarty_Template_Source $source)
    method renderUncompiled (line 88) | public function renderUncompiled(Smarty_Template_Source $source, Smart...

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_resource_registered.php
  class Smarty_Internal_Resource_Registered (line 20) | class Smarty_Internal_Resource_Registered extends Smarty_Resource {
    method populate (line 29) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 45) | public function populateTimestamp(Smarty_Template_Source $source)
    method getTemplateTimestamp (line 57) | public function getTemplateTimestamp(Smarty_Template_Source $source)
    method getContent (line 72) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 88) | protected function getBasename(Smarty_Template_Source $source)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_resource_stream.php
  class Smarty_Internal_Resource_Stream (line 22) | class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
    method populate (line 31) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 47) | public function getContent(Smarty_Template_Source $source)
    method buildUniqueResourceName (line 70) | protected function buildUniqueResourceName(Smarty $smarty, $resource_n...

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_resource_string.php
  class Smarty_Internal_Resource_String (line 21) | class Smarty_Internal_Resource_String extends Smarty_Resource {
    method populate (line 30) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 44) | public function getContent(Smarty_Template_Source $source)
    method decode (line 55) | protected function decode($string)
    method buildUniqueResourceName (line 76) | protected function buildUniqueResourceName(Smarty $smarty, $resource_n...
    method getBasename (line 89) | protected function getBasename(Smarty_Template_Source $source)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php
  class Smarty_Internal_SmartyTemplateCompiler (line 23) | class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_Tem...
    method __construct (line 74) | public function __construct($lexer_class, $parser_class, $smarty)
    method doCompile (line 89) | protected function doCompile($_content)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_template.php
  class Smarty_Internal_Template (line 22) | class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
    method __construct (line 116) | public function __construct($template_resource, $smarty, $_parent = nu...
    method mustCompile (line 142) | public function mustCompile()
    method compileTemplateSource (line 164) | public function compileTemplateSource()
    method writeCachedContent (line 217) | public function writeCachedContent($content)
    method getSubTemplate (line 245) | public function getSubTemplate($template, $cache_id, $compile_id, $cac...
    method setupInlineSubTemplate (line 301) | public function setupInlineSubTemplate($template, $cache_id, $compile_...
    method createTemplateCodeFrame (line 335) | public function createTemplateCodeFrame($content = '', $cache = false)
    method decodeProperties (line 419) | public function decodeProperties($properties, $cache = false)
    method createLocalArrayVariable (line 480) | public function createLocalArrayVariable($tpl_var, $nocache = false, $...
    method getScope (line 501) | public function &getScope($scope)
    method getScopePointer (line 524) | public function getScopePointer($scope)
    method _count (line 544) | public function _count($value)
    method capture_error (line 572) | public function capture_error()
    method clearCache (line 583) | public function clearCache($exp_time=null)
    method __set (line 595) | public function __set($property_name, $value)
    method __get (line 621) | public function __get($property_name)
    method __destruct (line 675) | public function __destruct()

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_templatebase.php
  class Smarty_Internal_TemplateBase (line 18) | abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
    method fetch (line 32) | public function fetch($template = null, $cache_id = null, $compile_id ...
    method display (line 359) | public function display($template = null, $cache_id = null, $compile_i...
    method isCached (line 374) | public function isCached($template = null, $cache_id = null, $compile_...
    method createData (line 395) | public function createData($parent = null)
    method registerPlugin (line 410) | public function registerPlugin($type, $tag, $callback, $cacheable = tr...
    method unregisterPlugin (line 427) | public function unregisterPlugin($type, $tag)
    method registerResource (line 440) | public function registerResource($type, $callback)
    method unregisterResource (line 450) | public function unregisterResource($type)
    method registerCacheResource (line 463) | public function registerCacheResource($type, Smarty_CacheResource $cal...
    method unregisterCacheResource (line 473) | public function unregisterCacheResource($type)
    method registerObject (line 491) | public function registerObject($object_name, $object_impl, $allowed = ...
    method getRegisteredObject (line 521) | public function getRegisteredObject($name)
    method unregisterObject (line 538) | public function unregisterObject($name)
    method registerClass (line 551) | public function registerClass($class_name, $class_impl)
    method registerDefaultPluginHandler (line 567) | public function registerDefaultPluginHandler($callback)
    method registerDefaultTemplateHandler (line 582) | public function registerDefaultTemplateHandler($callback)
    method registerDefaultConfigHandler (line 597) | public function registerDefaultConfigHandler($callback)
    method registerFilter (line 612) | public function registerFilter($type, $callback)
    method unregisterFilter (line 623) | public function unregisterFilter($type, $callback)
    method _get_filter_name (line 636) | public function _get_filter_name($function_name)
    method loadFilter (line 654) | public function loadFilter($type, $name)
    method unloadFilter (line 678) | public function unloadFilter($type, $name)
    method replaceCamelcase (line 695) | private function replaceCamelcase($match) {
    method __call (line 705) | public function __call($name, $args)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_templatecompilerbase.php
  class Smarty_Internal_TemplateCompilerBase (line 18) | abstract class Smarty_Internal_TemplateCompilerBase {
    method __construct (line 119) | public function __construct()
    method compileTemplate (line 130) | public function compileTemplate(Smarty_Internal_Template $template)
    method compileTag (line 207) | public function compileTag($tag, $args, $parameter = array())
    method callTagCompiler (line 420) | public function callTagCompiler($tag, $args, $param1 = null, $param2 =...
    method getPlugin (line 449) | public function getPlugin($plugin_name, $plugin_type)
    method getPluginFromDefaultHandler (line 504) | public function getPluginFromDefaultHandler($tag, $plugin_type)
    method processNocacheCode (line 551) | public function processNocacheCode($content, $is_code)
    method trigger_template_error (line 593) | public function trigger_template_error($args = null, $line = null)

FILE: ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_templatelexer.php
  class Smarty_Internal_Templatelexer (line 13) | class Smarty_Internal_Templatelexer
    method __construct (line 79) | function __construct($data,$compiler)
    method yylex (line 99) | function yylex()
    method yypushstate (line 104) | function yypushstate($state)
    method yypopstate (line 110) | function yypopstate()
    method yybegin (line 115) | function yybegin($state)
    method yylex1 (line 122) | function yylex1()
    method yy_r1_1 (line 203) | function yy_r1_1($yy_subpatterns)
    method yy_r1_2 (line 208) | function yy_r1_2($yy_subpatterns)
    method yy_r1_3 (line 213) | function yy_r1_3($yy_subpatterns)
    method yy_r1_5 (line 218) | function yy_r1_5($yy_subpatterns)
    method yy_r1_6 (line 227) | function yy_r1_6($yy_subpatterns)
    method yy_r1_7 (line 233) | function yy_r1_7($yy_subpatterns)
    method yy_r1_8 (line 243) | function yy_r1_8($yy_subpatterns)
    method yy_r1_9 (line 249) | function yy_r1_9($yy_subpatterns)
    method yy_r1_10 (line 259) | function yy_r1_10($yy_subpatterns)
    method yy_r1_11 (line 265) | function yy_r1_11($yy_subpatterns)
    method yy_r1_12 (line 276) | function yy_r1_12($yy_subpatterns)
    method yy_r1_14 (line 287) | function yy_r1_14($yy_subpatterns)
    method yy_r1_15 (line 298) | function yy_r1_15($yy_subpatterns)
    method yy_r1_16 (line 309) | function yy_r1_16($yy_subpatterns)
    method yy_r1_17 (line 320) | function yy_r1_17($yy_subpatterns)
    method yy_r1_18 (line 331) | function yy_r1_18($yy_subpatterns)
    method yy_r1_19 (line 338) | function yy_r1_19($yy_subpatterns)
    method yy_r1_20 (line 345) | function yy_r1_20($yy_subpatterns)
    method yy_r1_21 (line 357) | function yy_r1_21($yy_subpatterns)
    method yy_r1_22 (line 362) | function yy_r1_22($yy_subpatterns)
    method yy_r1_23 (line 367) | function yy_r1_23($yy_subpatterns)
    method yy_r1_24 (line 372) | function yy_r1_24($yy_subpatterns)
    method yy_r1_27 (line 377) | function yy_r1_27($yy_subpatterns)
    method yy_r1_28 (line 382) | function yy_r1_28($yy_subpatterns)
    method yylex2 (line 389) | function yylex2()
    method yy_r2_1 (line 513) | function yy_r2_1($yy_subpatterns)
    method yy_r2_2 (line 518) | function yy_r2_2($yy_subpatterns)
    method yy_r2_3 (line 529) | function yy_r2_3($yy_subpatterns)
    method yy_r2_5 (line 540) | function yy_r2_5($yy_subpatterns)
    method yy_r2_6 (line 551) | function yy_r2_6($yy_subpatterns)
    method yy_r2_7 (line 562) | functio
Condensed preview — 382 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,256K chars).
[
  {
    "path": ".gitignore",
    "chars": 16,
    "preview": "/Runtime/\n/php/\n"
  },
  {
    "path": ".htaccess",
    "chars": 203,
    "preview": "<IfModule mod_rewrite.c>\n  Options +FollowSymlinks\n  RewriteEngine On\n\n  RewriteCond %{REQUEST_FILENAME} !-d\n  RewriteCo"
  },
  {
    "path": "Application/Common/Common/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Application/Common/Conf/config.php",
    "chars": 38,
    "preview": "<?php\nreturn array(\n\t//'配置项'=>'配置值'\n);"
  },
  {
    "path": "Application/Common/Conf/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Application/Common/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Application/Home/Common/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Application/Home/Conf/config.php",
    "chars": 38,
    "preview": "<?php\nreturn array(\n\t//'配置项'=>'配置值'\n);"
  },
  {
    "path": "Application/Home/Conf/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Application/Home/Controller/IndexController.class.php",
    "chars": 9095,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "Application/Home/Controller/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Application/Home/Model/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Application/Home/View/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Application/Home/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Application/README.md",
    "chars": 5,
    "preview": "项目目录"
  },
  {
    "path": "Application/index.html",
    "chars": 1,
    "preview": " "
  },
  {
    "path": "Public/README.md",
    "chars": 7,
    "preview": "资源文件目录"
  },
  {
    "path": "ThinkPHP/Common/functions.php",
    "chars": 48075,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Conf/convention.php",
    "chars": 8473,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Conf/debug.php",
    "chars": 1266,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/LICENSE.txt",
    "chars": 1270,
    "preview": "\nThinkPHP遵循Apache2开源协议发布,并提供免费使用。\n版权所有Copyright © 2006-2014 by ThinkPHP (http://thinkphp.cn)\nAll rights reserved。\nThinkP"
  },
  {
    "path": "ThinkPHP/Lang/en-us.php",
    "chars": 2742,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Lang/pt-br.php",
    "chars": 2843,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Lang/zh-cn.php",
    "chars": 2112,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Lang/zh-tw.php",
    "chars": 2119,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/AgentCheckBehavior.class.php",
    "chars": 1016,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/BorisBehavior.class.php",
    "chars": 2286,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/BrowserCheckBehavior.class.php",
    "chars": 1442,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/BuildLiteBehavior.class.php",
    "chars": 3569,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/CheckActionRouteBehavior.class.php",
    "chars": 7471,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/CheckLangBehavior.class.php",
    "chars": 2616,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/ChromeShowPageTraceBehavior.class.php",
    "chars": 16865,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/ContentReplaceBehavior.class.php",
    "chars": 1728,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/CronRunBehavior.class.php",
    "chars": 2517,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/FireShowPageTraceBehavior.class.php",
    "chars": 69023,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/ParseTemplateBehavior.class.php",
    "chars": 3563,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/ReadHtmlCacheBehavior.class.php",
    "chars": 5112,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/RobotCheckBehavior.class.php",
    "chars": 1481,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/ShowPageTraceBehavior.class.php",
    "chars": 4973,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/ShowRuntimeBehavior.class.php",
    "chars": 2697,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/TokenBuildBehavior.class.php",
    "chars": 2426,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Behavior/UpgradeNoticeBehavior.class.php",
    "chars": 4683,
    "preview": "<?php\n// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]\n// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.\n"
  },
  {
    "path": "ThinkPHP/Library/Behavior/WriteHtmlCacheBehavior.class.php",
    "chars": 1320,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Com/Wechat.class.php",
    "chars": 12302,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Com/WechatAuth.class.php",
    "chars": 17597,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Com/WechatCrypt.class.php",
    "chars": 4544,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Org/Net/Http.class.php",
    "chars": 8631,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Org/Net/IpLocation.class.php",
    "chars": 7352,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Org/Util/ArrayList.class.php",
    "chars": 5349,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Org/Util/CodeSwitch.class.php",
    "chars": 5699,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Org/Util/Date.class.php",
    "chars": 14223,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Org/Util/Rbac.class.php",
    "chars": 11606,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Org/Util/Stack.class.php",
    "chars": 1301,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Org/Util/String.class.php",
    "chars": 9808,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/App.class.php",
    "chars": 13033,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Auth.class.php",
    "chars": 8596,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Behavior.class.php",
    "chars": 842,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Build.class.php",
    "chars": 6701,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Apachenote.class.php",
    "chars": 3600,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Apc.class.php",
    "chars": 2514,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Db.class.php",
    "chars": 4834,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Eaccelerator.class.php",
    "chars": 2341,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/File.class.php",
    "chars": 5599,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Memcache.class.php",
    "chars": 3345,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Memcached.class.php",
    "chars": 3093,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Memcachesae.class.php",
    "chars": 4432,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Redis.class.php",
    "chars": 3610,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Shmop.class.php",
    "chars": 5537,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Sqlite.class.php",
    "chars": 4097,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Wincache.class.php",
    "chars": 2637,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache/Driver/Xcache.class.php",
    "chars": 2601,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Cache.class.php",
    "chars": 3663,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Controller/HproseController.class.php",
    "chars": 2031,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Controller/JsonRpcController.class.php",
    "chars": 1181,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Controller/RestController.class.php",
    "chars": 8081,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Controller/RpcController.class.php",
    "chars": 1755,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Controller/YarController.class.php",
    "chars": 1275,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Controller.class.php",
    "chars": 9367,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Crypt/Driver/Base64.class.php",
    "chars": 2302,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Crypt/Driver/Crypt.class.php",
    "chars": 2259,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Crypt/Driver/Des.class.php",
    "chars": 18459,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Crypt/Driver/Think.class.php",
    "chars": 2724,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Crypt/Driver/Xxtea.class.php",
    "chars": 3971,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Crypt.class.php",
    "chars": 1634,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db/Driver/Firebird.class.php",
    "chars": 5353,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db/Driver/Mongo.class.php",
    "chars": 27769,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db/Driver/Mysql.class.php",
    "chars": 8374,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db/Driver/Oracle.class.php",
    "chars": 5865,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db/Driver/Pgsql.class.php",
    "chars": 2953,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db/Driver/Sqlite.class.php",
    "chars": 2924,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db/Driver/Sqlsrv.class.php",
    "chars": 5625,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db/Driver.class.php",
    "chars": 39286,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db/Lite.class.php",
    "chars": 14050,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Db.class.php",
    "chars": 5488,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Dispatcher.class.php",
    "chars": 14112,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Exception.class.php",
    "chars": 678,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Hook.class.php",
    "chars": 3678,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Image/Driver/GIF.class.php",
    "chars": 14530,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Image/Driver/Gd.class.php",
    "chars": 15940,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Image/Driver/Imagick.class.php",
    "chars": 17232,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Image.class.php",
    "chars": 5538,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Log/Driver/File.class.php",
    "chars": 1818,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Log/Driver/Sae.class.php",
    "chars": 1698,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Log.class.php",
    "chars": 3482,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Model/AdvModel.class.php",
    "chars": 18509,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Model/MergeModel.class.php",
    "chars": 12713,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Model/MongoModel.class.php",
    "chars": 12233,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Model/RelationModel.class.php",
    "chars": 21608,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Model/ViewModel.class.php",
    "chars": 9004,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Model.class.php",
    "chars": 61393,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Page.class.php",
    "chars": 5274,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Route.class.php",
    "chars": 12281,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Session/Driver/Db.class.php",
    "chars": 5772,
    "preview": "<?php \n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THIN"
  },
  {
    "path": "ThinkPHP/Library/Think/Session/Driver/Memcache.class.php",
    "chars": 2045,
    "preview": "<?php\nnamespace Think\\Session\\Driver;\n\nclass Memcache {\n\tprotected $lifeTime     = 3600;\n\tprotected $sessionName  = '';\n"
  },
  {
    "path": "ThinkPHP/Library/Think/Session/Driver/Mysqli.class.php",
    "chars": 6131,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Storage/Driver/File.class.php",
    "chars": 3347,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Storage/Driver/Sae.class.php",
    "chars": 5764,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Storage.class.php",
    "chars": 1295,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | TOPThink [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Template/Driver/Ease.class.php",
    "chars": 1508,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Template/Driver/Lite.class.php",
    "chars": 1439,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Template/Driver/Mobile.class.php",
    "chars": 1030,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Template/Driver/Smart.class.php",
    "chars": 1485,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Template/Driver/Smarty.class.php",
    "chars": 1468,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Template/TagLib/Cx.class.php",
    "chars": 21306,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Template/TagLib/Html.class.php",
    "chars": 24920,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Template/TagLib.class.php",
    "chars": 8703,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Template.class.php",
    "chars": 25998,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Think.class.php",
    "chars": 11344,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Bcs/bcs.class.php",
    "chars": 45627,
    "preview": "<?php\nnamespace Think\\Upload\\Driver\\Bcs;\nuse Think\\Upload\\Driver\\Bcs\\BCS_MimeTypes;\nuse Think\\Upload\\Driver\\Bcs\\BCS_Requ"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Bcs/mimetypes.class.php",
    "chars": 6744,
    "preview": "<?php\nnamespace Think\\Upload\\Driver\\Bcs;\nclass BCS_MimeTypes {\n\tpublic static $mime_types = array (\n\t\t\t'3gp' => 'video/3"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Bcs/requestcore.class.php",
    "chars": 29735,
    "preview": "<?php\nnamespace Think\\Upload\\Driver\\Bcs;\n\n/**\n * Handles all HTTP requests using cURL and manages the responses.\n *\n * @"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Bcs.class.php",
    "chars": 7296,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Ftp.class.php",
    "chars": 4154,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Local.class.php",
    "chars": 3052,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Qiniu/QiniuStorage.class.php",
    "chars": 10365,
    "preview": "<?php\n\tnamespace Think\\Upload\\Driver\\Qiniu;\n\n\tclass QiniuStorage {\n\n\t\tpublic $QINIU_RSF_HOST \t= \t'http://rsf.qbox.me';\n\t"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Qiniu.class.php",
    "chars": 2892,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Sae.class.php",
    "chars": 3056,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload/Driver/Upyun.class.php",
    "chars": 6702,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Upload.class.php",
    "chars": 12647,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/Verify.class.php",
    "chars": 11579,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Think/View.class.php",
    "chars": 7042,
    "preview": "<?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/Boris.php",
    "chars": 5090,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\nnamespace Boris;\n\n/**\n * Boris is a tiny REPL for PHP.\n */\n"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/CLIOptionsHandler.php",
    "chars": 1838,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\nnamespace Boris;\n\n/**\n * Processes available command line f"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/ColoredInspector.php",
    "chars": 6842,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\n/**\n * @author Rob Morris <rob@irongaze.com>\n * @author Chr"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/Config.php",
    "chars": 1830,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\nnamespace Boris;\n\n/**\n * Config handles loading configurati"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/DumpInspector.php",
    "chars": 320,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\nnamespace Boris;\n\n/**\n * Passes values through var_dump() t"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/EvalWorker.php",
    "chars": 6245,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\nnamespace Boris;\n\n/**\n * EvalWorker is responsible for eval"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/ExportInspector.php",
    "chars": 290,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\nnamespace Boris;\n\n/**\n * Passes values through var_export()"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/Inspector.php",
    "chars": 365,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\nnamespace Boris;\n\n/**\n * Something that is capable of retur"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/ReadlineClient.php",
    "chars": 2563,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\nnamespace Boris;\n\n/**\n * The Readline client is what the us"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Boris/ShallowParser.php",
    "chars": 6123,
    "preview": "<?php\n\n/* vim: set shiftwidth=2 expandtab softtabstop=2: */\n\nnamespace Boris;\n\n/**\n * The ShallowParser takes whatever i"
  },
  {
    "path": "ThinkPHP/Library/Vendor/EaseTemplate/template.core.php",
    "chars": 24578,
    "preview": "<?php\n/* \n * Edition:\tET080708\n * Desc:\tCore Engine 3 (Memcache/Compile/Replace)\n * File:\ttemplate.core.php\n * Author:\tD"
  },
  {
    "path": "ThinkPHP/Library/Vendor/EaseTemplate/template.ease.php",
    "chars": 851,
    "preview": "<?php\n/* \n * Edition:\tET080708\n * Desc:\tET Template\n * File:\ttemplate.ease.php\n * Author:\tDavid Meng\n * Site:\thttp://www"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseClassManager.php",
    "chars": 2191,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseClient.php",
    "chars": 5220,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseCommon.php",
    "chars": 28910,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseFormatter.php",
    "chars": 1842,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseHttpClient.php",
    "chars": 12771,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseHttpServer.php",
    "chars": 19755,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseIO.php",
    "chars": 1340,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseIOStream.php",
    "chars": 10649,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseReader.php",
    "chars": 24680,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseTags.php",
    "chars": 2151,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Hprose/HproseWriter.php",
    "chars": 11482,
    "preview": "<?php\n/**********************************************************\\\n|                                                    "
  },
  {
    "path": "ThinkPHP/Library/Vendor/README.txt",
    "chars": 9,
    "preview": "第三方类库包目录"
  },
  {
    "path": "ThinkPHP/Library/Vendor/SmartTemplate/class.smarttemplate.php",
    "chars": 8851,
    "preview": "<?php\n\t/**\n\t* SmartTemplate Class\n\t*\n\t* 'Compiles' HTML-Templates to PHP Code\n\t*\n\t*\n\t* Usage Example I:\n\t*\n\t* $page = ne"
  },
  {
    "path": "ThinkPHP/Library/Vendor/SmartTemplate/class.smarttemplatedebugger.php",
    "chars": 12570,
    "preview": "<?php\n\t/**\n\t* SmartTemplateDebugger Class\n\t* Used by SmartTemplate Class\n\t*\n\t* @desc Used by SmartTemplate Class\n\t* @aut"
  },
  {
    "path": "ThinkPHP/Library/Vendor/SmartTemplate/class.smarttemplateparser.php",
    "chars": 10631,
    "preview": "<?php\n\t/**\n\t* SmartTemplateParser Class\n\t* Used by SmartTemplate Class\n\t*\n\t* @desc Used by SmartTemplate Class\n\t* @autho"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/Smarty.class.php",
    "chars": 43453,
    "preview": "<?php\n/**\n* Project:     Smarty: the PHP compiling template engine\n* File:        Smarty.class.php\n* SVN:         $Id: S"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/SmartyBC.class.php",
    "chars": 12497,
    "preview": "<?php\n/**\n * Project:     Smarty: the PHP compiling template engine\n * File:        SmartyBC.class.php\n * SVN:         $"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/debug.tpl",
    "chars": 2863,
    "preview": "{capture name='_smarty_debug' assign=debug_output}\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/block.textformat.php",
    "chars": 3262,
    "preview": "<?php\n/**\n * Smarty plugin to format text blocks\n *\n * @package Smarty\n * @subpackage PluginsBlock\n */\n\n/**\n * Smarty {t"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.counter.php",
    "chars": 1830,
    "preview": "<?php\n/**\n * Smarty plugin\n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {counter} function plugi"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.cycle.php",
    "chars": 3250,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {cycle} function plug"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.fetch.php",
    "chars": 8588,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {fetch} plugin\n *\n * "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.html_checkboxes.php",
    "chars": 7322,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {html_checkboxes} fun"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.html_image.php",
    "chars": 4514,
    "preview": "<?php\n/**\n * Smarty plugin\n * \n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {html_image} functio"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.html_options.php",
    "chars": 6423,
    "preview": "<?php\n/**\n * Smarty plugin\n * \n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {html_options} funct"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.html_radios.php",
    "chars": 6423,
    "preview": "<?php\n/**\n * Smarty plugin\n * \n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {html_radios} functi"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.html_select_date.php",
    "chars": 14568,
    "preview": "<?php\n/**\n * Smarty plugin\n * \n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * @ignore\n */\nrequire_once(SM"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.html_select_time.php",
    "chars": 13249,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * @ignore\n */\nrequire_once(SMA"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.html_table.php",
    "chars": 5423,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {html_table} function"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.mailto.php",
    "chars": 5432,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {mailto} function plu"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/function.math.php",
    "chars": 2903,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * This plugin is only for Smarty2 BC\n * @package Smarty\n * @subpackage PluginsFunction\n *"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifier.capitalize.php",
    "chars": 2677,
    "preview": "<?php\n/**\n * Smarty plugin\n * \n * @package Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty capitalize modifier "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifier.date_format.php",
    "chars": 2146,
    "preview": "<?php\n/**\n * Smarty plugin\n * \n * @package Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty date_format modifier"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifier.debug_print_var.php",
    "chars": 3652,
    "preview": "<?php\n/**\n * Smarty plugin\n * \n * @package Smarty\n * @subpackage Debug\n */\n\n/**\n * Smarty debug_print_var modifier plugi"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifier.escape.php",
    "chars": 5579,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty escape modifier plugi"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifier.regex_replace.php",
    "chars": 1560,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty regex_replace modifie"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifier.replace.php",
    "chars": 912,
    "preview": "<?php\n/**\n * Smarty plugin\n * @package Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty replace modifier plugin\n"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifier.spacify.php",
    "chars": 734,
    "preview": "<?php\n/**\n * Smarty plugin\n * @package Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty spacify modifier plugin\n"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifier.truncate.php",
    "chars": 2237,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifier\n */\n \n/**\n * Smarty truncate modifier pl"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.cat.php",
    "chars": 636,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty cat modifier "
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.count_characters.php",
    "chars": 943,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty count_charact"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.count_paragraphs.php",
    "chars": 672,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty count_paragra"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.count_sentences.php",
    "chars": 724,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty count_sentenc"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.count_words.php",
    "chars": 992,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty count_words m"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.default.php",
    "chars": 785,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty default modif"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.escape.php",
    "chars": 3407,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * @ignore\n */\nrequire_"
  },
  {
    "path": "ThinkPHP/Library/Vendor/Smarty/plugins/modifiercompiler.from_charset.php",
    "chars": 824,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty from_charset "
  }
]

// ... and 182 more files (download for full content)

About this extraction

This page contains the full source code of the Aoiujz/WechatSDK GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 382 files (2.9 MB), approximately 769.7k tokens, and a symbol index with 3233 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!