master a303cd76408c cached
258 files
1.7 MB
488.6k tokens
1839 symbols
1 requests
Download .txt
Showing preview only (1,819K chars total). Download the full file or copy to clipboard to get everything.
Repository: tencentyun/wafer-php-server-demo
Branch: master
Commit: a303cd76408c
Files: 258
Total size: 1.7 MB

Directory structure:
gitextract_q4gz8xoz/

├── .gitignore
├── .htaccess
├── LICENSE
├── README.md
├── application/
│   ├── .htaccess
│   ├── business/
│   │   └── ChatTunnelHandler.php
│   ├── cache/
│   │   ├── .htaccess
│   │   └── index.html
│   ├── config/
│   │   ├── autoload.php
│   │   ├── config.php
│   │   ├── constants.php
│   │   ├── database.php
│   │   ├── doctypes.php
│   │   ├── foreign_chars.php
│   │   ├── hooks.php
│   │   ├── index.html
│   │   ├── memcached.php
│   │   ├── migration.php
│   │   ├── mimes.php
│   │   ├── profiler.php
│   │   ├── routes.php
│   │   ├── smileys.php
│   │   └── user_agents.php
│   ├── controllers/
│   │   ├── Login.php
│   │   ├── Tunnel.php
│   │   ├── User.php
│   │   ├── Welcome.php
│   │   └── index.html
│   ├── core/
│   │   └── index.html
│   ├── helpers/
│   │   ├── general_helper.php
│   │   └── index.html
│   ├── hooks/
│   │   └── index.html
│   ├── index.html
│   ├── language/
│   │   ├── english/
│   │   │   └── index.html
│   │   └── index.html
│   ├── libraries/
│   │   └── index.html
│   ├── logs/
│   │   └── index.html
│   ├── models/
│   │   └── index.html
│   ├── third_party/
│   │   └── index.html
│   └── views/
│       ├── errors/
│       │   ├── cli/
│       │   │   ├── error_404.php
│       │   │   ├── error_db.php
│       │   │   ├── error_exception.php
│       │   │   ├── error_general.php
│       │   │   ├── error_php.php
│       │   │   └── index.html
│       │   ├── html/
│       │   │   ├── error_404.php
│       │   │   ├── error_db.php
│       │   │   ├── error_exception.php
│       │   │   ├── error_general.php
│       │   │   ├── error_php.php
│       │   │   └── index.html
│       │   └── index.html
│       ├── index.html
│       └── welcome_message.php
├── composer.json
├── index.php
├── install_qcloud_sdk.php
└── system/
    ├── .htaccess
    ├── core/
    │   ├── Benchmark.php
    │   ├── CodeIgniter.php
    │   ├── Common.php
    │   ├── Config.php
    │   ├── Controller.php
    │   ├── Exceptions.php
    │   ├── Hooks.php
    │   ├── Input.php
    │   ├── Lang.php
    │   ├── Loader.php
    │   ├── Log.php
    │   ├── Model.php
    │   ├── Output.php
    │   ├── Router.php
    │   ├── Security.php
    │   ├── URI.php
    │   ├── Utf8.php
    │   ├── compat/
    │   │   ├── hash.php
    │   │   ├── index.html
    │   │   ├── mbstring.php
    │   │   ├── password.php
    │   │   └── standard.php
    │   └── index.html
    ├── database/
    │   ├── DB.php
    │   ├── DB_cache.php
    │   ├── DB_driver.php
    │   ├── DB_forge.php
    │   ├── DB_query_builder.php
    │   ├── DB_result.php
    │   ├── DB_utility.php
    │   ├── drivers/
    │   │   ├── cubrid/
    │   │   │   ├── cubrid_driver.php
    │   │   │   ├── cubrid_forge.php
    │   │   │   ├── cubrid_result.php
    │   │   │   ├── cubrid_utility.php
    │   │   │   └── index.html
    │   │   ├── ibase/
    │   │   │   ├── ibase_driver.php
    │   │   │   ├── ibase_forge.php
    │   │   │   ├── ibase_result.php
    │   │   │   ├── ibase_utility.php
    │   │   │   └── index.html
    │   │   ├── index.html
    │   │   ├── mssql/
    │   │   │   ├── index.html
    │   │   │   ├── mssql_driver.php
    │   │   │   ├── mssql_forge.php
    │   │   │   ├── mssql_result.php
    │   │   │   └── mssql_utility.php
    │   │   ├── mysql/
    │   │   │   ├── index.html
    │   │   │   ├── mysql_driver.php
    │   │   │   ├── mysql_forge.php
    │   │   │   ├── mysql_result.php
    │   │   │   └── mysql_utility.php
    │   │   ├── mysqli/
    │   │   │   ├── index.html
    │   │   │   ├── mysqli_driver.php
    │   │   │   ├── mysqli_forge.php
    │   │   │   ├── mysqli_result.php
    │   │   │   └── mysqli_utility.php
    │   │   ├── oci8/
    │   │   │   ├── index.html
    │   │   │   ├── oci8_driver.php
    │   │   │   ├── oci8_forge.php
    │   │   │   ├── oci8_result.php
    │   │   │   └── oci8_utility.php
    │   │   ├── odbc/
    │   │   │   ├── index.html
    │   │   │   ├── odbc_driver.php
    │   │   │   ├── odbc_forge.php
    │   │   │   ├── odbc_result.php
    │   │   │   └── odbc_utility.php
    │   │   ├── pdo/
    │   │   │   ├── index.html
    │   │   │   ├── pdo_driver.php
    │   │   │   ├── pdo_forge.php
    │   │   │   ├── pdo_result.php
    │   │   │   ├── pdo_utility.php
    │   │   │   └── subdrivers/
    │   │   │       ├── index.html
    │   │   │       ├── pdo_4d_driver.php
    │   │   │       ├── pdo_4d_forge.php
    │   │   │       ├── pdo_cubrid_driver.php
    │   │   │       ├── pdo_cubrid_forge.php
    │   │   │       ├── pdo_dblib_driver.php
    │   │   │       ├── pdo_dblib_forge.php
    │   │   │       ├── pdo_firebird_driver.php
    │   │   │       ├── pdo_firebird_forge.php
    │   │   │       ├── pdo_ibm_driver.php
    │   │   │       ├── pdo_ibm_forge.php
    │   │   │       ├── pdo_informix_driver.php
    │   │   │       ├── pdo_informix_forge.php
    │   │   │       ├── pdo_mysql_driver.php
    │   │   │       ├── pdo_mysql_forge.php
    │   │   │       ├── pdo_oci_driver.php
    │   │   │       ├── pdo_oci_forge.php
    │   │   │       ├── pdo_odbc_driver.php
    │   │   │       ├── pdo_odbc_forge.php
    │   │   │       ├── pdo_pgsql_driver.php
    │   │   │       ├── pdo_pgsql_forge.php
    │   │   │       ├── pdo_sqlite_driver.php
    │   │   │       ├── pdo_sqlite_forge.php
    │   │   │       ├── pdo_sqlsrv_driver.php
    │   │   │       └── pdo_sqlsrv_forge.php
    │   │   ├── postgre/
    │   │   │   ├── index.html
    │   │   │   ├── postgre_driver.php
    │   │   │   ├── postgre_forge.php
    │   │   │   ├── postgre_result.php
    │   │   │   └── postgre_utility.php
    │   │   ├── sqlite/
    │   │   │   ├── index.html
    │   │   │   ├── sqlite_driver.php
    │   │   │   ├── sqlite_forge.php
    │   │   │   ├── sqlite_result.php
    │   │   │   └── sqlite_utility.php
    │   │   ├── sqlite3/
    │   │   │   ├── index.html
    │   │   │   ├── sqlite3_driver.php
    │   │   │   ├── sqlite3_forge.php
    │   │   │   ├── sqlite3_result.php
    │   │   │   └── sqlite3_utility.php
    │   │   └── sqlsrv/
    │   │       ├── index.html
    │   │       ├── sqlsrv_driver.php
    │   │       ├── sqlsrv_forge.php
    │   │       ├── sqlsrv_result.php
    │   │       └── sqlsrv_utility.php
    │   └── index.html
    ├── fonts/
    │   └── index.html
    ├── helpers/
    │   ├── array_helper.php
    │   ├── captcha_helper.php
    │   ├── cookie_helper.php
    │   ├── date_helper.php
    │   ├── directory_helper.php
    │   ├── download_helper.php
    │   ├── email_helper.php
    │   ├── file_helper.php
    │   ├── form_helper.php
    │   ├── html_helper.php
    │   ├── index.html
    │   ├── inflector_helper.php
    │   ├── language_helper.php
    │   ├── number_helper.php
    │   ├── path_helper.php
    │   ├── security_helper.php
    │   ├── smiley_helper.php
    │   ├── string_helper.php
    │   ├── text_helper.php
    │   ├── typography_helper.php
    │   ├── url_helper.php
    │   └── xml_helper.php
    ├── index.html
    ├── language/
    │   ├── english/
    │   │   ├── calendar_lang.php
    │   │   ├── date_lang.php
    │   │   ├── db_lang.php
    │   │   ├── email_lang.php
    │   │   ├── form_validation_lang.php
    │   │   ├── ftp_lang.php
    │   │   ├── imglib_lang.php
    │   │   ├── index.html
    │   │   ├── migration_lang.php
    │   │   ├── number_lang.php
    │   │   ├── pagination_lang.php
    │   │   ├── profiler_lang.php
    │   │   ├── unit_test_lang.php
    │   │   └── upload_lang.php
    │   └── index.html
    └── libraries/
        ├── Cache/
        │   ├── Cache.php
        │   ├── drivers/
        │   │   ├── Cache_apc.php
        │   │   ├── Cache_dummy.php
        │   │   ├── Cache_file.php
        │   │   ├── Cache_memcached.php
        │   │   ├── Cache_redis.php
        │   │   ├── Cache_wincache.php
        │   │   └── index.html
        │   └── index.html
        ├── Calendar.php
        ├── Cart.php
        ├── Driver.php
        ├── Email.php
        ├── Encrypt.php
        ├── Encryption.php
        ├── Form_validation.php
        ├── Ftp.php
        ├── Image_lib.php
        ├── Javascript/
        │   ├── Jquery.php
        │   └── index.html
        ├── Javascript.php
        ├── Migration.php
        ├── Pagination.php
        ├── Parser.php
        ├── Profiler.php
        ├── Session/
        │   ├── Session.php
        │   ├── SessionHandlerInterface.php
        │   ├── Session_driver.php
        │   ├── drivers/
        │   │   ├── Session_database_driver.php
        │   │   ├── Session_files_driver.php
        │   │   ├── Session_memcached_driver.php
        │   │   ├── Session_redis_driver.php
        │   │   └── index.html
        │   └── index.html
        ├── Table.php
        ├── Trackback.php
        ├── Typography.php
        ├── Unit_test.php
        ├── Upload.php
        ├── User_agent.php
        ├── Xmlrpc.php
        ├── Xmlrpcs.php
        ├── Zip.php
        └── index.html

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

================================================
FILE: .gitignore
================================================
sftp-config.json
application/logs/*.log
application/business/*.json
vendor/
weapp-sdk/
composer.lock

================================================
FILE: .htaccess
================================================
RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

================================================
FILE: LICENSE
================================================
LICENSE - "MIT License"

Copyright (c) 2016 by Tencent Cloud

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

================================================
FILE: README.md
================================================
# Wafer 服务端 Demo - PHP

本仓库是 [Wafer](https://github.com/tencentyun/wafer) 组成部分,提供 PHP 版本业务服务器示例。示例需要和[微信小程序客户端示例](https://github.com/tencentyun/weapp-client-demo)配合一起使用。

## 运行示例

选择合适的方式[部署 Wafer](https://github.com/tencentyun/wafer/wiki#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F),并按照[小程序创建资源配置指引](https://github.com/tencentyun/weapp-doc)进行操作,可以得到运行本示例所需的资源和服务。请参考以下配置。

- SDK 配置文件:`/etc/qcloud/sdk.config`
- 示例代码部署目录:`/data/release/php-weapp-demo`
- 运行示例的 nginx 配置文件: `/etc/nginx/conf.d/php-weapp-demo.conf`
- PHP 版本:`v5.6.27`
- composer 版本:`v1.2.1`
- nginx 版本:`v1.10.1`

## 项目结构

```
Demo
├── application
│   ├── business
│   │   └── ChatTunnelHandler.php
│   ├── cache
│   ├── config
│   ├── controllers
│   │   ├── Welcome.php
│   │   ├── Login.php
│   │   ├── User.php
│   │   └── Tunnel.php
│   ├── core
│   ├── helpers
│   │   └── general_helper.php
│   ├── hooks
│   ├── language
│   ├── libraries
│   ├── logs
│   ├── models
│   ├── third_party
│   ├── vendor
│   └── views
│       └── welcome_message.php
├── index.php
├── install_qcloud_sdk.php
├── composer.json
└── system
```

示例使用 `CodeIgniter(v3.1)` 框架制作。其中,`index.php` 是 启动文件,`install_qcloud_sdk.php` 用于初始化 SDK 配置,配置从文件 `/etc/qcloud/sdk.config` 中读取。配置文件包含如下配置项:

```json
{
    "serverHost": "业务服务器的主机名",
    "authServerUrl": "鉴权服务器地址",
    "tunnelServerUrl": "信道服务器地址",
    "tunnelSignatureKey": "和信道服务器通信的签名密钥",
    "networkTimeout": 30000
}
```
其中 `networkTimeout` 为超时时间,单位是**毫秒**。

`composer.json` 文件中声明了对 SDK 的依赖,可执行命令 `composer install` 安装依赖。

`application/controllers/` 目录包含了示例用到的4个路由,路由和处理文件映射关系如下:

```
// 首页指引
/ => application/controllers/Welcome.php

// 登录
/login => application/controllers/Login.php

// 获取微信用户信息
/user => application/controllers/User.php

// 处理信道请求
/tunnel => application/controllers/Tunnel.php
```

`application/business/ChatTunnelHandler.php` 是业务处理信道请求的示例代码。

`application/helpers/general_helper.php` 包含简单的 `debug` 方法用于打印日志。


## 更新 SDK 版本
进入目录 `/data/release/php-weapp-demo`,然后执行命令 `composer update` 即可。


## 如果在demo基础上开发
将自己开发的接口放到如下目录下即可生效
/data/release/php-weapp-demo/application/controllers/

## 重启服务:
        service php-fpm restart
        


================================================
FILE: application/.htaccess
================================================
<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

================================================
FILE: application/business/ChatTunnelHandler.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use \QCloud_WeApp_SDK\Tunnel\ITunnelHandler as ITunnelHandler;
use \QCloud_WeApp_SDK\Tunnel\TunnelService as TunnelService;

/**
 * 实现 WebSocket 信道处理器
 * 本示例配合客户端 Demo 实现一个简单的聊天室功能
 */
class ChatTunnelHandler implements ITunnelHandler {
    /**
     * 实现 onRequest 方法
     * 在客户端请求 WebSocket 信道连接之后,
     * 会调用 onRequest 方法,此时可以把信道 ID 和用户信息关联起来
     */
    public function onRequest($tunnelId, $userInfo) {
        if (is_array($userInfo)) {
            $data = self::loadData();

            // 保存 信道ID => 用户信息 的映射
            $data['userMap'][$tunnelId] = $userInfo;

            self::saveData($data);
        }
    }

    /**
     * 实现 onConnect 方法
     * 在客户端成功连接 WebSocket 信道服务之后会调用该方法,
     * 此时通知所有其它在线的用户当前总人数以及刚加入的用户是谁
     */
    public function onConnect($tunnelId) {
        $data = self::loadData();

        if (array_key_exists($tunnelId, $data['userMap'])) {
            $data['connectedTunnelIds'][] = $tunnelId;
            self::saveData($data);

            self::broadcast('people', array(
                'total' => count($data['connectedTunnelIds']),
                'enter' => $data['userMap'][$tunnelId],
            ));

        } else {
            debug("Unknown tunnelId({$tunnelId}) was connectd, close it");
            self::closeTunnel($tunnelId);
        }
    }

    /**
     * 实现 onMessage 方法
     * 客户端推送消息到 WebSocket 信道服务器上后,会调用该方法,此时可以处理信道的消息。
     * 在本示例,我们处理 `speak` 类型的消息,该消息表示有用户发言。
     * 我们把这个发言的信息广播到所有在线的 WebSocket 信道上
     */
    public function onMessage($tunnelId, $type, $content) {
        switch ($type) {
        case 'speak':
            $data = self::loadData();

            if (isset($data['userMap'][$tunnelId])) {
                self::broadcast('speak', array(
                    'who' => $data['userMap'][$tunnelId],
                    'word' => $content['word'],
                ));
            } else {
                self::closeTunnel($tunnelId);
            }
            break;
        }
    }

    /**
     * 实现 onClose 方法
     * 客户端关闭 WebSocket 信道或者被信道服务器判断为已断开后,
     * 会调用该方法,此时可以进行清理及通知操作
     */
    public function onClose($tunnelId) {
        $data = self::loadData();

        if (!array_key_exists($tunnelId, $data['userMap'])) {
            debug('[onClose] 无效的信道 ID =>', $tunnelId);
            self::closeTunnel($tunnelId);
            return;
        }

        $leaveUser = $data['userMap'][$tunnelId];
        unset($data['userMap'][$tunnelId]);

        $index = array_search($tunnelId, $data['connectedTunnelIds']);
        if ($index !== FALSE) {
            array_splice($data['connectedTunnelIds'], $index, 1);
        }

        self::saveData($data);

        // 聊天室没有人了(即无信道ID)不再需要广播消息
        if (count($data['connectedTunnelIds']) > 0) {
            self::broadcast('people', array(
                'total' => count($data['connectedTunnelIds']),
                'leave' => $leaveUser,
            ));
        }
    }

    /**
     * 调用 TunnelService::broadcast() 进行广播
     */
    private static function broadcast($type, $content) {
        $data = self::loadData();
        $result = TunnelService::broadcast($data['connectedTunnelIds'], $type, $content);

        if ($result['code'] === 0 && !empty($result['data']['invalidTunnelIds'])) {
            $invalidTunnelIds = $result['data']['invalidTunnelIds'];
            debug('检测到无效的信道 IDs =>', $invalidTunnelIds);

            // 从`userMap`和`connectedTunnelIds`将无效的信道记录移除
            foreach ($invalidTunnelIds as $tunnelId) {
                unset($data['userMap'][$tunnelId]);

                $index = array_search($tunnelId, $data['connectedTunnelIds']);
                if ($index !== FALSE) {
                    array_splice($data['connectedTunnelIds'], $index, 1);
                }
            }

            self::saveData($data);
        }
    }

    /**
     * 调用 TunnelService::closeTunnel() 关闭信道
     * @param  String $tunnelId 信道ID
     */
    private static function closeTunnel($tunnelId) {
        TunnelService::closeTunnel($tunnelId);
    }

    /**
     * 加载 WebSocket 信道对应的用户 => userMap
     * 加载 当前已连接的 WebSocket 信道列表 => connectedTunnelIds
     * 在实际的业务中,应该使用数据库进行存储跟踪,这里作为示例只是演示其作用
     */
    private static function loadData() {
        $filepath = self::getDataFilePath();
        $defaultData = array('userMap' => array(), 'connectedTunnelIds' => array());

        if (!file_exists($filepath)) {
            return $defaultData;
        }

        $content = file_get_contents($filepath);
        $data = json_decode($content, TRUE);

        return (is_array($data) ? $data : $defaultData);
    }

    /**
     * 保存 WebSocket 信道对应的用户 => userMap
     * 保存 当前已连接的 WebSocket 信道ID列表 => connectedTunnelIds
     * 在实际的业务中,应该使用数据库进行存储跟踪,这里作为示例只是演示其作用
     */
    private static function saveData($data) {
        $filepath = self::getDataFilePath();

        if (version_compare(PHP_VERSION, '5.4.0') >= 0) {
            $content = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
        } else {
            $content = json_encode($data);
        }

        file_put_contents($filepath, $content, LOCK_EX);
    }

    /**
     * 聊天室存取 JSON 数据对应的文件路径
     */
    private static function getDataFilePath() {
        return (dirname(__FILE__) . DIRECTORY_SEPARATOR . 'chat_data.json');
    }
}


================================================
FILE: application/cache/.htaccess
================================================
<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

================================================
FILE: application/cache/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/config/autoload.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------
| AUTO-LOADER
| -------------------------------------------------------------------
| This file specifies which systems should be loaded by default.
|
| In order to keep the framework as light-weight as possible only the
| absolute minimal resources are loaded by default. For example,
| the database is not connected to automatically since no assumption
| is made regarding whether you intend to use it.  This file lets
| you globally define which systems you would like loaded with every
| request.
|
| -------------------------------------------------------------------
| Instructions
| -------------------------------------------------------------------
|
| These are the things you can load automatically:
|
| 1. Packages
| 2. Libraries
| 3. Drivers
| 4. Helper files
| 5. Custom config files
| 6. Language files
| 7. Models
|
*/

/*
| -------------------------------------------------------------------
|  Auto-load Packages
| -------------------------------------------------------------------
| Prototype:
|
|  $autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared');
|
*/
$autoload['packages'] = array();

/*
| -------------------------------------------------------------------
|  Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in system/libraries/ or your
| application/libraries/ directory, with the addition of the
| 'database' library, which is somewhat of a special case.
|
| Prototype:
|
|	$autoload['libraries'] = array('database', 'email', 'session');
|
| You can also supply an alternative library name to be assigned
| in the controller:
|
|	$autoload['libraries'] = array('user_agent' => 'ua');
*/
$autoload['libraries'] = array();

/*
| -------------------------------------------------------------------
|  Auto-load Drivers
| -------------------------------------------------------------------
| These classes are located in system/libraries/ or in your
| application/libraries/ directory, but are also placed inside their
| own subdirectory and they extend the CI_Driver_Library class. They
| offer multiple interchangeable driver options.
|
| Prototype:
|
|	$autoload['drivers'] = array('cache');
|
| You can also supply an alternative property name to be assigned in
| the controller:
|
|	$autoload['drivers'] = array('cache' => 'cch');
|
*/
$autoload['drivers'] = array();

/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('general');

/*
| -------------------------------------------------------------------
|  Auto-load Config files
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['config'] = array('config1', 'config2');
|
| NOTE: This item is intended for use ONLY if you have created custom
| config files.  Otherwise, leave it blank.
|
*/
$autoload['config'] = array();

/*
| -------------------------------------------------------------------
|  Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['language'] = array('lang1', 'lang2');
|
| NOTE: Do not include the "_lang" part of your file.  For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
$autoload['language'] = array();

/*
| -------------------------------------------------------------------
|  Auto-load Models
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['model'] = array('first_model', 'second_model');
|
| You can also supply an alternative model name to be assigned
| in the controller:
|
|	$autoload['model'] = array('first_model' => 'first');
*/
$autoload['model'] = array();


================================================
FILE: application/config/config.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|	http://example.com/
|
| WARNING: You MUST set this value!
|
| If it is not set, then CodeIgniter will try guess the protocol and path
| your installation, but due to security concerns the hostname will be set
| to $_SERVER['SERVER_ADDR'] if available, or localhost otherwise.
| The auto-detection mechanism exists only for convenience during
| development and MUST NOT be used in production!
|
| If you need to allow multiple domains, remember that this file is still
| a PHP script and you can easily do that on your own.
|
*/
$config['base_url'] = '';

/*
|--------------------------------------------------------------------------
| Index File
|--------------------------------------------------------------------------
|
| Typically this will be your index.php file, unless you've renamed it to
| something else. If you are using mod_rewrite to remove the page set this
| variable so that it is blank.
|
*/
$config['index_page'] = 'index.php';

/*
|--------------------------------------------------------------------------
| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string.  The default setting of 'REQUEST_URI' works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'REQUEST_URI'    Uses $_SERVER['REQUEST_URI']
| 'QUERY_STRING'   Uses $_SERVER['QUERY_STRING']
| 'PATH_INFO'      Uses $_SERVER['PATH_INFO']
|
| WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded!
*/
$config['uri_protocol']	= 'REQUEST_URI';

/*
|--------------------------------------------------------------------------
| URL suffix
|--------------------------------------------------------------------------
|
| This option allows you to add a suffix to all URLs generated by CodeIgniter.
| For more information please see the user guide:
|
| https://codeigniter.com/user_guide/general/urls.html
*/
$config['url_suffix'] = '';

/*
|--------------------------------------------------------------------------
| Default Language
|--------------------------------------------------------------------------
|
| This determines which set of language files should be used. Make sure
| there is an available translation if you intend to use something other
| than english.
|
*/
$config['language']	= 'english';

/*
|--------------------------------------------------------------------------
| Default Character Set
|--------------------------------------------------------------------------
|
| This determines which character set is used by default in various methods
| that require a character set to be provided.
|
| See http://php.net/htmlspecialchars for a list of supported charsets.
|
*/
$config['charset'] = 'UTF-8';

/*
|--------------------------------------------------------------------------
| Enable/Disable System Hooks
|--------------------------------------------------------------------------
|
| If you would like to use the 'hooks' feature you must enable it by
| setting this variable to TRUE (boolean).  See the user guide for details.
|
*/
$config['enable_hooks'] = FALSE;

/*
|--------------------------------------------------------------------------
| Class Extension Prefix
|--------------------------------------------------------------------------
|
| This item allows you to set the filename/classname prefix when extending
| native libraries.  For more information please see the user guide:
|
| https://codeigniter.com/user_guide/general/core_classes.html
| https://codeigniter.com/user_guide/general/creating_libraries.html
|
*/
$config['subclass_prefix'] = 'MY_';

/*
|--------------------------------------------------------------------------
| Composer auto-loading
|--------------------------------------------------------------------------
|
| Enabling this setting will tell CodeIgniter to look for a Composer
| package auto-loader script in application/vendor/autoload.php.
|
|	$config['composer_autoload'] = TRUE;
|
| Or if you have your vendor/ directory located somewhere else, you
| can opt to set a specific path as well:
|
|	$config['composer_autoload'] = '/path/to/vendor/autoload.php';
|
| For more information about Composer, please visit http://getcomposer.org/
|
| Note: This will NOT disable or override the CodeIgniter-specific
|	autoloading (application/config/autoload.php)
*/
$config['composer_autoload'] = FALSE;

/*
|--------------------------------------------------------------------------
| Allowed URL Characters
|--------------------------------------------------------------------------
|
| This lets you specify which characters are permitted within your URLs.
| When someone tries to submit a URL with disallowed characters they will
| get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible.  By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
| The configured value is actually a regular expression character group
| and it will be executed as: ! preg_match('/^[<permitted_uri_chars>]+$/i
|
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
|
*/
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';

/*
|--------------------------------------------------------------------------
| Enable Query Strings
|--------------------------------------------------------------------------
|
| By default CodeIgniter uses search-engine friendly segment based URLs:
| example.com/who/what/where/
|
| By default CodeIgniter enables access to the $_GET array.  If for some
| reason you would like to disable it, set 'allow_get_array' to FALSE.
|
| You can optionally enable standard query string based URLs:
| example.com?who=me&what=something&where=here
|
| Options are: TRUE or FALSE (boolean)
|
| The other items let you set the query string 'words' that will
| invoke your controllers and its functions:
| example.com/index.php?c=controller&m=function
|
| Please note that some of the helpers won't work as expected when
| this feature is enabled, since CodeIgniter is designed primarily to
| use segment based URLs.
|
*/
$config['allow_get_array'] = TRUE;
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
$config['directory_trigger'] = 'd';

/*
|--------------------------------------------------------------------------
| Error Logging Threshold
|--------------------------------------------------------------------------
|
| You can enable error logging by setting a threshold over zero. The
| threshold determines what gets logged. Threshold options are:
|
|	0 = Disables logging, Error logging TURNED OFF
|	1 = Error Messages (including PHP errors)
|	2 = Debug Messages
|	3 = Informational Messages
|	4 = All Messages
|
| You can also pass an array with threshold levels to show individual error types
|
| 	array(2) = Debug Messages, without Error Messages
|
| For a live site you'll usually only enable Errors (1) to be logged otherwise
| your log files will fill up very fast.
|
*/
$config['log_threshold'] = array(1, 2);

/*
|--------------------------------------------------------------------------
| Error Logging Directory Path
|--------------------------------------------------------------------------
|
| Leave this BLANK unless you would like to set something other than the default
| application/logs/ directory. Use a full server path with trailing slash.
|
*/
$config['log_path'] = '';

/*
|--------------------------------------------------------------------------
| Log File Extension
|--------------------------------------------------------------------------
|
| The default filename extension for log files. The default 'php' allows for
| protecting the log files via basic scripting, when they are to be stored
| under a publicly accessible directory.
|
| Note: Leaving it blank will default to 'php'.
|
*/
$config['log_file_extension'] = 'log';

/*
|--------------------------------------------------------------------------
| Log File Permissions
|--------------------------------------------------------------------------
|
| The file system permissions to be applied on newly created log files.
|
| IMPORTANT: This MUST be an integer (no quotes) and you MUST use octal
|            integer notation (i.e. 0700, 0644, etc.)
*/
$config['log_file_permissions'] = 0644;

/*
|--------------------------------------------------------------------------
| Date Format for Logs
|--------------------------------------------------------------------------
|
| Each item that is logged has an associated date. You can use PHP date
| codes to set your own date formatting
|
*/
$config['log_date_format'] = 'Y-m-d H:i:s';

/*
|--------------------------------------------------------------------------
| Error Views Directory Path
|--------------------------------------------------------------------------
|
| Leave this BLANK unless you would like to set something other than the default
| application/views/errors/ directory.  Use a full server path with trailing slash.
|
*/
$config['error_views_path'] = '';

/*
|--------------------------------------------------------------------------
| Cache Directory Path
|--------------------------------------------------------------------------
|
| Leave this BLANK unless you would like to set something other than the default
| application/cache/ directory.  Use a full server path with trailing slash.
|
*/
$config['cache_path'] = '';

/*
|--------------------------------------------------------------------------
| Cache Include Query String
|--------------------------------------------------------------------------
|
| Whether to take the URL query string into consideration when generating
| output cache files. Valid options are:
|
|	FALSE      = Disabled
|	TRUE       = Enabled, take all query parameters into account.
|	             Please be aware that this may result in numerous cache
|	             files generated for the same page over and over again.
|	array('q') = Enabled, but only take into account the specified list
|	             of query parameters.
|
*/
$config['cache_query_string'] = FALSE;

/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| If you use the Encryption class, you must set an encryption key.
| See the user guide for more info.
|
| https://codeigniter.com/user_guide/libraries/encryption.html
|
*/
$config['encryption_key'] = '';

/*
|--------------------------------------------------------------------------
| Session Variables
|--------------------------------------------------------------------------
|
| 'sess_driver'
|
|	The storage driver to use: files, database, redis, memcached
|
| 'sess_cookie_name'
|
|	The session cookie name, must contain only [0-9a-z_-] characters
|
| 'sess_expiration'
|
|	The number of SECONDS you want the session to last.
|	Setting to 0 (zero) means expire when the browser is closed.
|
| 'sess_save_path'
|
|	The location to save sessions to, driver dependent.
|
|	For the 'files' driver, it's a path to a writable directory.
|	WARNING: Only absolute paths are supported!
|
|	For the 'database' driver, it's a table name.
|	Please read up the manual for the format with other session drivers.
|
|	IMPORTANT: You are REQUIRED to set a valid save path!
|
| 'sess_match_ip'
|
|	Whether to match the user's IP address when reading the session data.
|
|	WARNING: If you're using the database driver, don't forget to update
|	         your session table's PRIMARY KEY when changing this setting.
|
| 'sess_time_to_update'
|
|	How many seconds between CI regenerating the session ID.
|
| 'sess_regenerate_destroy'
|
|	Whether to destroy session data associated with the old session ID
|	when auto-regenerating the session ID. When set to FALSE, the data
|	will be later deleted by the garbage collector.
|
| Other session cookie settings are shared with the rest of the application,
| except for 'cookie_prefix' and 'cookie_httponly', which are ignored here.
|
*/
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

/*
|--------------------------------------------------------------------------
| Cookie Related Variables
|--------------------------------------------------------------------------
|
| 'cookie_prefix'   = Set a cookie name prefix if you need to avoid collisions
| 'cookie_domain'   = Set to .your-domain.com for site-wide cookies
| 'cookie_path'     = Typically will be a forward slash
| 'cookie_secure'   = Cookie will only be set if a secure HTTPS connection exists.
| 'cookie_httponly' = Cookie will only be accessible via HTTP(S) (no javascript)
|
| Note: These settings (with the exception of 'cookie_prefix' and
|       'cookie_httponly') will also affect sessions.
|
*/
$config['cookie_prefix']	= '';
$config['cookie_domain']	= '';
$config['cookie_path']		= '/';
$config['cookie_secure']	= FALSE;
$config['cookie_httponly'] 	= FALSE;

/*
|--------------------------------------------------------------------------
| Standardize newlines
|--------------------------------------------------------------------------
|
| Determines whether to standardize newline characters in input data,
| meaning to replace \r\n, \r, \n occurrences with the PHP_EOL value.
|
| This is particularly useful for portability between UNIX-based OSes,
| (usually \n) and Windows (\r\n).
|
*/
$config['standardize_newlines'] = FALSE;

/*
|--------------------------------------------------------------------------
| Global XSS Filtering
|--------------------------------------------------------------------------
|
| Determines whether the XSS filter is always active when GET, POST or
| COOKIE data is encountered
|
| WARNING: This feature is DEPRECATED and currently available only
|          for backwards compatibility purposes!
|
*/
$config['global_xss_filtering'] = FALSE;

/*
|--------------------------------------------------------------------------
| Cross Site Request Forgery
|--------------------------------------------------------------------------
| Enables a CSRF cookie token to be set. When set to TRUE, token will be
| checked on a submitted form. If you are accepting user data, it is strongly
| recommended CSRF protection be enabled.
|
| 'csrf_token_name' = The token name
| 'csrf_cookie_name' = The cookie name
| 'csrf_expire' = The number in seconds the token should expire.
| 'csrf_regenerate' = Regenerate token on every submission
| 'csrf_exclude_uris' = Array of URIs which ignore CSRF checks
*/
$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();

/*
|--------------------------------------------------------------------------
| Output Compression
|--------------------------------------------------------------------------
|
| Enables Gzip output compression for faster page loads.  When enabled,
| the output class will test whether your server supports Gzip.
| Even if it does, however, not all browsers support compression
| so enable only if you are reasonably sure your visitors can handle it.
|
| Only used if zlib.output_compression is turned off in your php.ini.
| Please do not use it together with httpd-level output compression.
|
| VERY IMPORTANT:  If you are getting a blank page when compression is enabled it
| means you are prematurely outputting something to your browser. It could
| even be a line of whitespace at the end of one of your scripts.  For
| compression to work, nothing can be sent before the output buffer is called
| by the output class.  Do not 'echo' any values with compression enabled.
|
*/
$config['compress_output'] = FALSE;

/*
|--------------------------------------------------------------------------
| Master Time Reference
|--------------------------------------------------------------------------
|
| Options are 'local' or any PHP supported timezone. This preference tells
| the system whether to use your server's local time as the master 'now'
| reference, or convert it to the configured one timezone. See the 'date
| helper' page of the user guide for information regarding date handling.
|
*/
$config['time_reference'] = 'local';

/*
|--------------------------------------------------------------------------
| Rewrite PHP Short Tags
|--------------------------------------------------------------------------
|
| If your PHP installation does not have short tag support enabled CI
| can rewrite the tags on-the-fly, enabling you to utilize that syntax
| in your view files.  Options are TRUE or FALSE (boolean)
|
| Note: You need to have eval() enabled for this to work.
|
*/
$config['rewrite_short_tags'] = FALSE;

/*
|--------------------------------------------------------------------------
| Reverse Proxy IPs
|--------------------------------------------------------------------------
|
| If your server is behind a reverse proxy, you must whitelist the proxy
| IP addresses from which CodeIgniter should trust headers such as
| HTTP_X_FORWARDED_FOR and HTTP_CLIENT_IP in order to properly identify
| the visitor's IP address.
|
| You can use both an array or a comma-separated list of proxy addresses,
| as well as specifying whole subnets. Here are a few examples:
|
| Comma-separated:	'10.0.1.200,192.168.5.0/24'
| Array:		array('10.0.1.200', '192.168.5.0/24')
*/
$config['proxy_ips'] = '';


================================================
FILE: application/config/constants.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
|--------------------------------------------------------------------------
| Display Debug backtrace
|--------------------------------------------------------------------------
|
| If set to TRUE, a backtrace will be displayed along with php errors. If
| error_reporting is disabled, the backtrace will not display, regardless
| of this setting
|
*/
defined('SHOW_DEBUG_BACKTRACE') OR define('SHOW_DEBUG_BACKTRACE', TRUE);

/*
|--------------------------------------------------------------------------
| File and Directory Modes
|--------------------------------------------------------------------------
|
| These prefs are used when checking and setting modes when working
| with the file system.  The defaults are fine on servers with proper
| security, but you may wish (or even need) to change the values in
| certain environments (Apache running a separate process for each
| user, PHP under CGI with Apache suEXEC, etc.).  Octal values should
| always be used to set the mode correctly.
|
*/
defined('FILE_READ_MODE')  OR define('FILE_READ_MODE', 0644);
defined('FILE_WRITE_MODE') OR define('FILE_WRITE_MODE', 0666);
defined('DIR_READ_MODE')   OR define('DIR_READ_MODE', 0755);
defined('DIR_WRITE_MODE')  OR define('DIR_WRITE_MODE', 0755);

/*
|--------------------------------------------------------------------------
| File Stream Modes
|--------------------------------------------------------------------------
|
| These modes are used when working with fopen()/popen()
|
*/
defined('FOPEN_READ')                           OR define('FOPEN_READ', 'rb');
defined('FOPEN_READ_WRITE')                     OR define('FOPEN_READ_WRITE', 'r+b');
defined('FOPEN_WRITE_CREATE_DESTRUCTIVE')       OR define('FOPEN_WRITE_CREATE_DESTRUCTIVE', 'wb'); // truncates existing file data, use with care
defined('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE')  OR define('FOPEN_READ_WRITE_CREATE_DESTRUCTIVE', 'w+b'); // truncates existing file data, use with care
defined('FOPEN_WRITE_CREATE')                   OR define('FOPEN_WRITE_CREATE', 'ab');
defined('FOPEN_READ_WRITE_CREATE')              OR define('FOPEN_READ_WRITE_CREATE', 'a+b');
defined('FOPEN_WRITE_CREATE_STRICT')            OR define('FOPEN_WRITE_CREATE_STRICT', 'xb');
defined('FOPEN_READ_WRITE_CREATE_STRICT')       OR define('FOPEN_READ_WRITE_CREATE_STRICT', 'x+b');

/*
|--------------------------------------------------------------------------
| Exit Status Codes
|--------------------------------------------------------------------------
|
| Used to indicate the conditions under which the script is exit()ing.
| While there is no universal standard for error codes, there are some
| broad conventions.  Three such conventions are mentioned below, for
| those who wish to make use of them.  The CodeIgniter defaults were
| chosen for the least overlap with these conventions, while still
| leaving room for others to be defined in future versions and user
| applications.
|
| The three main conventions used for determining exit status codes
| are as follows:
|
|    Standard C/C++ Library (stdlibc):
|       http://www.gnu.org/software/libc/manual/html_node/Exit-Status.html
|       (This link also contains other GNU-specific conventions)
|    BSD sysexits.h:
|       http://www.gsp.com/cgi-bin/man.cgi?section=3&topic=sysexits
|    Bash scripting:
|       http://tldp.org/LDP/abs/html/exitcodes.html
|
*/
defined('EXIT_SUCCESS')        OR define('EXIT_SUCCESS', 0); // no errors
defined('EXIT_ERROR')          OR define('EXIT_ERROR', 1); // generic error
defined('EXIT_CONFIG')         OR define('EXIT_CONFIG', 3); // configuration error
defined('EXIT_UNKNOWN_FILE')   OR define('EXIT_UNKNOWN_FILE', 4); // file not found
defined('EXIT_UNKNOWN_CLASS')  OR define('EXIT_UNKNOWN_CLASS', 5); // unknown class
defined('EXIT_UNKNOWN_METHOD') OR define('EXIT_UNKNOWN_METHOD', 6); // unknown class member
defined('EXIT_USER_INPUT')     OR define('EXIT_USER_INPUT', 7); // invalid user input
defined('EXIT_DATABASE')       OR define('EXIT_DATABASE', 8); // database error
defined('EXIT__AUTO_MIN')      OR define('EXIT__AUTO_MIN', 9); // lowest automatically-assigned error code
defined('EXIT__AUTO_MAX')      OR define('EXIT__AUTO_MAX', 125); // highest automatically-assigned error code


================================================
FILE: application/config/database.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
| -------------------------------------------------------------------
| This file will contain the settings needed to access your database.
|
| For complete instructions please consult the 'Database Connection'
| page of the User Guide.
|
| -------------------------------------------------------------------
| EXPLANATION OF VARIABLES
| -------------------------------------------------------------------
|
|	['dsn']      The full DSN string describe a connection to the database.
|	['hostname'] The hostname of your database server.
|	['username'] The username used to connect to the database
|	['password'] The password used to connect to the database
|	['database'] The name of the database you want to connect to
|	['dbdriver'] The database driver. e.g.: mysqli.
|			Currently supported:
|				 cubrid, ibase, mssql, mysql, mysqli, oci8,
|				 odbc, pdo, postgre, sqlite, sqlite3, sqlsrv
|	['dbprefix'] You can add an optional prefix, which will be added
|				 to the table name when using the  Query Builder class
|	['pconnect'] TRUE/FALSE - Whether to use a persistent connection
|	['db_debug'] TRUE/FALSE - Whether database errors should be displayed.
|	['cache_on'] TRUE/FALSE - Enables/disables query caching
|	['cachedir'] The path to the folder where cache files should be stored
|	['char_set'] The character set used in communicating with the database
|	['dbcollat'] The character collation used in communicating with the database
|				 NOTE: For MySQL and MySQLi databases, this setting is only used
| 				 as a backup if your server is running PHP < 5.2.3 or MySQL < 5.0.7
|				 (and in table creation queries made with DB Forge).
| 				 There is an incompatibility in PHP with mysql_real_escape_string() which
| 				 can make your site vulnerable to SQL injection if you are using a
| 				 multi-byte character set and are running versions lower than these.
| 				 Sites using Latin-1 or UTF-8 database character set and collation are unaffected.
|	['swap_pre'] A default table prefix that should be swapped with the dbprefix
|	['encrypt']  Whether or not to use an encrypted connection.
|
|			'mysql' (deprecated), 'sqlsrv' and 'pdo/sqlsrv' drivers accept TRUE/FALSE
|			'mysqli' and 'pdo/mysql' drivers accept an array with the following options:
|
|				'ssl_key'    - Path to the private key file
|				'ssl_cert'   - Path to the public key certificate file
|				'ssl_ca'     - Path to the certificate authority file
|				'ssl_capath' - Path to a directory containing trusted CA certificats in PEM format
|				'ssl_cipher' - List of *allowed* ciphers to be used for the encryption, separated by colons (':')
|				'ssl_verify' - TRUE/FALSE; Whether verify the server certificate or not ('mysqli' only)
|
|	['compress'] Whether or not to use client compression (MySQL only)
|	['stricton'] TRUE/FALSE - forces 'Strict Mode' connections
|							- good for ensuring strict SQL while developing
|	['ssl_options']	Used to set various SSL options that can be used when making SSL connections.
|	['failover'] array - A array with 0 or more data for connections if the main should fail.
|	['save_queries'] TRUE/FALSE - Whether to "save" all executed queries.
| 				NOTE: Disabling this will also effectively disable both
| 				$this->db->last_query() and profiling of DB queries.
| 				When you run a query, with this setting set to TRUE (default),
| 				CodeIgniter will store the SQL statement for debugging purposes.
| 				However, this may cause high memory usage, especially if you run
| 				a lot of SQL queries ... disable this to avoid that problem.
|
| The $active_group variable lets you choose which connection group to
| make active.  By default there is only one group (the 'default' group).
|
| The $query_builder variables lets you determine whether or not to load
| the query builder class.
*/
$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => '',
	'password' => '',
	'database' => '',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);


================================================
FILE: application/config/doctypes.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$_doctypes = array(
	'xhtml11' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
	'xhtml1-strict' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
	'xhtml1-trans' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
	'xhtml1-frame' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
	'xhtml-basic11' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">',
	'html5' => '<!DOCTYPE html>',
	'html4-strict' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',
	'html4-trans' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
	'html4-frame' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">',
	'mathml1' => '<!DOCTYPE math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd">',
	'mathml2' => '<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">',
	'svg10' => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">',
	'svg11' => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">',
	'svg11-basic' => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">',
	'svg11-tiny' => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">',
	'xhtml-math-svg-xh' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">',
	'xhtml-math-svg-sh' => '<!DOCTYPE svg:svg PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">',
	'xhtml-rdfa-1' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">',
	'xhtml-rdfa-2' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">'
);


================================================
FILE: application/config/foreign_chars.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------
| Foreign Characters
| -------------------------------------------------------------------
| This file contains an array of foreign characters for transliteration
| conversion used by the Text helper
|
*/
$foreign_characters = array(
	'/ä|æ|ǽ/' => 'ae',
	'/ö|œ/' => 'oe',
	'/ü/' => 'ue',
	'/Ä/' => 'Ae',
	'/Ü/' => 'Ue',
	'/Ö/' => 'Oe',
	'/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ|Α|Ά|Ả|Ạ|Ầ|Ẫ|Ẩ|Ậ|Ằ|Ắ|Ẵ|Ẳ|Ặ|А/' => 'A',
	'/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª|α|ά|ả|ạ|ầ|ấ|ẫ|ẩ|ậ|ằ|ắ|ẵ|ẳ|ặ|а/' => 'a',
	'/Б/' => 'B',
	'/б/' => 'b',
	'/Ç|Ć|Ĉ|Ċ|Č/' => 'C',
	'/ç|ć|ĉ|ċ|č/' => 'c',
	'/Д/' => 'D',
	'/д/' => 'd',
	'/Ð|Ď|Đ|Δ/' => 'Dj',
	'/ð|ď|đ|δ/' => 'dj',
	'/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě|Ε|Έ|Ẽ|Ẻ|Ẹ|Ề|Ế|Ễ|Ể|Ệ|Е|Э/' => 'E',
	'/è|é|ê|ë|ē|ĕ|ė|ę|ě|έ|ε|ẽ|ẻ|ẹ|ề|ế|ễ|ể|ệ|е|э/' => 'e',
	'/Ф/' => 'F',
	'/ф/' => 'f',
	'/Ĝ|Ğ|Ġ|Ģ|Γ|Г|Ґ/' => 'G',
	'/ĝ|ğ|ġ|ģ|γ|г|ґ/' => 'g',
	'/Ĥ|Ħ/' => 'H',
	'/ĥ|ħ/' => 'h',
	'/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|Η|Ή|Ί|Ι|Ϊ|Ỉ|Ị|И|Ы/' => 'I',
	'/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|η|ή|ί|ι|ϊ|ỉ|ị|и|ы|ї/' => 'i',
	'/Ĵ/' => 'J',
	'/ĵ/' => 'j',
	'/Ķ|Κ|К/' => 'K',
	'/ķ|κ|к/' => 'k',
	'/Ĺ|Ļ|Ľ|Ŀ|Ł|Λ|Л/' => 'L',
	'/ĺ|ļ|ľ|ŀ|ł|λ|л/' => 'l',
	'/М/' => 'M',
	'/м/' => 'm',
	'/Ñ|Ń|Ņ|Ň|Ν|Н/' => 'N',
	'/ñ|ń|ņ|ň|ʼn|ν|н/' => 'n',
	'/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|Ο|Ό|Ω|Ώ|Ỏ|Ọ|Ồ|Ố|Ỗ|Ổ|Ộ|Ờ|Ớ|Ỡ|Ở|Ợ|О/' => 'O',
	'/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|ο|ό|ω|ώ|ỏ|ọ|ồ|ố|ỗ|ổ|ộ|ờ|ớ|ỡ|ở|ợ|о/' => 'o',
	'/П/' => 'P',
	'/п/' => 'p',
	'/Ŕ|Ŗ|Ř|Ρ|Р/' => 'R',
	'/ŕ|ŗ|ř|ρ|р/' => 'r',
	'/Ś|Ŝ|Ş|Ș|Š|Σ|С/' => 'S',
	'/ś|ŝ|ş|ș|š|ſ|σ|ς|с/' => 's',
	'/Ț|Ţ|Ť|Ŧ|τ|Т/' => 'T',
	'/ț|ţ|ť|ŧ|т/' => 't',
	'/Þ|þ/' => 'th',
	'/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ|Ũ|Ủ|Ụ|Ừ|Ứ|Ữ|Ử|Ự|У/' => 'U',
	'/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ|υ|ύ|ϋ|ủ|ụ|ừ|ứ|ữ|ử|ự|у/' => 'u',
	'/Ý|Ÿ|Ŷ|Υ|Ύ|Ϋ|Ỳ|Ỹ|Ỷ|Ỵ|Й/' => 'Y',
	'/ý|ÿ|ŷ|ỳ|ỹ|ỷ|ỵ|й/' => 'y',
	'/В/' => 'V',
	'/в/' => 'v',
	'/Ŵ/' => 'W',
	'/ŵ/' => 'w',
	'/Ź|Ż|Ž|Ζ|З/' => 'Z',
	'/ź|ż|ž|ζ|з/' => 'z',
	'/Æ|Ǽ/' => 'AE',
	'/ß/' => 'ss',
	'/IJ/' => 'IJ',
	'/ij/' => 'ij',
	'/Œ/' => 'OE',
	'/ƒ/' => 'f',
	'/ξ/' => 'ks',
	'/π/' => 'p',
	'/β/' => 'v',
	'/μ/' => 'm',
	'/ψ/' => 'ps',
	'/Ё/' => 'Yo',
	'/ё/' => 'yo',
	'/Є/' => 'Ye',
	'/є/' => 'ye',
	'/Ї/' => 'Yi',
	'/Ж/' => 'Zh',
	'/ж/' => 'zh',
	'/Х/' => 'Kh',
	'/х/' => 'kh',
	'/Ц/' => 'Ts',
	'/ц/' => 'ts',
	'/Ч/' => 'Ch',
	'/ч/' => 'ch',
	'/Ш/' => 'Sh',
	'/ш/' => 'sh',
	'/Щ/' => 'Shch',
	'/щ/' => 'shch',
	'/Ъ|ъ|Ь|ь/' => '',
	'/Ю/' => 'Yu',
	'/ю/' => 'yu',
	'/Я/' => 'Ya',
	'/я/' => 'ya'
);


================================================
FILE: application/config/hooks.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files.  Please see the user guide for info:
|
|	https://codeigniter.com/user_guide/general/hooks.html
|
*/


================================================
FILE: application/config/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/config/memcached.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------------
| Memcached settings
| -------------------------------------------------------------------------
| Your Memcached servers can be specified below.
|
|	See: https://codeigniter.com/user_guide/libraries/caching.html#memcached
|
*/
$config = array(
	'default' => array(
		'hostname' => '127.0.0.1',
		'port'     => '11211',
		'weight'   => '1',
	),
);


================================================
FILE: application/config/migration.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
|--------------------------------------------------------------------------
| Enable/Disable Migrations
|--------------------------------------------------------------------------
|
| Migrations are disabled by default for security reasons.
| You should enable migrations whenever you intend to do a schema migration
| and disable it back when you're done.
|
*/
$config['migration_enabled'] = FALSE;

/*
|--------------------------------------------------------------------------
| Migration Type
|--------------------------------------------------------------------------
|
| Migration file names may be based on a sequential identifier or on
| a timestamp. Options are:
|
|   'sequential' = Sequential migration naming (001_add_blog.php)
|   'timestamp'  = Timestamp migration naming (20121031104401_add_blog.php)
|                  Use timestamp format YYYYMMDDHHIISS.
|
| Note: If this configuration value is missing the Migration library
|       defaults to 'sequential' for backward compatibility with CI2.
|
*/
$config['migration_type'] = 'timestamp';

/*
|--------------------------------------------------------------------------
| Migrations table
|--------------------------------------------------------------------------
|
| This is the name of the table that will store the current migrations state.
| When migrations runs it will store in a database table which migration
| level the system is at. It then compares the migration level in this
| table to the $config['migration_version'] if they are not the same it
| will migrate up. This must be set.
|
*/
$config['migration_table'] = 'migrations';

/*
|--------------------------------------------------------------------------
| Auto Migrate To Latest
|--------------------------------------------------------------------------
|
| If this is set to TRUE when you load the migrations class and have
| $config['migration_enabled'] set to TRUE the system will auto migrate
| to your latest migration (whatever $config['migration_version'] is
| set to). This way you do not have to call migrations anywhere else
| in your code to have the latest migration.
|
*/
$config['migration_auto_latest'] = FALSE;

/*
|--------------------------------------------------------------------------
| Migrations version
|--------------------------------------------------------------------------
|
| This is used to set migration version that the file system should be on.
| If you run $this->migration->current() this is the version that schema will
| be upgraded / downgraded to.
|
*/
$config['migration_version'] = 0;

/*
|--------------------------------------------------------------------------
| Migrations Path
|--------------------------------------------------------------------------
|
| Path to your migrations folder.
| Typically, it will be within your application path.
| Also, writing permission is required within the migrations path.
|
*/
$config['migration_path'] = APPPATH.'migrations/';


================================================
FILE: application/config/mimes.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------
| MIME TYPES
| -------------------------------------------------------------------
| This file contains an array of mime types.  It is used by the
| Upload class to help identify allowed file types.
|
*/
return array(
	'hqx'	=>	array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'),
	'cpt'	=>	'application/mac-compactpro',
	'csv'	=>	array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'),
	'bin'	=>	array('application/macbinary', 'application/mac-binary', 'application/octet-stream', 'application/x-binary', 'application/x-macbinary'),
	'dms'	=>	'application/octet-stream',
	'lha'	=>	'application/octet-stream',
	'lzh'	=>	'application/octet-stream',
	'exe'	=>	array('application/octet-stream', 'application/x-msdownload'),
	'class'	=>	'application/octet-stream',
	'psd'	=>	array('application/x-photoshop', 'image/vnd.adobe.photoshop'),
	'so'	=>	'application/octet-stream',
	'sea'	=>	'application/octet-stream',
	'dll'	=>	'application/octet-stream',
	'oda'	=>	'application/oda',
	'pdf'	=>	array('application/pdf', 'application/force-download', 'application/x-download', 'binary/octet-stream'),
	'ai'	=>	array('application/pdf', 'application/postscript'),
	'eps'	=>	'application/postscript',
	'ps'	=>	'application/postscript',
	'smi'	=>	'application/smil',
	'smil'	=>	'application/smil',
	'mif'	=>	'application/vnd.mif',
	'xls'	=>	array('application/vnd.ms-excel', 'application/msexcel', 'application/x-msexcel', 'application/x-ms-excel', 'application/x-excel', 'application/x-dos_ms_excel', 'application/xls', 'application/x-xls', 'application/excel', 'application/download', 'application/vnd.ms-office', 'application/msword'),
	'ppt'	=>	array('application/powerpoint', 'application/vnd.ms-powerpoint', 'application/vnd.ms-office', 'application/msword'),
	'pptx'	=> 	array('application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/x-zip', 'application/zip'),
	'wbxml'	=>	'application/wbxml',
	'wmlc'	=>	'application/wmlc',
	'dcr'	=>	'application/x-director',
	'dir'	=>	'application/x-director',
	'dxr'	=>	'application/x-director',
	'dvi'	=>	'application/x-dvi',
	'gtar'	=>	'application/x-gtar',
	'gz'	=>	'application/x-gzip',
	'gzip'  =>	'application/x-gzip',
	'php'	=>	array('application/x-httpd-php', 'application/php', 'application/x-php', 'text/php', 'text/x-php', 'application/x-httpd-php-source'),
	'php4'	=>	'application/x-httpd-php',
	'php3'	=>	'application/x-httpd-php',
	'phtml'	=>	'application/x-httpd-php',
	'phps'	=>	'application/x-httpd-php-source',
	'js'	=>	array('application/x-javascript', 'text/plain'),
	'swf'	=>	'application/x-shockwave-flash',
	'sit'	=>	'application/x-stuffit',
	'tar'	=>	'application/x-tar',
	'tgz'	=>	array('application/x-tar', 'application/x-gzip-compressed'),
	'z'	=>	'application/x-compress',
	'xhtml'	=>	'application/xhtml+xml',
	'xht'	=>	'application/xhtml+xml',
	'zip'	=>	array('application/x-zip', 'application/zip', 'application/x-zip-compressed', 'application/s-compressed', 'multipart/x-zip'),
	'rar'	=>	array('application/x-rar', 'application/rar', 'application/x-rar-compressed'),
	'mid'	=>	'audio/midi',
	'midi'	=>	'audio/midi',
	'mpga'	=>	'audio/mpeg',
	'mp2'	=>	'audio/mpeg',
	'mp3'	=>	array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),
	'aif'	=>	array('audio/x-aiff', 'audio/aiff'),
	'aiff'	=>	array('audio/x-aiff', 'audio/aiff'),
	'aifc'	=>	'audio/x-aiff',
	'ram'	=>	'audio/x-pn-realaudio',
	'rm'	=>	'audio/x-pn-realaudio',
	'rpm'	=>	'audio/x-pn-realaudio-plugin',
	'ra'	=>	'audio/x-realaudio',
	'rv'	=>	'video/vnd.rn-realvideo',
	'wav'	=>	array('audio/x-wav', 'audio/wave', 'audio/wav'),
	'bmp'	=>	array('image/bmp', 'image/x-bmp', 'image/x-bitmap', 'image/x-xbitmap', 'image/x-win-bitmap', 'image/x-windows-bmp', 'image/ms-bmp', 'image/x-ms-bmp', 'application/bmp', 'application/x-bmp', 'application/x-win-bitmap'),
	'gif'	=>	'image/gif',
	'jpeg'	=>	array('image/jpeg', 'image/pjpeg'),
	'jpg'	=>	array('image/jpeg', 'image/pjpeg'),
	'jpe'	=>	array('image/jpeg', 'image/pjpeg'),
	'jp2'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
	'j2k'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
	'jpf'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
	'jpg2'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
	'jpx'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
	'jpm'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
	'mj2'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
	'mjp2'	=>	array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'),
	'png'	=>	array('image/png',  'image/x-png'),
	'tiff'	=>	'image/tiff',
	'tif'	=>	'image/tiff',
	'css'	=>	array('text/css', 'text/plain'),
	'html'	=>	array('text/html', 'text/plain'),
	'htm'	=>	array('text/html', 'text/plain'),
	'shtml'	=>	array('text/html', 'text/plain'),
	'txt'	=>	'text/plain',
	'text'	=>	'text/plain',
	'log'	=>	array('text/plain', 'text/x-log'),
	'rtx'	=>	'text/richtext',
	'rtf'	=>	'text/rtf',
	'xml'	=>	array('application/xml', 'text/xml', 'text/plain'),
	'xsl'	=>	array('application/xml', 'text/xsl', 'text/xml'),
	'mpeg'	=>	'video/mpeg',
	'mpg'	=>	'video/mpeg',
	'mpe'	=>	'video/mpeg',
	'qt'	=>	'video/quicktime',
	'mov'	=>	'video/quicktime',
	'avi'	=>	array('video/x-msvideo', 'video/msvideo', 'video/avi', 'application/x-troff-msvideo'),
	'movie'	=>	'video/x-sgi-movie',
	'doc'	=>	array('application/msword', 'application/vnd.ms-office'),
	'docx'	=>	array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword', 'application/x-zip'),
	'dot'	=>	array('application/msword', 'application/vnd.ms-office'),
	'dotx'	=>	array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword'),
	'xlsx'	=>	array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel', 'application/msword', 'application/x-zip'),
	'word'	=>	array('application/msword', 'application/octet-stream'),
	'xl'	=>	'application/excel',
	'eml'	=>	'message/rfc822',
	'json'  =>	array('application/json', 'text/json'),
	'pem'   =>	array('application/x-x509-user-cert', 'application/x-pem-file', 'application/octet-stream'),
	'p10'   =>	array('application/x-pkcs10', 'application/pkcs10'),
	'p12'   =>	'application/x-pkcs12',
	'p7a'   =>	'application/x-pkcs7-signature',
	'p7c'   =>	array('application/pkcs7-mime', 'application/x-pkcs7-mime'),
	'p7m'   =>	array('application/pkcs7-mime', 'application/x-pkcs7-mime'),
	'p7r'   =>	'application/x-pkcs7-certreqresp',
	'p7s'   =>	'application/pkcs7-signature',
	'crt'   =>	array('application/x-x509-ca-cert', 'application/x-x509-user-cert', 'application/pkix-cert'),
	'crl'   =>	array('application/pkix-crl', 'application/pkcs-crl'),
	'der'   =>	'application/x-x509-ca-cert',
	'kdb'   =>	'application/octet-stream',
	'pgp'   =>	'application/pgp',
	'gpg'   =>	'application/gpg-keys',
	'sst'   =>	'application/octet-stream',
	'csr'   =>	'application/octet-stream',
	'rsa'   =>	'application/x-pkcs7',
	'cer'   =>	array('application/pkix-cert', 'application/x-x509-ca-cert'),
	'3g2'   =>	'video/3gpp2',
	'3gp'   =>	array('video/3gp', 'video/3gpp'),
	'mp4'   =>	'video/mp4',
	'm4a'   =>	'audio/x-m4a',
	'f4v'   =>	array('video/mp4', 'video/x-f4v'),
	'flv'	=>	'video/x-flv',
	'webm'	=>	'video/webm',
	'aac'   =>	'audio/x-acc',
	'm4u'   =>	'application/vnd.mpegurl',
	'm3u'   =>	'text/plain',
	'xspf'  =>	'application/xspf+xml',
	'vlc'   =>	'application/videolan',
	'wmv'   =>	array('video/x-ms-wmv', 'video/x-ms-asf'),
	'au'    =>	'audio/x-au',
	'ac3'   =>	'audio/ac3',
	'flac'  =>	'audio/x-flac',
	'ogg'   =>	array('audio/ogg', 'video/ogg', 'application/ogg'),
	'kmz'	=>	array('application/vnd.google-earth.kmz', 'application/zip', 'application/x-zip'),
	'kml'	=>	array('application/vnd.google-earth.kml+xml', 'application/xml', 'text/xml'),
	'ics'	=>	'text/calendar',
	'ical'	=>	'text/calendar',
	'zsh'	=>	'text/x-scriptzsh',
	'7zip'	=>	array('application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'),
	'cdr'	=>	array('application/cdr', 'application/coreldraw', 'application/x-cdr', 'application/x-coreldraw', 'image/cdr', 'image/x-cdr', 'zz-application/zz-winassoc-cdr'),
	'wma'	=>	array('audio/x-ms-wma', 'video/x-ms-asf'),
	'jar'	=>	array('application/java-archive', 'application/x-java-application', 'application/x-jar', 'application/x-compressed'),
	'svg'	=>	array('image/svg+xml', 'application/xml', 'text/xml'),
	'vcf'	=>	'text/x-vcard',
	'srt'	=>	array('text/srt', 'text/plain'),
	'vtt'	=>	array('text/vtt', 'text/plain'),
	'ico'	=>	array('image/x-icon', 'image/x-ico', 'image/vnd.microsoft.icon')
);


================================================
FILE: application/config/profiler.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------------
| Profiler Sections
| -------------------------------------------------------------------------
| This file lets you determine whether or not various sections of Profiler
| data are displayed when the Profiler is enabled.
| Please see the user guide for info:
|
|	https://codeigniter.com/user_guide/general/profiling.html
|
*/


================================================
FILE: application/config/routes.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
|	example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
|	https://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There are three reserved routes:
|
|	$route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
|
|	$route['404_override'] = 'errors/page_missing';
|
| This route will tell the Router which controller/method to use if those
| provided in the URL cannot be matched to a valid route.
|
|	$route['translate_uri_dashes'] = FALSE;
|
| This is not exactly a route, but allows you to automatically route
| controller and method names that contain dashes. '-' isn't a valid
| class or method name character, so it requires translation.
| When you set this option to TRUE, it will replace ALL dashes in the
| controller and method URI segments.
|
| Examples:	my-controller/index	-> my_controller/index
|		my-controller/my-method	-> my_controller/my_method
*/
$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;


================================================
FILE: application/config/smileys.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------
| SMILEYS
| -------------------------------------------------------------------
| This file contains an array of smileys for use with the emoticon helper.
| Individual images can be used to replace multiple smileys.  For example:
| :-) and :) use the same image replacement.
|
| Please see user guide for more info:
| https://codeigniter.com/user_guide/helpers/smiley_helper.html
|
*/
$smileys = array(

//	smiley			image name						width	height	alt

	':-)'			=>	array('grin.gif',			'19',	'19',	'grin'),
	':lol:'			=>	array('lol.gif',			'19',	'19',	'LOL'),
	':cheese:'		=>	array('cheese.gif',			'19',	'19',	'cheese'),
	':)'			=>	array('smile.gif',			'19',	'19',	'smile'),
	';-)'			=>	array('wink.gif',			'19',	'19',	'wink'),
	';)'			=>	array('wink.gif',			'19',	'19',	'wink'),
	':smirk:'		=>	array('smirk.gif',			'19',	'19',	'smirk'),
	':roll:'		=>	array('rolleyes.gif',		'19',	'19',	'rolleyes'),
	':-S'			=>	array('confused.gif',		'19',	'19',	'confused'),
	':wow:'			=>	array('surprise.gif',		'19',	'19',	'surprised'),
	':bug:'			=>	array('bigsurprise.gif',	'19',	'19',	'big surprise'),
	':-P'			=>	array('tongue_laugh.gif',	'19',	'19',	'tongue laugh'),
	'%-P'			=>	array('tongue_rolleye.gif',	'19',	'19',	'tongue rolleye'),
	';-P'			=>	array('tongue_wink.gif',	'19',	'19',	'tongue wink'),
	':P'			=>	array('raspberry.gif',		'19',	'19',	'raspberry'),
	':blank:'		=>	array('blank.gif',			'19',	'19',	'blank stare'),
	':long:'		=>	array('longface.gif',		'19',	'19',	'long face'),
	':ohh:'			=>	array('ohh.gif',			'19',	'19',	'ohh'),
	':grrr:'		=>	array('grrr.gif',			'19',	'19',	'grrr'),
	':gulp:'		=>	array('gulp.gif',			'19',	'19',	'gulp'),
	'8-/'			=>	array('ohoh.gif',			'19',	'19',	'oh oh'),
	':down:'		=>	array('downer.gif',			'19',	'19',	'downer'),
	':red:'			=>	array('embarrassed.gif',	'19',	'19',	'red face'),
	':sick:'		=>	array('sick.gif',			'19',	'19',	'sick'),
	':shut:'		=>	array('shuteye.gif',		'19',	'19',	'shut eye'),
	':-/'			=>	array('hmm.gif',			'19',	'19',	'hmmm'),
	'>:('			=>	array('mad.gif',			'19',	'19',	'mad'),
	':mad:'			=>	array('mad.gif',			'19',	'19',	'mad'),
	'>:-('			=>	array('angry.gif',			'19',	'19',	'angry'),
	':angry:'		=>	array('angry.gif',			'19',	'19',	'angry'),
	':zip:'			=>	array('zip.gif',			'19',	'19',	'zipper'),
	':kiss:'		=>	array('kiss.gif',			'19',	'19',	'kiss'),
	':ahhh:'		=>	array('shock.gif',			'19',	'19',	'shock'),
	':coolsmile:'	=>	array('shade_smile.gif',	'19',	'19',	'cool smile'),
	':coolsmirk:'	=>	array('shade_smirk.gif',	'19',	'19',	'cool smirk'),
	':coolgrin:'	=>	array('shade_grin.gif',		'19',	'19',	'cool grin'),
	':coolhmm:'		=>	array('shade_hmm.gif',		'19',	'19',	'cool hmm'),
	':coolmad:'		=>	array('shade_mad.gif',		'19',	'19',	'cool mad'),
	':coolcheese:'	=>	array('shade_cheese.gif',	'19',	'19',	'cool cheese'),
	':vampire:'		=>	array('vampire.gif',		'19',	'19',	'vampire'),
	':snake:'		=>	array('snake.gif',			'19',	'19',	'snake'),
	':exclaim:'		=>	array('exclaim.gif',		'19',	'19',	'exclaim'),
	':question:'	=>	array('question.gif',		'19',	'19',	'question')

);


================================================
FILE: application/config/user_agents.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------
| USER AGENT TYPES
| -------------------------------------------------------------------
| This file contains four arrays of user agent data. It is used by the
| User Agent Class to help identify browser, platform, robot, and
| mobile device data. The array keys are used to identify the device
| and the array values are used to set the actual name of the item.
*/
$platforms = array(
	'windows nt 10.0'	=> 'Windows 10',
	'windows nt 6.3'	=> 'Windows 8.1',
	'windows nt 6.2'	=> 'Windows 8',
	'windows nt 6.1'	=> 'Windows 7',
	'windows nt 6.0'	=> 'Windows Vista',
	'windows nt 5.2'	=> 'Windows 2003',
	'windows nt 5.1'	=> 'Windows XP',
	'windows nt 5.0'	=> 'Windows 2000',
	'windows nt 4.0'	=> 'Windows NT 4.0',
	'winnt4.0'			=> 'Windows NT 4.0',
	'winnt 4.0'			=> 'Windows NT',
	'winnt'				=> 'Windows NT',
	'windows 98'		=> 'Windows 98',
	'win98'				=> 'Windows 98',
	'windows 95'		=> 'Windows 95',
	'win95'				=> 'Windows 95',
	'windows phone'			=> 'Windows Phone',
	'windows'			=> 'Unknown Windows OS',
	'android'			=> 'Android',
	'blackberry'		=> 'BlackBerry',
	'iphone'			=> 'iOS',
	'ipad'				=> 'iOS',
	'ipod'				=> 'iOS',
	'os x'				=> 'Mac OS X',
	'ppc mac'			=> 'Power PC Mac',
	'freebsd'			=> 'FreeBSD',
	'ppc'				=> 'Macintosh',
	'linux'				=> 'Linux',
	'debian'			=> 'Debian',
	'sunos'				=> 'Sun Solaris',
	'beos'				=> 'BeOS',
	'apachebench'		=> 'ApacheBench',
	'aix'				=> 'AIX',
	'irix'				=> 'Irix',
	'osf'				=> 'DEC OSF',
	'hp-ux'				=> 'HP-UX',
	'netbsd'			=> 'NetBSD',
	'bsdi'				=> 'BSDi',
	'openbsd'			=> 'OpenBSD',
	'gnu'				=> 'GNU/Linux',
	'unix'				=> 'Unknown Unix OS',
	'symbian' 			=> 'Symbian OS'
);


// The order of this array should NOT be changed. Many browsers return
// multiple browser types so we want to identify the sub-type first.
$browsers = array(
	'OPR'			=> 'Opera',
	'Flock'			=> 'Flock',
	'Edge'			=> 'Spartan',
	'Chrome'		=> 'Chrome',
	// Opera 10+ always reports Opera/9.80 and appends Version/<real version> to the user agent string
	'Opera.*?Version'	=> 'Opera',
	'Opera'			=> 'Opera',
	'MSIE'			=> 'Internet Explorer',
	'Internet Explorer'	=> 'Internet Explorer',
	'Trident.* rv'	=> 'Internet Explorer',
	'Shiira'		=> 'Shiira',
	'Firefox'		=> 'Firefox',
	'Chimera'		=> 'Chimera',
	'Phoenix'		=> 'Phoenix',
	'Firebird'		=> 'Firebird',
	'Camino'		=> 'Camino',
	'Netscape'		=> 'Netscape',
	'OmniWeb'		=> 'OmniWeb',
	'Safari'		=> 'Safari',
	'Mozilla'		=> 'Mozilla',
	'Konqueror'		=> 'Konqueror',
	'icab'			=> 'iCab',
	'Lynx'			=> 'Lynx',
	'Links'			=> 'Links',
	'hotjava'		=> 'HotJava',
	'amaya'			=> 'Amaya',
	'IBrowse'		=> 'IBrowse',
	'Maxthon'		=> 'Maxthon',
	'Ubuntu'		=> 'Ubuntu Web Browser'
);

$mobiles = array(
	// legacy array, old values commented out
	'mobileexplorer'	=> 'Mobile Explorer',
//  'openwave'			=> 'Open Wave',
//	'opera mini'		=> 'Opera Mini',
//	'operamini'			=> 'Opera Mini',
//	'elaine'			=> 'Palm',
	'palmsource'		=> 'Palm',
//	'digital paths'		=> 'Palm',
//	'avantgo'			=> 'Avantgo',
//	'xiino'				=> 'Xiino',
	'palmscape'			=> 'Palmscape',
//	'nokia'				=> 'Nokia',
//	'ericsson'			=> 'Ericsson',
//	'blackberry'		=> 'BlackBerry',
//	'motorola'			=> 'Motorola'

	// Phones and Manufacturers
	'motorola'		=> 'Motorola',
	'nokia'			=> 'Nokia',
	'palm'			=> 'Palm',
	'iphone'		=> 'Apple iPhone',
	'ipad'			=> 'iPad',
	'ipod'			=> 'Apple iPod Touch',
	'sony'			=> 'Sony Ericsson',
	'ericsson'		=> 'Sony Ericsson',
	'blackberry'	=> 'BlackBerry',
	'cocoon'		=> 'O2 Cocoon',
	'blazer'		=> 'Treo',
	'lg'			=> 'LG',
	'amoi'			=> 'Amoi',
	'xda'			=> 'XDA',
	'mda'			=> 'MDA',
	'vario'			=> 'Vario',
	'htc'			=> 'HTC',
	'samsung'		=> 'Samsung',
	'sharp'			=> 'Sharp',
	'sie-'			=> 'Siemens',
	'alcatel'		=> 'Alcatel',
	'benq'			=> 'BenQ',
	'ipaq'			=> 'HP iPaq',
	'mot-'			=> 'Motorola',
	'playstation portable'	=> 'PlayStation Portable',
	'playstation 3'		=> 'PlayStation 3',
	'playstation vita'  	=> 'PlayStation Vita',
	'hiptop'		=> 'Danger Hiptop',
	'nec-'			=> 'NEC',
	'panasonic'		=> 'Panasonic',
	'philips'		=> 'Philips',
	'sagem'			=> 'Sagem',
	'sanyo'			=> 'Sanyo',
	'spv'			=> 'SPV',
	'zte'			=> 'ZTE',
	'sendo'			=> 'Sendo',
	'nintendo dsi'	=> 'Nintendo DSi',
	'nintendo ds'	=> 'Nintendo DS',
	'nintendo 3ds'	=> 'Nintendo 3DS',
	'wii'			=> 'Nintendo Wii',
	'open web'		=> 'Open Web',
	'openweb'		=> 'OpenWeb',

	// Operating Systems
	'android'		=> 'Android',
	'symbian'		=> 'Symbian',
	'SymbianOS'		=> 'SymbianOS',
	'elaine'		=> 'Palm',
	'series60'		=> 'Symbian S60',
	'windows ce'	=> 'Windows CE',

	// Browsers
	'obigo'			=> 'Obigo',
	'netfront'		=> 'Netfront Browser',
	'openwave'		=> 'Openwave Browser',
	'mobilexplorer'	=> 'Mobile Explorer',
	'operamini'		=> 'Opera Mini',
	'opera mini'	=> 'Opera Mini',
	'opera mobi'	=> 'Opera Mobile',
	'fennec'		=> 'Firefox Mobile',

	// Other
	'digital paths'	=> 'Digital Paths',
	'avantgo'		=> 'AvantGo',
	'xiino'			=> 'Xiino',
	'novarra'		=> 'Novarra Transcoder',
	'vodafone'		=> 'Vodafone',
	'docomo'		=> 'NTT DoCoMo',
	'o2'			=> 'O2',

	// Fallback
	'mobile'		=> 'Generic Mobile',
	'wireless'		=> 'Generic Mobile',
	'j2me'			=> 'Generic Mobile',
	'midp'			=> 'Generic Mobile',
	'cldc'			=> 'Generic Mobile',
	'up.link'		=> 'Generic Mobile',
	'up.browser'	=> 'Generic Mobile',
	'smartphone'	=> 'Generic Mobile',
	'cellphone'		=> 'Generic Mobile'
);

// There are hundreds of bots but these are the most common.
$robots = array(
	'googlebot'		=> 'Googlebot',
	'msnbot'		=> 'MSNBot',
	'baiduspider'		=> 'Baiduspider',
	'bingbot'		=> 'Bing',
	'slurp'			=> 'Inktomi Slurp',
	'yahoo'			=> 'Yahoo',
	'ask jeeves'		=> 'Ask Jeeves',
	'fastcrawler'		=> 'FastCrawler',
	'infoseek'		=> 'InfoSeek Robot 1.0',
	'lycos'			=> 'Lycos',
	'yandex'		=> 'YandexBot',
	'mediapartners-google'	=> 'MediaPartners Google',
	'CRAZYWEBCRAWLER'	=> 'Crazy Webcrawler',
	'adsbot-google'		=> 'AdsBot Google',
	'feedfetcher-google'	=> 'Feedfetcher Google',
	'curious george'	=> 'Curious George',
	'ia_archiver'		=> 'Alexa Crawler',
	'MJ12bot'		=> 'Majestic-12',
	'Uptimebot'		=> 'Uptimebot'
);


================================================
FILE: application/controllers/Login.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use \QCloud_WeApp_SDK\Auth\LoginService as LoginService;

class Login extends CI_Controller {
    public function index() {
        $result = LoginService::login();
        // notes: do not echo anything
    }
}


================================================
FILE: application/controllers/Tunnel.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use \QCloud_WeApp_SDK\Tunnel\TunnelService as TunnelService;

require APPPATH.'business/ChatTunnelHandler.php';

class Tunnel extends CI_Controller {
    public function index() {
        $handler = new ChatTunnelHandler();
        TunnelService::handle($handler, array('checkLogin' => TRUE));
    }
}


================================================
FILE: application/controllers/User.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use \QCloud_WeApp_SDK\Auth\LoginService as LoginService;

class User extends CI_Controller {
    public function index() {
        $result = LoginService::check();

        // check failed
        if ($result['code'] !== 0) {
            return;
        }

        $response = array(
            'code' => 0,
            'message' => 'ok',
            'data' => array(
                'userInfo' => $result['data']['userInfo'],
            ),
        );

        echo json_encode($response, JSON_FORCE_OBJECT);
    }
}


================================================
FILE: application/controllers/Welcome.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {

	/**
	 * Index Page for this controller.
	 *
	 * Maps to the following URL
	 * 		http://example.com/index.php/welcome
	 *	- or -
	 * 		http://example.com/index.php/welcome/index
	 *	- or -
	 * Since this controller is set as the default controller in
	 * config/routes.php, it's displayed at http://example.com/
	 *
	 * So any other public methods not prefixed with an underscore will
	 * map to /index.php/welcome/<method_name>
	 * @see https://codeigniter.com/user_guide/general/urls.html
	 */
	public function index()
	{
		$this->load->view('welcome_message');
	}
}


================================================
FILE: application/controllers/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/core/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/helpers/general_helper.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');


if (!function_exists('debug')) {
    /**
     * 调试专用
     */
    function debug() {
        $numargs = func_num_args();
        $arg_list = func_get_args();
        $messages = array();

        for ($i = 0; $i < $numargs; $i += 1) {
            $message = $arg_list[$i];

            if (is_array($message)) {
                if (version_compare(PHP_VERSION, '5.4.0') >= 0) {
                    $message = json_encode($message, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
                } else {
                    $message = json_encode($message);
                }
            }

            if (is_string($message) || is_numeric($message)) {
                $messages[] = $message;
            }
        }

        log_message('debug', implode(' ', $messages) . "\n");
    }
}


================================================
FILE: application/helpers/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/hooks/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/language/english/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/language/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/libraries/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/logs/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/models/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/third_party/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/views/errors/cli/error_404.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

echo "\nERROR: ",
	$heading,
	"\n\n",
	$message,
	"\n\n";

================================================
FILE: application/views/errors/cli/error_db.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

echo "\nDatabase error: ",
	$heading,
	"\n\n",
	$message,
	"\n\n";

================================================
FILE: application/views/errors/cli/error_exception.php
================================================
<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

An uncaught Exception was encountered

Type:        <?php echo get_class($exception), "\n"; ?>
Message:     <?php echo $message, "\n"; ?>
Filename:    <?php echo $exception->getFile(), "\n"; ?>
Line Number: <?php echo $exception->getLine(); ?>

<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>

Backtrace:
<?php	foreach ($exception->getTrace() as $error): ?>
<?php		if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>
	File: <?php echo $error['file'], "\n"; ?>
	Line: <?php echo $error['line'], "\n"; ?>
	Function: <?php echo $error['function'], "\n\n"; ?>
<?php		endif ?>
<?php	endforeach ?>

<?php endif ?>


================================================
FILE: application/views/errors/cli/error_general.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

echo "\nERROR: ",
	$heading,
	"\n\n",
	$message,
	"\n\n";

================================================
FILE: application/views/errors/cli/error_php.php
================================================
<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

A PHP Error was encountered

Severity:    <?php echo $severity, "\n"; ?>
Message:     <?php echo $message, "\n"; ?>
Filename:    <?php echo $filepath, "\n"; ?>
Line Number: <?php echo $line; ?>

<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>

Backtrace:
<?php	foreach (debug_backtrace() as $error): ?>
<?php		if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>
	File: <?php echo $error['file'], "\n"; ?>
	Line: <?php echo $error['line'], "\n"; ?>
	Function: <?php echo $error['function'], "\n\n"; ?>
<?php		endif ?>
<?php	endforeach ?>

<?php endif ?>


================================================
FILE: application/views/errors/cli/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/views/errors/html/error_404.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>404 Page Not Found</title>
<style type="text/css">

::selection { background-color: #E13300; color: white; }
::-moz-selection { background-color: #E13300; color: white; }

body {
	background-color: #fff;
	margin: 40px;
	font: 13px/20px normal Helvetica, Arial, sans-serif;
	color: #4F5155;
}

a {
	color: #003399;
	background-color: transparent;
	font-weight: normal;
}

h1 {
	color: #444;
	background-color: transparent;
	border-bottom: 1px solid #D0D0D0;
	font-size: 19px;
	font-weight: normal;
	margin: 0 0 14px 0;
	padding: 14px 15px 10px 15px;
}

code {
	font-family: Consolas, Monaco, Courier New, Courier, monospace;
	font-size: 12px;
	background-color: #f9f9f9;
	border: 1px solid #D0D0D0;
	color: #002166;
	display: block;
	margin: 14px 0 14px 0;
	padding: 12px 10px 12px 10px;
}

#container {
	margin: 10px;
	border: 1px solid #D0D0D0;
	box-shadow: 0 0 8px #D0D0D0;
}

p {
	margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
	<div id="container">
		<h1><?php echo $heading; ?></h1>
		<?php echo $message; ?>
	</div>
</body>
</html>

================================================
FILE: application/views/errors/html/error_db.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Database Error</title>
<style type="text/css">

::selection { background-color: #E13300; color: white; }
::-moz-selection { background-color: #E13300; color: white; }

body {
	background-color: #fff;
	margin: 40px;
	font: 13px/20px normal Helvetica, Arial, sans-serif;
	color: #4F5155;
}

a {
	color: #003399;
	background-color: transparent;
	font-weight: normal;
}

h1 {
	color: #444;
	background-color: transparent;
	border-bottom: 1px solid #D0D0D0;
	font-size: 19px;
	font-weight: normal;
	margin: 0 0 14px 0;
	padding: 14px 15px 10px 15px;
}

code {
	font-family: Consolas, Monaco, Courier New, Courier, monospace;
	font-size: 12px;
	background-color: #f9f9f9;
	border: 1px solid #D0D0D0;
	color: #002166;
	display: block;
	margin: 14px 0 14px 0;
	padding: 12px 10px 12px 10px;
}

#container {
	margin: 10px;
	border: 1px solid #D0D0D0;
	box-shadow: 0 0 8px #D0D0D0;
}

p {
	margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
	<div id="container">
		<h1><?php echo $heading; ?></h1>
		<?php echo $message; ?>
	</div>
</body>
</html>

================================================
FILE: application/views/errors/html/error_exception.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>An uncaught Exception was encountered</h4>

<p>Type: <?php echo get_class($exception); ?></p>
<p>Message: <?php echo $message; ?></p>
<p>Filename: <?php echo $exception->getFile(); ?></p>
<p>Line Number: <?php echo $exception->getLine(); ?></p>

<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>

	<p>Backtrace:</p>
	<?php foreach ($exception->getTrace() as $error): ?>

		<?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>

			<p style="margin-left:10px">
			File: <?php echo $error['file']; ?><br />
			Line: <?php echo $error['line']; ?><br />
			Function: <?php echo $error['function']; ?>
			</p>
		<?php endif ?>

	<?php endforeach ?>

<?php endif ?>

</div>

================================================
FILE: application/views/errors/html/error_general.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
<style type="text/css">

::selection { background-color: #E13300; color: white; }
::-moz-selection { background-color: #E13300; color: white; }

body {
	background-color: #fff;
	margin: 40px;
	font: 13px/20px normal Helvetica, Arial, sans-serif;
	color: #4F5155;
}

a {
	color: #003399;
	background-color: transparent;
	font-weight: normal;
}

h1 {
	color: #444;
	background-color: transparent;
	border-bottom: 1px solid #D0D0D0;
	font-size: 19px;
	font-weight: normal;
	margin: 0 0 14px 0;
	padding: 14px 15px 10px 15px;
}

code {
	font-family: Consolas, Monaco, Courier New, Courier, monospace;
	font-size: 12px;
	background-color: #f9f9f9;
	border: 1px solid #D0D0D0;
	color: #002166;
	display: block;
	margin: 14px 0 14px 0;
	padding: 12px 10px 12px 10px;
}

#container {
	margin: 10px;
	border: 1px solid #D0D0D0;
	box-shadow: 0 0 8px #D0D0D0;
}

p {
	margin: 12px 15px 12px 15px;
}
</style>
</head>
<body>
	<div id="container">
		<h1><?php echo $heading; ?></h1>
		<?php echo $message; ?>
	</div>
</body>
</html>

================================================
FILE: application/views/errors/html/error_php.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: <?php echo $severity; ?></p>
<p>Message:  <?php echo $message; ?></p>
<p>Filename: <?php echo $filepath; ?></p>
<p>Line Number: <?php echo $line; ?></p>

<?php if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE === TRUE): ?>

	<p>Backtrace:</p>
	<?php foreach (debug_backtrace() as $error): ?>

		<?php if (isset($error['file']) && strpos($error['file'], realpath(BASEPATH)) !== 0): ?>

			<p style="margin-left:10px">
			File: <?php echo $error['file'] ?><br />
			Line: <?php echo $error['line'] ?><br />
			Function: <?php echo $error['function'] ?>
			</p>

		<?php endif ?>

	<?php endforeach ?>

<?php endif ?>

</div>

================================================
FILE: application/views/errors/html/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/views/errors/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/views/index.html
================================================
<!DOCTYPE html>
<html>
<head>
	<title>403 Forbidden</title>
</head>
<body>

<p>Directory access is forbidden.</p>

</body>
</html>


================================================
FILE: application/views/welcome_message.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>腾讯云微信小程序服务器 Demo - PHP</title>
    <style type="text/css">

    ::selection { background-color: #E13300; color: white; }
    ::-moz-selection { background-color: #E13300; color: white; }

    body {
        background-color: #fff;
        margin: 40px;
        font: 13px/20px normal Helvetica, Arial, sans-serif;
        color: #4F5155;
    }

    a {
        color: #003399;
        background-color: transparent;
        font-weight: normal;
        text-decoration: none;
    }

    h1 {
        color: #444;
        background-color: transparent;
        border-bottom: 1px solid #D0D0D0;
        font-size: 19px;
        font-weight: normal;
        margin: 0 0 14px 0;
        padding: 14px 0;
    }

    p.footer {
    	text-align: right;
    	font-size: 11px;
    	border-top: 1px solid #D0D0D0;
    	line-height: 32px;
    	padding: 0 10px 0 10px;
    	margin: 20px 0 0 0;
    }

    #container {
        margin: 10px;
        padding: 10px 20px;
        border: 1px solid #D0D0D0;
        box-shadow: 0 0 8px #D0D0D0;
    }
    </style>
</head>
<body>
    <div id="container">
        <h1>腾讯云微信小程序服务端 Demo - PHP</h1>
        <p>会话管理服务</p>
        <ul>
            <li><a href="/login">登录服务</a></li>
            <li><a href="/user">检查登录</a></li>
        </ul>
        <p>信道服务</p>
        <ul>
            <li><a href="/tunnel">获得信道地址</a></li>
        </ul>

        <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo  (ENVIRONMENT === 'development') ?  'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p>
    </div>
</body>
</html>

================================================
FILE: composer.json
================================================
{
    "require": {
        "qcloud/weapp-sdk": "v0.4.4"
    }
}


================================================
FILE: index.php
================================================
<?php

/**
 * 设置时区
 */
date_default_timezone_set('Asia/Shanghai');

/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */

/*
 *---------------------------------------------------------------
 * APPLICATION ENVIRONMENT
 *---------------------------------------------------------------
 *
 * You can load different configurations depending on your
 * current environment. Setting the environment also influences
 * things like logging and error reporting.
 *
 * This can be set to anything, but default usage is:
 *
 *     development
 *     testing
 *     production
 *
 * NOTE: If you change these, also change the error_reporting() code below
 */
	define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

/*
 *---------------------------------------------------------------
 * ERROR REPORTING
 *---------------------------------------------------------------
 *
 * Different environments will require different levels of error reporting.
 * By default development will show errors but testing and live will hide them.
 */
switch (ENVIRONMENT)
{
	case 'development':
		error_reporting(-1);
		ini_set('display_errors', 1);
	break;

	case 'testing':
	case 'production':
		ini_set('display_errors', 0);
		if (version_compare(PHP_VERSION, '5.3', '>='))
		{
			error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
		}
		else
		{
			error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
		}
	break;

	default:
		header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
		echo 'The application environment is not set correctly.';
		exit(1); // EXIT_ERROR
}

/*
 *---------------------------------------------------------------
 * SYSTEM DIRECTORY NAME
 *---------------------------------------------------------------
 *
 * This variable must contain the name of your "system" directory.
 * Set the path if it is not in the same directory as this file.
 */
	$system_path = 'system';

/*
 *---------------------------------------------------------------
 * APPLICATION DIRECTORY NAME
 *---------------------------------------------------------------
 *
 * If you want this front controller to use a different "application"
 * directory than the default one you can set its name here. The directory
 * can also be renamed or relocated anywhere on your server. If you do,
 * use an absolute (full) server path.
 * For more info please see the user guide:
 *
 * https://codeigniter.com/user_guide/general/managing_apps.html
 *
 * NO TRAILING SLASH!
 */
	$application_folder = 'application';

/*
 *---------------------------------------------------------------
 * VIEW DIRECTORY NAME
 *---------------------------------------------------------------
 *
 * If you want to move the view directory out of the application
 * directory, set the path to it here. The directory can be renamed
 * and relocated anywhere on your server. If blank, it will default
 * to the standard location inside your application directory.
 * If you do move this, use an absolute (full) server path.
 *
 * NO TRAILING SLASH!
 */
	$view_folder = '';


/*
 * --------------------------------------------------------------------
 * DEFAULT CONTROLLER
 * --------------------------------------------------------------------
 *
 * Normally you will set your default controller in the routes.php file.
 * You can, however, force a custom routing by hard-coding a
 * specific controller class/function here. For most applications, you
 * WILL NOT set your routing here, but it's an option for those
 * special instances where you might want to override the standard
 * routing in a specific front controller that shares a common CI installation.
 *
 * IMPORTANT: If you set the routing here, NO OTHER controller will be
 * callable. In essence, this preference limits your application to ONE
 * specific controller. Leave the function name blank if you need
 * to call functions dynamically via the URI.
 *
 * Un-comment the $routing array below to use this feature
 */
	// The directory name, relative to the "controllers" directory.  Leave blank
	// if your controller is not in a sub-directory within the "controllers" one
	// $routing['directory'] = '';

	// The controller class file name.  Example:  mycontroller
	// $routing['controller'] = '';

	// The controller function you wish to be called.
	// $routing['function']	= '';


/*
 * -------------------------------------------------------------------
 *  CUSTOM CONFIG VALUES
 * -------------------------------------------------------------------
 *
 * The $assign_to_config array below will be passed dynamically to the
 * config class when initialized. This allows you to set custom config
 * items or override any default config values found in the config.php file.
 * This can be handy as it permits you to share one application between
 * multiple front controller files, with each file containing different
 * config values.
 *
 * Un-comment the $assign_to_config array below to use this feature
 */
	// $assign_to_config['name_of_config_item'] = 'value of config item';



// --------------------------------------------------------------------
// END OF USER CONFIGURABLE SETTINGS.  DO NOT EDIT BELOW THIS LINE
// --------------------------------------------------------------------

/*
 * ---------------------------------------------------------------
 *  Resolve the system path for increased reliability
 * ---------------------------------------------------------------
 */

	// Set the current directory correctly for CLI requests
	if (defined('STDIN'))
	{
		chdir(dirname(__FILE__));
	}

	if (($_temp = realpath($system_path)) !== FALSE)
	{
		$system_path = $_temp.DIRECTORY_SEPARATOR;
	}
	else
	{
		// Ensure there's a trailing slash
		$system_path = strtr(
			rtrim($system_path, '/\\'),
			'/\\',
			DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
		).DIRECTORY_SEPARATOR;
	}

	// Is the system path correct?
	if ( ! is_dir($system_path))
	{
		header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
		echo 'Your system folder path does not appear to be set correctly. Please open the following file and correct this: '.pathinfo(__FILE__, PATHINFO_BASENAME);
		exit(3); // EXIT_CONFIG
	}

/*
 * -------------------------------------------------------------------
 *  Now that we know the path, set the main path constants
 * -------------------------------------------------------------------
 */
	// The name of THIS file
	define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));

	// Path to the system directory
	define('BASEPATH', $system_path);

	// Path to the front controller (this file) directory
	define('FCPATH', dirname(__FILE__).DIRECTORY_SEPARATOR);

	// Name of the "system" directory
	define('SYSDIR', basename(BASEPATH));

	// The path to the "application" directory
	if (is_dir($application_folder))
	{
		if (($_temp = realpath($application_folder)) !== FALSE)
		{
			$application_folder = $_temp;
		}
		else
		{
			$application_folder = strtr(
				rtrim($application_folder, '/\\'),
				'/\\',
				DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
			);
		}
	}
	elseif (is_dir(BASEPATH.$application_folder.DIRECTORY_SEPARATOR))
	{
		$application_folder = BASEPATH.strtr(
			trim($application_folder, '/\\'),
			'/\\',
			DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
		);
	}
	else
	{
		header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
		echo 'Your application folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF;
		exit(3); // EXIT_CONFIG
	}

	define('APPPATH', $application_folder.DIRECTORY_SEPARATOR);

	// The path to the "views" directory
	if ( ! isset($view_folder[0]) && is_dir(APPPATH.'views'.DIRECTORY_SEPARATOR))
	{
		$view_folder = APPPATH.'views';
	}
	elseif (is_dir($view_folder))
	{
		if (($_temp = realpath($view_folder)) !== FALSE)
		{
			$view_folder = $_temp;
		}
		else
		{
			$view_folder = strtr(
				rtrim($view_folder, '/\\'),
				'/\\',
				DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
			);
		}
	}
	elseif (is_dir(APPPATH.$view_folder.DIRECTORY_SEPARATOR))
	{
		$view_folder = APPPATH.strtr(
			trim($view_folder, '/\\'),
			'/\\',
			DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR
		);
	}
	else
	{
		header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
		echo 'Your view folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF;
		exit(3); // EXIT_CONFIG
	}

	define('VIEWPATH', $view_folder.DIRECTORY_SEPARATOR);

/*
 * --------------------------------------------------------------------
 * LOAD and SETUP `QCLOUD SDK CONFIGURATION`
 * --------------------------------------------------------------------
 */
require_once './install_qcloud_sdk.php';

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 */
require_once BASEPATH.'core/CodeIgniter.php';


================================================
FILE: install_qcloud_sdk.php
================================================
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

// 加载 SDK
require_once './vendor/autoload.php';
// require_once './weapp-sdk/AutoLoader.php';

use \QCloud_WeApp_SDK\Conf as Conf;

// Windows
if (PHP_OS === 'WINNT') {
    $sdkConfig = 'C:\qcloud\sdk.config';

// Linux
} else {
    $sdkConfig = '/etc/qcloud/sdk.config';
}

if (!file_exists($sdkConfig)) {
    echo "SDK 配置文件({$sdkConfig})不存在";
    die;
}

$config = json_decode(file_get_contents($sdkConfig), TRUE);

if (!is_array($config)) {
    echo "SDK 配置文件({$sdkConfig})内容不合法";
    die;
}

/**
 * --------------------------------------------------------------------
 * 设置 SDK 基本配置
 * --------------------------------------------------------------------
 */
Conf::setup(array(
    'ServerHost' => $config['serverHost'],
    'AuthServerUrl' => $config['authServerUrl'],
    'TunnelServerUrl' => $config['tunnelServerUrl'],
    'TunnelSignatureKey' => $config['tunnelSignatureKey'],
));

/**
 * 也可以调用独立方法进行设置
 *
 * Conf::setServerHost($config['serverHost']);
 * Conf::setAuthServerUrl($config['authServerUrl']);
 * Conf::setTunnelServerUrl($config['tunnelServerUrl']);
 * Conf::setTunnelSignatureKey($config['tunnelSignatureKey']);
 */

// 设置网络请求超时时长(可选,默认 30 秒)
Conf::setNetworkTimeout($config['networkTimeout']);


/**
 * --------------------------------------------------------------------
 * 设置 SDK 日志输出配置(主要是方便调试)
 * --------------------------------------------------------------------
 */

// 开启日志输出功能
Conf::setEnableOutputLog(TRUE);

// 指定 SDK 日志输出目录(注意尾斜杠不能省略)
Conf::setLogPath(APPPATH.'logs/');

// 设置日志输出级别
// 1 => ERROR, 2 => DEBUG, 3 => INFO, 4 => ALL
Conf::setLogThresholdArray(array(2)); // output debug log only


================================================
FILE: system/.htaccess
================================================
<IfModule authz_core_module>
	Require all denied
</IfModule>
<IfModule !authz_core_module>
	Deny from all
</IfModule>

================================================
FILE: system/core/Benchmark.php
================================================
<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Benchmark Class
 *
 * This class enables you to mark points and calculate the time difference
 * between them. Memory consumption can also be displayed.
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Libraries
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/libraries/benchmark.html
 */
class CI_Benchmark {

	/**
	 * List of all benchmark markers
	 *
	 * @var	array
	 */
	public $marker = array();

	/**
	 * Set a benchmark marker
	 *
	 * Multiple calls to this function can be made so that several
	 * execution points can be timed.
	 *
	 * @param	string	$name	Marker name
	 * @return	void
	 */
	public function mark($name)
	{
		$this->marker[$name] = microtime(TRUE);
	}

	// --------------------------------------------------------------------

	/**
	 * Elapsed time
	 *
	 * Calculates the time difference between two marked points.
	 *
	 * If the first parameter is empty this function instead returns the
	 * {elapsed_time} pseudo-variable. This permits the full system
	 * execution time to be shown in a template. The output class will
	 * swap the real value for this variable.
	 *
	 * @param	string	$point1		A particular marked point
	 * @param	string	$point2		A particular marked point
	 * @param	int	$decimals	Number of decimal places
	 *
	 * @return	string	Calculated elapsed time on success,
	 *			an '{elapsed_string}' if $point1 is empty
	 *			or an empty string if $point1 is not found.
	 */
	public function elapsed_time($point1 = '', $point2 = '', $decimals = 4)
	{
		if ($point1 === '')
		{
			return '{elapsed_time}';
		}

		if ( ! isset($this->marker[$point1]))
		{
			return '';
		}

		if ( ! isset($this->marker[$point2]))
		{
			$this->marker[$point2] = microtime(TRUE);
		}

		return number_format($this->marker[$point2] - $this->marker[$point1], $decimals);
	}

	// --------------------------------------------------------------------

	/**
	 * Memory Usage
	 *
	 * Simply returns the {memory_usage} marker.
	 *
	 * This permits it to be put it anywhere in a template
	 * without the memory being calculated until the end.
	 * The output class will swap the real value for this variable.
	 *
	 * @return	string	'{memory_usage}'
	 */
	public function memory_usage()
	{
		return '{memory_usage}';
	}

}


================================================
FILE: system/core/CodeIgniter.php
================================================
<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * System Initialization File
 *
 * Loads the base classes and executes the request.
 *
 * @package		CodeIgniter
 * @subpackage	CodeIgniter
 * @category	Front-controller
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/
 */

/**
 * CodeIgniter Version
 *
 * @var	string
 *
 */
	define('CI_VERSION', '3.1.0');

/*
 * ------------------------------------------------------
 *  Load the framework constants
 * ------------------------------------------------------
 */
	if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/constants.php'))
	{
		require_once(APPPATH.'config/'.ENVIRONMENT.'/constants.php');
	}

	require_once(APPPATH.'config/constants.php');

/*
 * ------------------------------------------------------
 *  Load the global functions
 * ------------------------------------------------------
 */
	require_once(BASEPATH.'core/Common.php');


/*
 * ------------------------------------------------------
 * Security procedures
 * ------------------------------------------------------
 */

if ( ! is_php('5.4'))
{
	ini_set('magic_quotes_runtime', 0);

	if ((bool) ini_get('register_globals'))
	{
		$_protected = array(
			'_SERVER',
			'_GET',
			'_POST',
			'_FILES',
			'_REQUEST',
			'_SESSION',
			'_ENV',
			'_COOKIE',
			'GLOBALS',
			'HTTP_RAW_POST_DATA',
			'system_path',
			'application_folder',
			'view_folder',
			'_protected',
			'_registered'
		);

		$_registered = ini_get('variables_order');
		foreach (array('E' => '_ENV', 'G' => '_GET', 'P' => '_POST', 'C' => '_COOKIE', 'S' => '_SERVER') as $key => $superglobal)
		{
			if (strpos($_registered, $key) === FALSE)
			{
				continue;
			}

			foreach (array_keys($$superglobal) as $var)
			{
				if (isset($GLOBALS[$var]) && ! in_array($var, $_protected, TRUE))
				{
					$GLOBALS[$var] = NULL;
				}
			}
		}
	}
}


/*
 * ------------------------------------------------------
 *  Define a custom error handler so we can log PHP errors
 * ------------------------------------------------------
 */
	set_error_handler('_error_handler');
	set_exception_handler('_exception_handler');
	register_shutdown_function('_shutdown_handler');

/*
 * ------------------------------------------------------
 *  Set the subclass_prefix
 * ------------------------------------------------------
 *
 * Normally the "subclass_prefix" is set in the config file.
 * The subclass prefix allows CI to know if a core class is
 * being extended via a library in the local application
 * "libraries" folder. Since CI allows config items to be
 * overridden via data set in the main index.php file,
 * before proceeding we need to know if a subclass_prefix
 * override exists. If so, we will set this value now,
 * before any classes are loaded
 * Note: Since the config file data is cached it doesn't
 * hurt to load it here.
 */
	if ( ! empty($assign_to_config['subclass_prefix']))
	{
		get_config(array('subclass_prefix' => $assign_to_config['subclass_prefix']));
	}

/*
 * ------------------------------------------------------
 *  Should we use a Composer autoloader?
 * ------------------------------------------------------
 */
	if ($composer_autoload = config_item('composer_autoload'))
	{
		if ($composer_autoload === TRUE)
		{
			file_exists(APPPATH.'vendor/autoload.php')
				? require_once(APPPATH.'vendor/autoload.php')
				: log_message('error', '$config[\'composer_autoload\'] is set to TRUE but '.APPPATH.'vendor/autoload.php was not found.');
		}
		elseif (file_exists($composer_autoload))
		{
			require_once($composer_autoload);
		}
		else
		{
			log_message('error', 'Could not find the specified $config[\'composer_autoload\'] path: '.$composer_autoload);
		}
	}

/*
 * ------------------------------------------------------
 *  Start the timer... tick tock tick tock...
 * ------------------------------------------------------
 */
	$BM =& load_class('Benchmark', 'core');
	$BM->mark('total_execution_time_start');
	$BM->mark('loading_time:_base_classes_start');

/*
 * ------------------------------------------------------
 *  Instantiate the hooks class
 * ------------------------------------------------------
 */
	$EXT =& load_class('Hooks', 'core');

/*
 * ------------------------------------------------------
 *  Is there a "pre_system" hook?
 * ------------------------------------------------------
 */
	$EXT->call_hook('pre_system');

/*
 * ------------------------------------------------------
 *  Instantiate the config class
 * ------------------------------------------------------
 *
 * Note: It is important that Config is loaded first as
 * most other classes depend on it either directly or by
 * depending on another class that uses it.
 *
 */
	$CFG =& load_class('Config', 'core');

	// Do we have any manually set config items in the index.php file?
	if (isset($assign_to_config) && is_array($assign_to_config))
	{
		foreach ($assign_to_config as $key => $value)
		{
			$CFG->set_item($key, $value);
		}
	}

/*
 * ------------------------------------------------------
 * Important charset-related stuff
 * ------------------------------------------------------
 *
 * Configure mbstring and/or iconv if they are enabled
 * and set MB_ENABLED and ICONV_ENABLED constants, so
 * that we don't repeatedly do extension_loaded() or
 * function_exists() calls.
 *
 * Note: UTF-8 class depends on this. It used to be done
 * in it's constructor, but it's _not_ class-specific.
 *
 */
	$charset = strtoupper(config_item('charset'));
	ini_set('default_charset', $charset);

	if (extension_loaded('mbstring'))
	{
		define('MB_ENABLED', TRUE);
		// mbstring.internal_encoding is deprecated starting with PHP 5.6
		// and it's usage triggers E_DEPRECATED messages.
		@ini_set('mbstring.internal_encoding', $charset);
		// This is required for mb_convert_encoding() to strip invalid characters.
		// That's utilized by CI_Utf8, but it's also done for consistency with iconv.
		mb_substitute_character('none');
	}
	else
	{
		define('MB_ENABLED', FALSE);
	}

	// There's an ICONV_IMPL constant, but the PHP manual says that using
	// iconv's predefined constants is "strongly discouraged".
	if (extension_loaded('iconv'))
	{
		define('ICONV_ENABLED', TRUE);
		// iconv.internal_encoding is deprecated starting with PHP 5.6
		// and it's usage triggers E_DEPRECATED messages.
		@ini_set('iconv.internal_encoding', $charset);
	}
	else
	{
		define('ICONV_ENABLED', FALSE);
	}

	if (is_php('5.6'))
	{
		ini_set('php.internal_encoding', $charset);
	}

/*
 * ------------------------------------------------------
 *  Load compatibility features
 * ------------------------------------------------------
 */

	require_once(BASEPATH.'core/compat/mbstring.php');
	require_once(BASEPATH.'core/compat/hash.php');
	require_once(BASEPATH.'core/compat/password.php');
	require_once(BASEPATH.'core/compat/standard.php');

/*
 * ------------------------------------------------------
 *  Instantiate the UTF-8 class
 * ------------------------------------------------------
 */
	$UNI =& load_class('Utf8', 'core');

/*
 * ------------------------------------------------------
 *  Instantiate the URI class
 * ------------------------------------------------------
 */
	$URI =& load_class('URI', 'core');

/*
 * ------------------------------------------------------
 *  Instantiate the routing class and set the routing
 * ------------------------------------------------------
 */
	$RTR =& load_class('Router', 'core', isset($routing) ? $routing : NULL);

/*
 * ------------------------------------------------------
 *  Instantiate the output class
 * ------------------------------------------------------
 */
	$OUT =& load_class('Output', 'core');

/*
 * ------------------------------------------------------
 *	Is there a valid cache file? If so, we're done...
 * ------------------------------------------------------
 */
	if ($EXT->call_hook('cache_override') === FALSE && $OUT->_display_cache($CFG, $URI) === TRUE)
	{
		exit;
	}

/*
 * -----------------------------------------------------
 * Load the security class for xss and csrf support
 * -----------------------------------------------------
 */
	$SEC =& load_class('Security', 'core');

/*
 * ------------------------------------------------------
 *  Load the Input class and sanitize globals
 * ------------------------------------------------------
 */
	$IN	=& load_class('Input', 'core');

/*
 * ------------------------------------------------------
 *  Load the Language class
 * ------------------------------------------------------
 */
	$LANG =& load_class('Lang', 'core');

/*
 * ------------------------------------------------------
 *  Load the app controller and local controller
 * ------------------------------------------------------
 *
 */
	// Load the base controller class
	require_once BASEPATH.'core/Controller.php';

	/**
	 * Reference to the CI_Controller method.
	 *
	 * Returns current CI instance object
	 *
	 * @return CI_Controller
	 */
	function &get_instance()
	{
		return CI_Controller::get_instance();
	}

	if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php'))
	{
		require_once APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php';
	}

	// Set a mark point for benchmarking
	$BM->mark('loading_time:_base_classes_end');

/*
 * ------------------------------------------------------
 *  Sanity checks
 * ------------------------------------------------------
 *
 *  The Router class has already validated the request,
 *  leaving us with 3 options here:
 *
 *	1) an empty class name, if we reached the default
 *	   controller, but it didn't exist;
 *	2) a query string which doesn't go through a
 *	   file_exists() check
 *	3) a regular request for a non-existing page
 *
 *  We handle all of these as a 404 error.
 *
 *  Furthermore, none of the methods in the app controller
 *  or the loader class can be called via the URI, nor can
 *  controller methods that begin with an underscore.
 */

	$e404 = FALSE;
	$class = ucfirst($RTR->class);
	$method = $RTR->method;

	if (empty($class) OR ! file_exists(APPPATH.'controllers/'.$RTR->directory.$class.'.php'))
	{
		$e404 = TRUE;
	}
	else
	{
		require_once(APPPATH.'controllers/'.$RTR->directory.$class.'.php');

		if ( ! class_exists($class, FALSE) OR $method[0] === '_' OR method_exists('CI_Controller', $method))
		{
			$e404 = TRUE;
		}
		elseif (method_exists($class, '_remap'))
		{
			$params = array($method, array_slice($URI->rsegments, 2));
			$method = '_remap';
		}
		// WARNING: It appears that there are issues with is_callable() even in PHP 5.2!
		// Furthermore, there are bug reports and feature/change requests related to it
		// that make it unreliable to use in this context. Please, DO NOT change this
		// work-around until a better alternative is available.
		elseif ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($class)), TRUE))
		{
			$e404 = TRUE;
		}
	}

	if ($e404)
	{
		if ( ! empty($RTR->routes['404_override']))
		{
			if (sscanf($RTR->routes['404_override'], '%[^/]/%s', $error_class, $error_method) !== 2)
			{
				$error_method = 'index';
			}

			$error_class = ucfirst($error_class);

			if ( ! class_exists($error_class, FALSE))
			{
				if (file_exists(APPPATH.'controllers/'.$RTR->directory.$error_class.'.php'))
				{
					require_once(APPPATH.'controllers/'.$RTR->directory.$error_class.'.php');
					$e404 = ! class_exists($error_class, FALSE);
				}
				// Were we in a directory? If so, check for a global override
				elseif ( ! empty($RTR->directory) && file_exists(APPPATH.'controllers/'.$error_class.'.php'))
				{
					require_once(APPPATH.'controllers/'.$error_class.'.php');
					if (($e404 = ! class_exists($error_class, FALSE)) === FALSE)
					{
						$RTR->directory = '';
					}
				}
			}
			else
			{
				$e404 = FALSE;
			}
		}

		// Did we reset the $e404 flag? If so, set the rsegments, starting from index 1
		if ( ! $e404)
		{
			$class = $error_class;
			$method = $error_method;

			$URI->rsegments = array(
				1 => $class,
				2 => $method
			);
		}
		else
		{
			show_404($RTR->directory.$class.'/'.$method);
		}
	}

	if ($method !== '_remap')
	{
		$params = array_slice($URI->rsegments, 2);
	}

/*
 * ------------------------------------------------------
 *  Is there a "pre_controller" hook?
 * ------------------------------------------------------
 */
	$EXT->call_hook('pre_controller');

/*
 * ------------------------------------------------------
 *  Instantiate the requested controller
 * ------------------------------------------------------
 */
	// Mark a start point so we can benchmark the controller
	$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start');

	$CI = new $class();

/*
 * ------------------------------------------------------
 *  Is there a "post_controller_constructor" hook?
 * ------------------------------------------------------
 */
	$EXT->call_hook('post_controller_constructor');

/*
 * ------------------------------------------------------
 *  Call the requested method
 * ------------------------------------------------------
 */
	call_user_func_array(array(&$CI, $method), $params);

	// Mark a benchmark end point
	$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_end');

/*
 * ------------------------------------------------------
 *  Is there a "post_controller" hook?
 * ------------------------------------------------------
 */
	$EXT->call_hook('post_controller');

/*
 * ------------------------------------------------------
 *  Send the final rendered output to the browser
 * ------------------------------------------------------
 */
	if ($EXT->call_hook('display_override') === FALSE)
	{
		$OUT->_display();
	}

/*
 * ------------------------------------------------------
 *  Is there a "post_system" hook?
 * ------------------------------------------------------
 */
	$EXT->call_hook('post_system');


================================================
FILE: system/core/Common.php
================================================
<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Common Functions
 *
 * Loads the base classes and executes the request.
 *
 * @package		CodeIgniter
 * @subpackage	CodeIgniter
 * @category	Common Functions
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/
 */

// ------------------------------------------------------------------------

if ( ! function_exists('is_php'))
{
	/**
	 * Determines if the current version of PHP is equal to or greater than the supplied value
	 *
	 * @param	string
	 * @return	bool	TRUE if the current version is $version or higher
	 */
	function is_php($version)
	{
		static $_is_php;
		$version = (string) $version;

		if ( ! isset($_is_php[$version]))
		{
			$_is_php[$version] = version_compare(PHP_VERSION, $version, '>=');
		}

		return $_is_php[$version];
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('is_really_writable'))
{
	/**
	 * Tests for file writability
	 *
	 * is_writable() returns TRUE on Windows servers when you really can't write to
	 * the file, based on the read-only attribute. is_writable() is also unreliable
	 * on Unix servers if safe_mode is on.
	 *
	 * @link	https://bugs.php.net/bug.php?id=54709
	 * @param	string
	 * @return	bool
	 */
	function is_really_writable($file)
	{
		// If we're on a Unix server with safe_mode off we call is_writable
		if (DIRECTORY_SEPARATOR === '/' && (is_php('5.4') OR ! ini_get('safe_mode')))
		{
			return is_writable($file);
		}

		/* For Windows servers and safe_mode "on" installations we'll actually
		 * write a file then read it. Bah...
		 */
		if (is_dir($file))
		{
			$file = rtrim($file, '/').'/'.md5(mt_rand());
			if (($fp = @fopen($file, 'ab')) === FALSE)
			{
				return FALSE;
			}

			fclose($fp);
			@chmod($file, 0777);
			@unlink($file);
			return TRUE;
		}
		elseif ( ! is_file($file) OR ($fp = @fopen($file, 'ab')) === FALSE)
		{
			return FALSE;
		}

		fclose($fp);
		return TRUE;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('load_class'))
{
	/**
	 * Class registry
	 *
	 * This function acts as a singleton. If the requested class does not
	 * exist it is instantiated and set to a static variable. If it has
	 * previously been instantiated the variable is returned.
	 *
	 * @param	string	the class name being requested
	 * @param	string	the directory where the class should be found
	 * @param	string	an optional argument to pass to the class constructor
	 * @return	object
	 */
	function &load_class($class, $directory = 'libraries', $param = NULL)
	{
		static $_classes = array();

		// Does the class exist? If so, we're done...
		if (isset($_classes[$class]))
		{
			return $_classes[$class];
		}

		$name = FALSE;

		// Look for the class first in the local application/libraries folder
		// then in the native system/libraries folder
		foreach (array(APPPATH, BASEPATH) as $path)
		{
			if (file_exists($path.$directory.'/'.$class.'.php'))
			{
				$name = 'CI_'.$class;

				if (class_exists($name, FALSE) === FALSE)
				{
					require_once($path.$directory.'/'.$class.'.php');
				}

				break;
			}
		}

		// Is the request a class extension? If so we load it too
		if (file_exists(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php'))
		{
			$name = config_item('subclass_prefix').$class;

			if (class_exists($name, FALSE) === FALSE)
			{
				require_once(APPPATH.$directory.'/'.$name.'.php');
			}
		}

		// Did we find the class?
		if ($name === FALSE)
		{
			// Note: We use exit() rather than show_error() in order to avoid a
			// self-referencing loop with the Exceptions class
			set_status_header(503);
			echo 'Unable to locate the specified class: '.$class.'.php';
			exit(5); // EXIT_UNK_CLASS
		}

		// Keep track of what we just loaded
		is_loaded($class);

		$_classes[$class] = isset($param)
			? new $name($param)
			: new $name();
		return $_classes[$class];
	}
}

// --------------------------------------------------------------------

if ( ! function_exists('is_loaded'))
{
	/**
	 * Keeps track of which libraries have been loaded. This function is
	 * called by the load_class() function above
	 *
	 * @param	string
	 * @return	array
	 */
	function &is_loaded($class = '')
	{
		static $_is_loaded = array();

		if ($class !== '')
		{
			$_is_loaded[strtolower($class)] = $class;
		}

		return $_is_loaded;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('get_config'))
{
	/**
	 * Loads the main config.php file
	 *
	 * This function lets us grab the config file even if the Config class
	 * hasn't been instantiated yet
	 *
	 * @param	array
	 * @return	array
	 */
	function &get_config(Array $replace = array())
	{
		static $config;

		if (empty($config))
		{
			$file_path = APPPATH.'config/config.php';
			$found = FALSE;
			if (file_exists($file_path))
			{
				$found = TRUE;
				require($file_path);
			}

			// Is the config file in the environment folder?
			if (file_exists($file_path = APPPATH.'config/'.ENVIRONMENT.'/config.php'))
			{
				require($file_path);
			}
			elseif ( ! $found)
			{
				set_status_header(503);
				echo 'The configuration file does not exist.';
				exit(3); // EXIT_CONFIG
			}

			// Does the $config array exist in the file?
			if ( ! isset($config) OR ! is_array($config))
			{
				set_status_header(503);
				echo 'Your config file does not appear to be formatted correctly.';
				exit(3); // EXIT_CONFIG
			}
		}

		// Are any values being dynamically added or replaced?
		foreach ($replace as $key => $val)
		{
			$config[$key] = $val;
		}

		return $config;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('config_item'))
{
	/**
	 * Returns the specified config item
	 *
	 * @param	string
	 * @return	mixed
	 */
	function config_item($item)
	{
		static $_config;

		if (empty($_config))
		{
			// references cannot be directly assigned to static variables, so we use an array
			$_config[0] =& get_config();
		}

		return isset($_config[0][$item]) ? $_config[0][$item] : NULL;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('get_mimes'))
{
	/**
	 * Returns the MIME types array from config/mimes.php
	 *
	 * @return	array
	 */
	function &get_mimes()
	{
		static $_mimes;

		if (empty($_mimes))
		{
			if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'))
			{
				$_mimes = include(APPPATH.'config/'.ENVIRONMENT.'/mimes.php');
			}
			elseif (file_exists(APPPATH.'config/mimes.php'))
			{
				$_mimes = include(APPPATH.'config/mimes.php');
			}
			else
			{
				$_mimes = array();
			}
		}

		return $_mimes;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('is_https'))
{
	/**
	 * Is HTTPS?
	 *
	 * Determines if the application is accessed via an encrypted
	 * (HTTPS) connection.
	 *
	 * @return	bool
	 */
	function is_https()
	{
		if ( ! empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off')
		{
			return TRUE;
		}
		elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https')
		{
			return TRUE;
		}
		elseif ( ! empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off')
		{
			return TRUE;
		}

		return FALSE;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('is_cli'))
{

	/**
	 * Is CLI?
	 *
	 * Test to see if a request was made from the command line.
	 *
	 * @return 	bool
	 */
	function is_cli()
	{
		return (PHP_SAPI === 'cli' OR defined('STDIN'));
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('show_error'))
{
	/**
	 * Error Handler
	 *
	 * This function lets us invoke the exception class and
	 * display errors using the standard error template located
	 * in application/views/errors/error_general.php
	 * This function will send the error page directly to the
	 * browser and exit.
	 *
	 * @param	string
	 * @param	int
	 * @param	string
	 * @return	void
	 */
	function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered')
	{
		$status_code = abs($status_code);
		if ($status_code < 100)
		{
			$exit_status = $status_code + 9; // 9 is EXIT__AUTO_MIN
			if ($exit_status > 125) // 125 is EXIT__AUTO_MAX
			{
				$exit_status = 1; // EXIT_ERROR
			}

			$status_code = 500;
		}
		else
		{
			$exit_status = 1; // EXIT_ERROR
		}

		$_error =& load_class('Exceptions', 'core');
		echo $_error->show_error($heading, $message, 'error_general', $status_code);
		exit($exit_status);
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('show_404'))
{
	/**
	 * 404 Page Handler
	 *
	 * This function is similar to the show_error() function above
	 * However, instead of the standard error template it displays
	 * 404 errors.
	 *
	 * @param	string
	 * @param	bool
	 * @return	void
	 */
	function show_404($page = '', $log_error = TRUE)
	{
		$_error =& load_class('Exceptions', 'core');
		$_error->show_404($page, $log_error);
		exit(4); // EXIT_UNKNOWN_FILE
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('log_message'))
{
	/**
	 * Error Logging Interface
	 *
	 * We use this as a simple mechanism to access the logging
	 * class and send messages to be logged.
	 *
	 * @param	string	the error level: 'error', 'debug' or 'info'
	 * @param	string	the error message
	 * @return	void
	 */
	function log_message($level, $message)
	{
		static $_log;

		if ($_log === NULL)
		{
			// references cannot be directly assigned to static variables, so we use an array
			$_log[0] =& load_class('Log', 'core');
		}

		$_log[0]->write_log($level, $message);
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('set_status_header'))
{
	/**
	 * Set HTTP Status Header
	 *
	 * @param	int	the status code
	 * @param	string
	 * @return	void
	 */
	function set_status_header($code = 200, $text = '')
	{
		if (is_cli())
		{
			return;
		}

		if (empty($code) OR ! is_numeric($code))
		{
			show_error('Status codes must be numeric', 500);
		}

		if (empty($text))
		{
			is_int($code) OR $code = (int) $code;
			$stati = array(
				100	=> 'Continue',
				101	=> 'Switching Protocols',

				200	=> 'OK',
				201	=> 'Created',
				202	=> 'Accepted',
				203	=> 'Non-Authoritative Information',
				204	=> 'No Content',
				205	=> 'Reset Content',
				206	=> 'Partial Content',

				300	=> 'Multiple Choices',
				301	=> 'Moved Permanently',
				302	=> 'Found',
				303	=> 'See Other',
				304	=> 'Not Modified',
				305	=> 'Use Proxy',
				307	=> 'Temporary Redirect',

				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',
				422	=> 'Unprocessable Entity',

				500	=> 'Internal Server Error',
				501	=> 'Not Implemented',
				502	=> 'Bad Gateway',
				503	=> 'Service Unavailable',
				504	=> 'Gateway Timeout',
				505	=> 'HTTP Version Not Supported'
			);

			if (isset($stati[$code]))
			{
				$text = $stati[$code];
			}
			else
			{
				show_error('No status text available. Please check your status code number or supply your own message text.', 500);
			}
		}

		if (strpos(PHP_SAPI, 'cgi') === 0)
		{
			header('Status: '.$code.' '.$text, TRUE);
		}
		else
		{
			$server_protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1';
			header($server_protocol.' '.$code.' '.$text, TRUE, $code);
		}
	}
}

// --------------------------------------------------------------------

if ( ! function_exists('_error_handler'))
{
	/**
	 * Error Handler
	 *
	 * This is the custom error handler that is declared at the (relative)
	 * top of CodeIgniter.php. The main reason we use this is to permit
	 * PHP errors to be logged in our own log files since the user may
	 * not have access to server logs. Since this function effectively
	 * intercepts PHP errors, however, we also need to display errors
	 * based on the current error_reporting level.
	 * We do that with the use of a PHP error template.
	 *
	 * @param	int	$severity
	 * @param	string	$message
	 * @param	string	$filepath
	 * @param	int	$line
	 * @return	void
	 */
	function _error_handler($severity, $message, $filepath, $line)
	{
		$is_error = (((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity);

		// When an error occurred, set the status header to '500 Internal Server Error'
		// to indicate to the client something went wrong.
		// This can't be done within the $_error->show_php_error method because
		// it is only called when the display_errors flag is set (which isn't usually
		// the case in a production environment) or when errors are ignored because
		// they are above the error_reporting threshold.
		if ($is_error)
		{
			set_status_header(500);
		}

		// Should we ignore the error? We'll get the current error_reporting
		// level and add its bits with the severity bits to find out.
		if (($severity & error_reporting()) !== $severity)
		{
			return;
		}

		$_error =& load_class('Exceptions', 'core');
		$_error->log_exception($severity, $message, $filepath, $line);

		// Should we display the error?
		if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors')))
		{
			$_error->show_php_error($severity, $message, $filepath, $line);
		}

		// If the error is fatal, the execution of the script should be stopped because
		// errors can't be recovered from. Halting the script conforms with PHP's
		// default error handling. See http://www.php.net/manual/en/errorfunc.constants.php
		if ($is_error)
		{
			exit(1); // EXIT_ERROR
		}
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('_exception_handler'))
{
	/**
	 * Exception Handler
	 *
	 * Sends uncaught exceptions to the logger and displays them
	 * only if display_errors is On so that they don't show up in
	 * production environments.
	 *
	 * @param	Exception	$exception
	 * @return	void
	 */
	function _exception_handler($exception)
	{
		$_error =& load_class('Exceptions', 'core');
		$_error->log_exception('error', 'Exception: '.$exception->getMessage(), $exception->getFile(), $exception->getLine());

		// Should we display the error?
		if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors')))
		{
			$_error->show_exception($exception);
		}

		exit(1); // EXIT_ERROR
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('_shutdown_handler'))
{
	/**
	 * Shutdown Handler
	 *
	 * This is the shutdown handler that is declared at the top
	 * of CodeIgniter.php. The main reason we use this is to simulate
	 * a complete custom exception handler.
	 *
	 * E_STRICT is purposively neglected because such events may have
	 * been caught. Duplication or none? None is preferred for now.
	 *
	 * @link	http://insomanic.me.uk/post/229851073/php-trick-catching-fatal-errors-e-error-with-a
	 * @return	void
	 */
	function _shutdown_handler()
	{
		$last_error = error_get_last();
		if (isset($last_error) &&
			($last_error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING)))
		{
			_error_handler($last_error['type'], $last_error['message'], $last_error['file'], $last_error['line']);
		}
	}
}

// --------------------------------------------------------------------

if ( ! function_exists('remove_invisible_characters'))
{
	/**
	 * Remove Invisible Characters
	 *
	 * This prevents sandwiching null characters
	 * between ascii characters, like Java\0script.
	 *
	 * @param	string
	 * @param	bool
	 * @return	string
	 */
	function remove_invisible_characters($str, $url_encoded = TRUE)
	{
		$non_displayables = array();

		// every control character except newline (dec 10),
		// carriage return (dec 13) and horizontal tab (dec 09)
		if ($url_encoded)
		{
			$non_displayables[] = '/%0[0-8bcef]/i';	// url encoded 00-08, 11, 12, 14, 15
			$non_displayables[] = '/%1[0-9a-f]/i';	// url encoded 16-31
		}

		$non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';	// 00-08, 11, 12, 14-31, 127

		do
		{
			$str = preg_replace($non_displayables, '', $str, -1, $count);
		}
		while ($count);

		return $str;
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('html_escape'))
{
	/**
	 * Returns HTML escaped variable.
	 *
	 * @param	mixed	$var		The input string or array of strings to be escaped.
	 * @param	bool	$double_encode	$double_encode set to FALSE prevents escaping twice.
	 * @return	mixed			The escaped string or array of strings as a result.
	 */
	function html_escape($var, $double_encode = TRUE)
	{
		if (empty($var))
		{
			return $var;
		}

		if (is_array($var))
		{
			foreach (array_keys($var) as $key)
			{
				$var[$key] = html_escape($var[$key], $double_encode);
			}

			return $var;
		}

		return htmlspecialchars($var, ENT_QUOTES, config_item('charset'), $double_encode);
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('_stringify_attributes'))
{
	/**
	 * Stringify attributes for use in HTML tags.
	 *
	 * Helper function used to convert a string, array, or object
	 * of attributes to a string.
	 *
	 * @param	mixed	string, array, object
	 * @param	bool
	 * @return	string
	 */
	function _stringify_attributes($attributes, $js = FALSE)
	{
		$atts = NULL;

		if (empty($attributes))
		{
			return $atts;
		}

		if (is_string($attributes))
		{
			return ' '.$attributes;
		}

		$attributes = (array) $attributes;

		foreach ($attributes as $key => $val)
		{
			$atts .= ($js) ? $key.'='.$val.',' : ' '.$key.'="'.$val.'"';
		}

		return rtrim($atts, ',');
	}
}

// ------------------------------------------------------------------------

if ( ! function_exists('function_usable'))
{
	/**
	 * Function usable
	 *
	 * Executes a function_exists() check, and if the Suhosin PHP
	 * extension is loaded - checks whether the function that is
	 * checked might be disabled in there as well.
	 *
	 * This is useful as function_exists() will return FALSE for
	 * functions disabled via the *disable_functions* php.ini
	 * setting, but not for *suhosin.executor.func.blacklist* and
	 * *suhosin.executor.disable_eval*. These settings will just
	 * terminate script execution if a disabled function is executed.
	 *
	 * The above described behavior turned out to be a bug in Suhosin,
	 * but even though a fix was commited for 0.9.34 on 2012-02-12,
	 * that version is yet to be released. This function will therefore
	 * be just temporary, but would probably be kept for a few years.
	 *
	 * @link	http://www.hardened-php.net/suhosin/
	 * @param	string	$function_name	Function to check for
	 * @return	bool	TRUE if the function exists and is safe to call,
	 *			FALSE otherwise.
	 */
	function function_usable($function_name)
	{
		static $_suhosin_func_blacklist;

		if (function_exists($function_name))
		{
			if ( ! isset($_suhosin_func_blacklist))
			{
				$_suhosin_func_blacklist = extension_loaded('suhosin')
					? explode(',', trim(ini_get('suhosin.executor.func.blacklist')))
					: array();
			}

			return ! in_array($function_name, $_suhosin_func_blacklist, TRUE);
		}

		return FALSE;
	}
}


================================================
FILE: system/core/Config.php
================================================
<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Config Class
 *
 * This class contains functions that enable config files to be managed
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Libraries
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/libraries/config.html
 */
class CI_Config {

	/**
	 * List of all loaded config values
	 *
	 * @var	array
	 */
	public $config = array();

	/**
	 * List of all loaded config files
	 *
	 * @var	array
	 */
	public $is_loaded =	array();

	/**
	 * List of paths to search when trying to load a config file.
	 *
	 * @used-by	CI_Loader
	 * @var		array
	 */
	public $_config_paths =	array(APPPATH);

	// --------------------------------------------------------------------

	/**
	 * Class constructor
	 *
	 * Sets the $config data from the primary config.php file as a class variable.
	 *
	 * @return	void
	 */
	public function __construct()
	{
		$this->config =& get_config();

		// Set the base_url automatically if none was provided
		if (empty($this->config['base_url']))
		{
			if (isset($_SERVER['SERVER_ADDR']))
			{
				if (strpos($_SERVER['SERVER_ADDR'], ':') !== FALSE)
				{
					$server_addr = '['.$_SERVER['SERVER_ADDR'].']';
				}
				else
				{
					$server_addr = $_SERVER['SERVER_ADDR'];
				}

				$base_url = (is_https() ? 'https' : 'http').'://'.$server_addr
					.substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'], basename($_SERVER['SCRIPT_FILENAME'])));
			}
			else
			{
				$base_url = 'http://localhost/';
			}

			$this->set_item('base_url', $base_url);
		}

		log_message('info', 'Config Class Initialized');
	}

	// --------------------------------------------------------------------

	/**
	 * Load Config File
	 *
	 * @param	string	$file			Configuration file name
	 * @param	bool	$use_sections		Whether configuration values should be loaded into their own section
	 * @param	bool	$fail_gracefully	Whether to just return FALSE or display an error message
	 * @return	bool	TRUE if the file was loaded correctly or FALSE on failure
	 */
	public function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
	{
		$file = ($file === '') ? 'config' : str_replace('.php', '', $file);
		$loaded = FALSE;

		foreach ($this->_config_paths as $path)
		{
			foreach (array($file, ENVIRONMENT.DIRECTORY_SEPARATOR.$file) as $location)
			{
				$file_path = $path.'config/'.$location.'.php';
				if (in_array($file_path, $this->is_loaded, TRUE))
				{
					return TRUE;
				}

				if ( ! file_exists($file_path))
				{
					continue;
				}

				include($file_path);

				if ( ! isset($config) OR ! is_array($config))
				{
					if ($fail_gracefully === TRUE)
					{
						return FALSE;
					}

					show_error('Your '.$file_path.' file does not appear to contain a valid configuration array.');
				}

				if ($use_sections === TRUE)
				{
					$this->config[$file] = isset($this->config[$file])
						? array_merge($this->config[$file], $config)
						: $config;
				}
				else
				{
					$this->config = array_merge($this->config, $config);
				}

				$this->is_loaded[] = $file_path;
				$config = NULL;
				$loaded = TRUE;
				log_message('debug', 'Config file loaded: '.$file_path);
			}
		}

		if ($loaded === TRUE)
		{
			return TRUE;
		}
		elseif ($fail_gracefully === TRUE)
		{
			return FALSE;
		}

		show_error('The configuration file '.$file.'.php does not exist.');
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch a config file item
	 *
	 * @param	string	$item	Config item name
	 * @param	string	$index	Index name
	 * @return	string|null	The configuration item or NULL if the item doesn't exist
	 */
	public function item($item, $index = '')
	{
		if ($index == '')
		{
			return isset($this->config[$item]) ? $this->config[$item] : NULL;
		}

		return isset($this->config[$index], $this->config[$index][$item]) ? $this->config[$index][$item] : NULL;
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch a config file item with slash appended (if not empty)
	 *
	 * @param	string		$item	Config item name
	 * @return	string|null	The configuration item or NULL if the item doesn't exist
	 */
	public function slash_item($item)
	{
		if ( ! isset($this->config[$item]))
		{
			return NULL;
		}
		elseif (trim($this->config[$item]) === '')
		{
			return '';
		}

		return rtrim($this->config[$item], '/').'/';
	}

	// --------------------------------------------------------------------

	/**
	 * Site URL
	 *
	 * Returns base_url . index_page [. uri_string]
	 *
	 * @uses	CI_Config::_uri_string()
	 *
	 * @param	string|string[]	$uri	URI string or an array of segments
	 * @param	string	$protocol
	 * @return	string
	 */
	public function site_url($uri = '', $protocol = NULL)
	{
		$base_url = $this->slash_item('base_url');

		if (isset($protocol))
		{
			// For protocol-relative links
			if ($protocol === '')
			{
				$base_url = substr($base_url, strpos($base_url, '//'));
			}
			else
			{
				$base_url = $protocol.substr($base_url, strpos($base_url, '://'));
			}
		}

		if (empty($uri))
		{
			return $base_url.$this->item('index_page');
		}

		$uri = $this->_uri_string($uri);

		if ($this->item('enable_query_strings') === FALSE)
		{
			$suffix = isset($this->config['url_suffix']) ? $this->config['url_suffix'] : '';

			if ($suffix !== '')
			{
				if (($offset = strpos($uri, '?')) !== FALSE)
				{
					$uri = substr($uri, 0, $offset).$suffix.substr($uri, $offset);
				}
				else
				{
					$uri .= $suffix;
				}
			}

			return $base_url.$this->slash_item('index_page').$uri;
		}
		elseif (strpos($uri, '?') === FALSE)
		{
			$uri = '?'.$uri;
		}

		return $base_url.$this->item('index_page').$uri;
	}

	// -------------------------------------------------------------

	/**
	 * Base URL
	 *
	 * Returns base_url [. uri_string]
	 *
	 * @uses	CI_Config::_uri_string()
	 *
	 * @param	string|string[]	$uri	URI string or an array of segments
	 * @param	string	$protocol
	 * @return	string
	 */
	public function base_url($uri = '', $protocol = NULL)
	{
		$base_url = $this->slash_item('base_url');

		if (isset($protocol))
		{
			// For protocol-relative links
			if ($protocol === '')
			{
				$base_url = substr($base_url, strpos($base_url, '//'));
			}
			else
			{
				$base_url = $protocol.substr($base_url, strpos($base_url, '://'));
			}
		}

		return $base_url.$this->_uri_string($uri);
	}

	// -------------------------------------------------------------

	/**
	 * Build URI string
	 *
	 * @used-by	CI_Config::site_url()
	 * @used-by	CI_Config::base_url()
	 *
	 * @param	string|string[]	$uri	URI string or an array of segments
	 * @return	string
	 */
	protected function _uri_string($uri)
	{
		if ($this->item('enable_query_strings') === FALSE)
		{
			is_array($uri) && $uri = implode('/', $uri);
			return ltrim($uri, '/');
		}
		elseif (is_array($uri))
		{
			return http_build_query($uri);
		}

		return $uri;
	}

	// --------------------------------------------------------------------

	/**
	 * System URL
	 *
	 * @deprecated	3.0.0	Encourages insecure practices
	 * @return	string
	 */
	public function system_url()
	{
		$x = explode('/', preg_replace('|/*(.+?)/*$|', '\\1', BASEPATH));
		return $this->slash_item('base_url').end($x).'/';
	}

	// --------------------------------------------------------------------

	/**
	 * Set a config file item
	 *
	 * @param	string	$item	Config item key
	 * @param	string	$value	Config item value
	 * @return	void
	 */
	public function set_item($item, $value)
	{
		$this->config[$item] = $value;
	}

}


================================================
FILE: system/core/Controller.php
================================================
<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Application Controller Class
 *
 * This class object is the super class that every library in
 * CodeIgniter will be assigned to.
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Libraries
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/general/controllers.html
 */
class CI_Controller {

	/**
	 * Reference to the CI singleton
	 *
	 * @var	object
	 */
	private static $instance;

	/**
	 * Class constructor
	 *
	 * @return	void
	 */
	public function __construct()
	{
		self::$instance =& $this;

		// Assign all the class objects that were instantiated by the
		// bootstrap file (CodeIgniter.php) to local class variables
		// so that CI can run as one big super object.
		foreach (is_loaded() as $var => $class)
		{
			$this->$var =& load_class($class);
		}

		$this->load =& load_class('Loader', 'core');
		$this->load->initialize();
		log_message('info', 'Controller Class Initialized');
	}

	// --------------------------------------------------------------------

	/**
	 * Get the CI singleton
	 *
	 * @static
	 * @return	object
	 */
	public static function &get_instance()
	{
		return self::$instance;
	}

}


================================================
FILE: system/core/Exceptions.php
================================================
<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Exceptions Class
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Exceptions
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/libraries/exceptions.html
 */
class CI_Exceptions {

	/**
	 * Nesting level of the output buffering mechanism
	 *
	 * @var	int
	 */
	public $ob_level;

	/**
	 * List of available error levels
	 *
	 * @var	array
	 */
	public $levels = array(
		E_ERROR			=>	'Error',
		E_WARNING		=>	'Warning',
		E_PARSE			=>	'Parsing Error',
		E_NOTICE		=>	'Notice',
		E_CORE_ERROR		=>	'Core Error',
		E_CORE_WARNING		=>	'Core Warning',
		E_COMPILE_ERROR		=>	'Compile Error',
		E_COMPILE_WARNING	=>	'Compile Warning',
		E_USER_ERROR		=>	'User Error',
		E_USER_WARNING		=>	'User Warning',
		E_USER_NOTICE		=>	'User Notice',
		E_STRICT		=>	'Runtime Notice'
	);

	/**
	 * Class constructor
	 *
	 * @return	void
	 */
	public function __construct()
	{
		$this->ob_level = ob_get_level();
		// Note: Do not log messages from this constructor.
	}

	// --------------------------------------------------------------------

	/**
	 * Exception Logger
	 *
	 * Logs PHP generated error messages
	 *
	 * @param	int	$severity	Log level
	 * @param	string	$message	Error message
	 * @param	string	$filepath	File path
	 * @param	int	$line		Line number
	 * @return	void
	 */
	public function log_exception($severity, $message, $filepath, $line)
	{
		$severity = isset($this->levels[$severity]) ? $this->levels[$severity] : $severity;
		log_message('error', 'Severity: '.$severity.' --> '.$message.' '.$filepath.' '.$line);
	}

	// --------------------------------------------------------------------

	/**
	 * 404 Error Handler
	 *
	 * @uses	CI_Exceptions::show_error()
	 *
	 * @param	string	$page		Page URI
	 * @param 	bool	$log_error	Whether to log the error
	 * @return	void
	 */
	public function show_404($page = '', $log_error = TRUE)
	{
		if (is_cli())
		{
			$heading = 'Not Found';
			$message = 'The controller/method pair you requested was not found.';
		}
		else
		{
			$heading = '404 Page Not Found';
			$message = 'The page you requested was not found.';
		}

		// By default we log this, but allow a dev to skip it
		if ($log_error)
		{
			log_message('error', $heading.': '.$page);
		}

		echo $this->show_error($heading, $message, 'error_404', 404);
		exit(4); // EXIT_UNKNOWN_FILE
	}

	// --------------------------------------------------------------------

	/**
	 * General Error Page
	 *
	 * Takes an error message as input (either as a string or an array)
	 * and displays it using the specified template.
	 *
	 * @param	string		$heading	Page heading
	 * @param	string|string[]	$message	Error message
	 * @param	string		$template	Template name
	 * @param 	int		$status_code	(default: 500)
	 *
	 * @return	string	Error page output
	 */
	public function show_error($heading, $message, $template = 'error_general', $status_code = 500)
	{
		$templates_path = config_item('error_views_path');
		if (empty($templates_path))
		{
			$templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR;
		}

		if (is_cli())
		{
			$message = "\t".(is_array($message) ? implode("\n\t", $message) : $message);
			$template = 'cli'.DIRECTORY_SEPARATOR.$template;
		}
		else
		{
			set_status_header($status_code);
			$message = '<p>'.(is_array($message) ? implode('</p><p>', $message) : $message).'</p>';
			$template = 'html'.DIRECTORY_SEPARATOR.$template;
		}

		if (ob_get_level() > $this->ob_level + 1)
		{
			ob_end_flush();
		}
		ob_start();
		include($templates_path.$template.'.php');
		$buffer = ob_get_contents();
		ob_end_clean();
		return $buffer;
	}

	// --------------------------------------------------------------------

	public function show_exception($exception)
	{
		$templates_path = config_item('error_views_path');
		if (empty($templates_path))
		{
			$templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR;
		}

		$message = $exception->getMessage();
		if (empty($message))
		{
			$message = '(null)';
		}

		if (is_cli())
		{
			$templates_path .= 'cli'.DIRECTORY_SEPARATOR;
		}
		else
		{
			set_status_header(500);
			$templates_path .= 'html'.DIRECTORY_SEPARATOR;
		}

		if (ob_get_level() > $this->ob_level + 1)
		{
			ob_end_flush();
		}

		ob_start();
		include($templates_path.'error_exception.php');
		$buffer = ob_get_contents();
		ob_end_clean();
		echo $buffer;
	}

	// --------------------------------------------------------------------

	/**
	 * Native PHP error handler
	 *
	 * @param	int	$severity	Error level
	 * @param	string	$message	Error message
	 * @param	string	$filepath	File path
	 * @param	int	$line		Line number
	 * @return	string	Error page output
	 */
	public function show_php_error($severity, $message, $filepath, $line)
	{
		$templates_path = config_item('error_views_path');
		if (empty($templates_path))
		{
			$templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR;
		}

		$severity = isset($this->levels[$severity]) ? $this->levels[$severity] : $severity;

		// For safety reasons we don't show the full file path in non-CLI requests
		if ( ! is_cli())
		{
			$filepath = str_replace('\\', '/', $filepath);
			if (FALSE !== strpos($filepath, '/'))
			{
				$x = explode('/', $filepath);
				$filepath = $x[count($x)-2].'/'.end($x);
			}

			$template = 'html'.DIRECTORY_SEPARATOR.'error_php';
		}
		else
		{
			$template = 'cli'.DIRECTORY_SEPARATOR.'error_php';
		}

		if (ob_get_level() > $this->ob_level + 1)
		{
			ob_end_flush();
		}
		ob_start();
		include($templates_path.$template.'.php');
		$buffer = ob_get_contents();
		ob_end_clean();
		echo $buffer;
	}

}


================================================
FILE: system/core/Hooks.php
================================================
<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Hooks Class
 *
 * Provides a mechanism to extend the base system without hacking.
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Libraries
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/general/hooks.html
 */
class CI_Hooks {

	/**
	 * Determines whether hooks are enabled
	 *
	 * @var	bool
	 */
	public $enabled = FALSE;

	/**
	 * List of all hooks set in config/hooks.php
	 *
	 * @var	array
	 */
	public $hooks =	array();

	/**
	 * Array with class objects to use hooks methods
	 *
	 * @var array
	 */
	protected $_objects = array();

	/**
	 * In progress flag
	 *
	 * Determines whether hook is in progress, used to prevent infinte loops
	 *
	 * @var	bool
	 */
	protected $_in_progress = FALSE;

	/**
	 * Class constructor
	 *
	 * @return	void
	 */
	public function __construct()
	{
		$CFG =& load_class('Config', 'core');
		log_message('info', 'Hooks Class Initialized');

		// If hooks are not enabled in the config file
		// there is nothing else to do
		if ($CFG->item('enable_hooks') === FALSE)
		{
			return;
		}

		// Grab the "hooks" definition file.
		if (file_exists(APPPATH.'config/hooks.php'))
		{
			include(APPPATH.'config/hooks.php');
		}

		if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/hooks.php'))
		{
			include(APPPATH.'config/'.ENVIRONMENT.'/hooks.php');
		}

		// If there are no hooks, we're done.
		if ( ! isset($hook) OR ! is_array($hook))
		{
			return;
		}

		$this->hooks =& $hook;
		$this->enabled = TRUE;
	}

	// --------------------------------------------------------------------

	/**
	 * Call Hook
	 *
	 * Calls a particular hook. Called by CodeIgniter.php.
	 *
	 * @uses	CI_Hooks::_run_hook()
	 *
	 * @param	string	$which	Hook name
	 * @return	bool	TRUE on success or FALSE on failure
	 */
	public function call_hook($which = '')
	{
		if ( ! $this->enabled OR ! isset($this->hooks[$which]))
		{
			return FALSE;
		}

		if (is_array($this->hooks[$which]) && ! isset($this->hooks[$which]['function']))
		{
			foreach ($this->hooks[$which] as $val)
			{
				$this->_run_hook($val);
			}
		}
		else
		{
			$this->_run_hook($this->hooks[$which]);
		}

		return TRUE;
	}

	// --------------------------------------------------------------------

	/**
	 * Run Hook
	 *
	 * Runs a particular hook
	 *
	 * @param	array	$data	Hook details
	 * @return	bool	TRUE on success or FALSE on failure
	 */
	protected function _run_hook($data)
	{
		// Closures/lambda functions and array($object, 'method') callables
		if (is_callable($data))
		{
			is_array($data)
				? $data[0]->{$data[1]}()
				: $data();

			return TRUE;
		}
		elseif ( ! is_array($data))
		{
			return FALSE;
		}

		// -----------------------------------
		// Safety - Prevents run-away loops
		// -----------------------------------

		// If the script being called happens to have the same
		// hook call within it a loop can happen
		if ($this->_in_progress === TRUE)
		{
			return;
		}

		// -----------------------------------
		// Set file path
		// -----------------------------------

		if ( ! isset($data['filepath'], $data['filename']))
		{
			return FALSE;
		}

		$filepath = APPPATH.$data['filepath'].'/'.$data['filename'];

		if ( ! file_exists($filepath))
		{
			return FALSE;
		}

		// Determine and class and/or function names
		$class		= empty($data['class']) ? FALSE : $data['class'];
		$function	= empty($data['function']) ? FALSE : $data['function'];
		$params		= isset($data['params']) ? $data['params'] : '';

		if (empty($function))
		{
			return FALSE;
		}

		// Set the _in_progress flag
		$this->_in_progress = TRUE;

		// Call the requested class and/or function
		if ($class !== FALSE)
		{
			// The object is stored?
			if (isset($this->_objects[$class]))
			{
				if (method_exists($this->_objects[$class], $function))
				{
					$this->_objects[$class]->$function($params);
				}
				else
				{
					return $this->_in_progress = FALSE;
				}
			}
			else
			{
				class_exists($class, FALSE) OR require_once($filepath);

				if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function))
				{
					return $this->_in_progress = FALSE;
				}

				// Store the object and execute the method
				$this->_objects[$class] = new $class();
				$this->_objects[$class]->$function($params);
			}
		}
		else
		{
			function_exists($function) OR require_once($filepath);

			if ( ! function_exists($function))
			{
				return $this->_in_progress = FALSE;
			}

			$function($params);
		}

		$this->_in_progress = FALSE;
		return TRUE;
	}

}


================================================
FILE: system/core/Input.php
================================================
<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Input Class
 *
 * Pre-processes global input data for security
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Input
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/libraries/input.html
 */
class CI_Input {

	/**
	 * IP address of the current user
	 *
	 * @var	string
	 */
	protected $ip_address = FALSE;

	/**
	 * Allow GET array flag
	 *
	 * If set to FALSE, then $_GET will be set to an empty array.
	 *
	 * @var	bool
	 */
	protected $_allow_get_array = TRUE;

	/**
	 * Standardize new lines flag
	 *
	 * If set to TRUE, then newlines are standardized.
	 *
	 * @var	bool
	 */
	protected $_standardize_newlines;

	/**
	 * Enable XSS flag
	 *
	 * Determines whether the XSS filter is always active when
	 * GET, POST or COOKIE data is encountered.
	 * Set automatically based on config setting.
	 *
	 * @var	bool
	 */
	protected $_enable_xss = FALSE;

	/**
	 * Enable CSRF flag
	 *
	 * Enables a CSRF cookie token to be set.
	 * Set automatically based on config setting.
	 *
	 * @var	bool
	 */
	protected $_enable_csrf = FALSE;

	/**
	 * List of all HTTP request headers
	 *
	 * @var array
	 */
	protected $headers = array();

	/**
	 * Raw input stream data
	 *
	 * Holds a cache of php://input contents
	 *
	 * @var	string
	 */
	protected $_raw_input_stream;

	/**
	 * Parsed input stream data
	 *
	 * Parsed from php://input at runtime
	 *
	 * @see	CI_Input::input_stream()
	 * @var	array
	 */
	protected $_input_stream;

	protected $security;
	protected $uni;

	// --------------------------------------------------------------------

	/**
	 * Class constructor
	 *
	 * Determines whether to globally enable the XSS processing
	 * and whether to allow the $_GET array.
	 *
	 * @return	void
	 */
	public function __construct()
	{
		$this->_allow_get_array		= (config_item('allow_get_array') === TRUE);
		$this->_enable_xss		= (config_item('global_xss_filtering') === TRUE);
		$this->_enable_csrf		= (config_item('csrf_protection') === TRUE);
		$this->_standardize_newlines	= (bool) config_item('standardize_newlines');

		$this->security =& load_class('Security', 'core');

		// Do we need the UTF-8 class?
		if (UTF8_ENABLED === TRUE)
		{
			$this->uni =& load_class('Utf8', 'core');
		}

		// Sanitize global arrays
		$this->_sanitize_globals();

		// CSRF Protection check
		if ($this->_enable_csrf === TRUE && ! is_cli())
		{
			$this->security->csrf_verify();
		}

		log_message('info', 'Input Class Initialized');
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch from array
	 *
	 * Internal method used to retrieve values from global arrays.
	 *
	 * @param	array	&$array		$_GET, $_POST, $_COOKIE, $_SERVER, etc.
	 * @param	mixed	$index		Index for item to be fetched from $array
	 * @param	bool	$xss_clean	Whether to apply XSS filtering
	 * @return	mixed
	 */
	protected function _fetch_from_array(&$array, $index = NULL, $xss_clean = NULL)
	{
		is_bool($xss_clean) OR $xss_clean = $this->_enable_xss;

		// If $index is NULL, it means that the whole $array is requested
		isset($index) OR $index = array_keys($array);

		// allow fetching multiple keys at once
		if (is_array($index))
		{
			$output = array();
			foreach ($index as $key)
			{
				$output[$key] = $this->_fetch_from_array($array, $key, $xss_clean);
			}

			return $output;
		}

		if (isset($array[$index]))
		{
			$value = $array[$index];
		}
		elseif (($count = preg_match_all('/(?:^[^\[]+)|\[[^]]*\]/', $index, $matches)) > 1) // Does the index contain array notation
		{
			$value = $array;
			for ($i = 0; $i < $count; $i++)
			{
				$key = trim($matches[0][$i], '[]');
				if ($key === '') // Empty notation will return the value as array
				{
					break;
				}

				if (isset($value[$key]))
				{
					$value = $value[$key];
				}
				else
				{
					return NULL;
				}
			}
		}
		else
		{
			return NULL;
		}

		return ($xss_clean === TRUE)
			? $this->security->xss_clean($value)
			: $value;
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch an item from the GET array
	 *
	 * @param	mixed	$index		Index for item to be fetched from $_GET
	 * @param	bool	$xss_clean	Whether to apply XSS filtering
	 * @return	mixed
	 */
	public function get($index = NULL, $xss_clean = NULL)
	{
		return $this->_fetch_from_array($_GET, $index, $xss_clean);
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch an item from the POST array
	 *
	 * @param	mixed	$index		Index for item to be fetched from $_POST
	 * @param	bool	$xss_clean	Whether to apply XSS filtering
	 * @return	mixed
	 */
	public function post($index = NULL, $xss_clean = NULL)
	{
		return $this->_fetch_from_array($_POST, $index, $xss_clean);
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch an item from POST data with fallback to GET
	 *
	 * @param	string	$index		Index for item to be fetched from $_POST or $_GET
	 * @param	bool	$xss_clean	Whether to apply XSS filtering
	 * @return	mixed
	 */
	public function post_get($index, $xss_clean = NULL)
	{
		return isset($_POST[$index])
			? $this->post($index, $xss_clean)
			: $this->get($index, $xss_clean);
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch an item from GET data with fallback to POST
	 *
	 * @param	string	$index		Index for item to be fetched from $_GET or $_POST
	 * @param	bool	$xss_clean	Whether to apply XSS filtering
	 * @return	mixed
	 */
	public function get_post($index, $xss_clean = NULL)
	{
		return isset($_GET[$index])
			? $this->get($index, $xss_clean)
			: $this->post($index, $xss_clean);
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch an item from the COOKIE array
	 *
	 * @param	mixed	$index		Index for item to be fetched from $_COOKIE
	 * @param	bool	$xss_clean	Whether to apply XSS filtering
	 * @return	mixed
	 */
	public function cookie($index = NULL, $xss_clean = NULL)
	{
		return $this->_fetch_from_array($_COOKIE, $index, $xss_clean);
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch an item from the SERVER array
	 *
	 * @param	mixed	$index		Index for item to be fetched from $_SERVER
	 * @param	bool	$xss_clean	Whether to apply XSS filtering
	 * @return	mixed
	 */
	public function server($index, $xss_clean = NULL)
	{
		return $this->_fetch_from_array($_SERVER, $index, $xss_clean);
	}

	// ------------------------------------------------------------------------

	/**
	 * Fetch an item from the php://input stream
	 *
	 * Useful when you need to access PUT, DELETE or PATCH request data.
	 *
	 * @param	string	$index		Index for item to be fetched
	 * @param	bool	$xss_clean	Whether to apply XSS filtering
	 * @return	mixed
	 */
	public function input_stream($index = NULL, $xss_clean = NULL)
	{
		// Prior to PHP 5.6, the input stream can only be read once,
		// so we'll need to check if we have already done that first.
		if ( ! is_array($this->_input_stream))
		{
			// $this->raw_input_stream will trigger __get().
			parse_str($this->raw_input_stream, $this->_input_stream);
			is_array($this->_input_stream) OR $this->_input_stream = array();
		}

		return $this->_fetch_from_array($this->_input_stream, $index, $xss_clean);
	}

	// ------------------------------------------------------------------------

	/**
	 * Set cookie
	 *
	 * Accepts an arbitrary number of parameters (up to 7) or an associative
	 * array in the first parameter containing all the values.
	 *
	 * @param	string|mixed[]	$name		Cookie name or an array containing parameters
	 * @param	string		$value		Cookie value
	 * @param	int		$expire		Cookie expiration time in seconds
	 * @param	string		$domain		Cookie domain (e.g.: '.yourdomain.com')
	 * @param	string		$path		Cookie path (default: '/')
	 * @param	string		$prefix		Cookie name prefix
	 * @param	bool		$secure		Whether to only transfer cookies via SSL
	 * @param	bool		$httponly	Whether to only makes the cookie accessible via HTTP (no javascript)
	 * @return	void
	 */
	public function set_cookie($name, $value = '', $expire = '', $domain = '', $path = '/', $prefix = '', $secure = FALSE, $httponly = FALSE)
	{
		if (is_array($name))
		{
			// always leave 'name' in last place, as the loop will break otherwise, due to $$item
			foreach (array('value', 'expire', 'domain', 'path', 'prefix', 'secure', 'httponly', 'name') as $item)
			{
				if (isset($name[$item]))
				{
					$$item = $name[$item];
				}
			}
		}

		if ($prefix === '' && config_item('cookie_prefix') !== '')
		{
			$prefix = config_item('cookie_prefix');
		}

		if ($domain == '' && config_item('cookie_domain') != '')
		{
			$domain = config_item('cookie_domain');
		}

		if ($path === '/' && config_item('cookie_path') !== '/')
		{
			$path = config_item('cookie_path');
		}

		if ($secure === FALSE && config_item('cookie_secure') === TRUE)
		{
			$secure = config_item('cookie_secure');
		}

		if ($httponly === FALSE && config_item('cookie_httponly') !== FALSE)
		{
			$httponly = config_item('cookie_httponly');
		}

		if ( ! is_numeric($expire))
		{
			$expire = time() - 86500;
		}
		else
		{
			$expire = ($expire > 0) ? time() + $expire : 0;
		}

		setcookie($prefix.$name, $value, $expire, $path, $domain, $secure, $httponly);
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch the IP Address
	 *
	 * Determines and validates the visitor's IP address.
	 *
	 * @return	string	IP address
	 */
	public function ip_address()
	{
		if ($this->ip_address !== FALSE)
		{
			return $this->ip_address;
		}

		$proxy_ips = config_item('proxy_ips');
		if ( ! empty($proxy_ips) && ! is_array($proxy_ips))
		{
			$proxy_ips = explode(',', str_replace(' ', '', $proxy_ips));
		}

		$this->ip_address = $this->server('REMOTE_ADDR');

		if ($proxy_ips)
		{
			foreach (array('HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'HTTP_X_CLIENT_IP', 'HTTP_X_CLUSTER_CLIENT_IP') as $header)
			{
				if (($spoof = $this->server($header)) !== NULL)
				{
					// Some proxies typically list the whole chain of IP
					// addresses through which the client has reached us.
					// e.g. client_ip, proxy_ip1, proxy_ip2, etc.
					sscanf($spoof, '%[^,]', $spoof);

					if ( ! $this->valid_ip($spoof))
					{
						$spoof = NULL;
					}
					else
					{
						break;
					}
				}
			}

			if ($spoof)
			{
				for ($i = 0, $c = count($proxy_ips); $i < $c; $i++)
				{
					// Check if we have an IP address or a subnet
					if (strpos($proxy_ips[$i], '/') === FALSE)
					{
						// An IP address (and not a subnet) is specified.
						// We can compare right away.
						if ($proxy_ips[$i] === $this->ip_address)
						{
							$this->ip_address = $spoof;
							break;
						}

						continue;
					}

					// We have a subnet ... now the heavy lifting begins
					isset($separator) OR $separator = $this->valid_ip($this->ip_address, 'ipv6') ? ':' : '.';

					// If the proxy entry doesn't match the IP protocol - skip it
					if (strpos($proxy_ips[$i], $separator) === FALSE)
					{
						continue;
					}

					// Convert the REMOTE_ADDR IP address to binary, if needed
					if ( ! isset($ip, $sprintf))
					{
						if ($separator === ':')
						{
							// Make sure we're have the "full" IPv6 format
							$ip = explode(':',
								str_replace('::',
									str_repeat(':', 9 - substr_count($this->ip_address, ':')),
									$this->ip_address
								)
							);

							for ($j = 0; $j < 8; $j++)
							{
								$ip[$j] = intval($ip[$j], 16);
							}

							$sprintf = '%016b%016b%016b%016b%016b%016b%016b%016b';
						}
						else
						{
							$ip = explode('.', $this->ip_address);
							$sprintf = '%08b%08b%08b%08b';
						}

						$ip = vsprintf($sprintf, $ip);
					}

					// Split the netmask length off the network address
					sscanf($proxy_ips[$i], '%[^/]/%d', $netaddr, $masklen);

					// Again, an IPv6 address is most likely in a compressed form
					if ($separator === ':')
					{
						$netaddr = explode(':', str_replace('::', str_repeat(':', 9 - substr_count($netaddr, ':')), $netaddr));
						for ($j = 0; $j < 8; $j++)
						{
							$netaddr[$i] = intval($netaddr[$j], 16);
						}
					}
					else
					{
						$netaddr = explode('.', $netaddr);
					}

					// Convert to binary and finally compare
					if (strncmp($ip, vsprintf($sprintf, $netaddr), $masklen) === 0)
					{
						$this->ip_address = $spoof;
						break;
					}
				}
			}
		}

		if ( ! $this->valid_ip($this->ip_address))
		{
			return $this->ip_address = '0.0.0.0';
		}

		return $this->ip_address;
	}

	// --------------------------------------------------------------------

	/**
	 * Validate IP Address
	 *
	 * @param	string	$ip	IP address
	 * @param	string	$which	IP protocol: 'ipv4' or 'ipv6'
	 * @return	bool
	 */
	public function valid_ip($ip, $which = '')
	{
		switch (strtolower($which))
		{
			case 'ipv4':
				$which = FILTER_FLAG_IPV4;
				break;
			case 'ipv6':
				$which = FILTER_FLAG_IPV6;
				break;
			default:
				$which = NULL;
				break;
		}

		return (bool) filter_var($ip, FILTER_VALIDATE_IP, $which);
	}

	// --------------------------------------------------------------------

	/**
	 * Fetch User Agent string
	 *
	 * @return	string|null	User Agent string or NULL if it doesn't exist
	 */
	public function user_agent($xss_clean = NULL)
	{
		return $this->_fetch_from_array($_SERVER, 'HTTP_USER_AGENT', $xss_clean);
	}

	// --------------------------------------------------------------------

	/**
	 * Sanitize Globals
	 *
	 * Internal method serving for the following purposes:
	 *
	 *	- Unsets $_GET data, if query strings are not enabled
	 *	- Cleans POST, COOKIE and SERVER data
	 * 	- Standardizes newline characters to PHP_EOL
	 *
	 * @return	void
	 */
	protected function _sanitize_globals()
	{
		// Is $_GET data allowed? If not we'll set the $_GET to an empty array
		if ($this->_allow_get_array === FALSE)
		{
			$_GET = array();
		}
		elseif (is_array($_GET))
		{
			foreach ($_GET as $key => $val)
			{
				$_GET[$this->_clean_input_keys($key)] = $this->_clean_input_data($val);
			}
		}

		// Clean $_POST Data
		if (is_array($_POST))
		{
			foreach ($_POST as $key => $val)
			{
				$_POST[$this->_clean_input_keys($key)] = $this->_clean_input_data($val);
			}
		}

		// Clean $_COOKIE Data
		if (is_array($_COOKIE))
		{
			// Also get rid of specially treated cookies that might be set by a server
			// or silly application, that are of no use to a CI application anyway
			// but that when present will trip our 'Disallowed Key Characters' alarm
			// http://www.ietf.org/rfc/rfc2109.txt
			// note that the key names below are single quoted strings, and are not PHP variables
			unset(
				$_COOKIE['$Version'],
				$_COOKIE['$Path'],
				$_COOKIE['$Domain']
			);

			foreach ($_COOKIE as $key => $val)
			{
				if (($cookie_key = $this->_clean_input_keys($key)) !== FALSE)
				{
					$_COOKIE[$cookie_key] = $this->_clean_input_data($val);
				}
				else
				{
					unset($_COOKIE[$key]);
				}
			}
		}

		// Sanitize PHP_SELF
		$_SERVER['PHP_SELF'] = strip_tags($_SERVER['PHP_SELF']);

		log_message('debug', 'Global POST, GET and COOKIE data sanitized');
	}

	// --------------------------------------------------------------------

	/**
	 * Clean Input Data
	 *
	 * Internal method that aids in escaping data and
	 * standardizing newline characters to PHP_EOL.
	 *
	 * @param	string|string[]	$str	Input string(s)
	 * @return	string
	 */
	protected function _clean_input_data($str)
	{
		if (is_array($str))
		{
			$new_array = array();
			foreach (array_keys($str) as $key)
			{
				$new_array[$this->_clean_input_keys($key)] = $this->_clean_input_data($str[$key]);
			}
			return $new_array;
		}

		/* We strip slashes if magic quotes is on to keep things consistent

		   NOTE: In PHP 5.4 get_magic_quotes_gpc() will always return 0 and
		         it will probably not exist in future versions at all.
		*/
		if ( ! is_php('5.4') && get_magic_quotes_gpc())
		{
			$str = stripslashes($str);
		}

		// Clean UTF-8 if supported
		if (UTF8_ENABLED === TRUE)
		{
			$str = $this->uni->clean_string($str);
		}

		// Remove control characters
		$str = remove_invisible_characters($str, FALSE);

		// Standardize newlines if needed
		if ($this->_standardize_newlines === TRUE)
		{
			return preg_replace('/(?:\r\n|[\r\n])/', PHP_EOL, $str);
		}

		return $str;
	}

	// --------------------------------------------------------------------

	/**
	 * Clean Keys
	 *
	 * Internal method that helps to prevent malicious users
	 * from trying to exploit keys we make sure that keys are
	 * only named with alpha-numeric text and a few other items.
	 *
	 * @param	string	$str	Input string
	 * @param	bool	$fatal	Whether to terminate script exection
	 *				or to return FALSE if an invalid
	 *				key is encountered
	 * @return	string|bool
	 */
	protected function _clean_input_keys($str, $fatal = TRUE)
	{
		if ( ! preg_match('/^[a-z0-9:_\/|-]+$/i', $str))
		{
			if ($fatal === TRUE)
			{
				return FALSE;
			}
			else
			{
				set_status_header(503);
				echo 'Disallowed Key Characters.';
				exit(7); // EXIT_USER_INPUT
			}
		}

		// Clean UTF-8 if supported
		if (UTF8_ENABLED === TRUE)
		{
			return $this->uni->clean_string($str);
		}

		return $str;
	}

	// --------------------------------------------------------------------

	/**
	 * Request Headers
	 *
	 * @param	bool	$xss_clean	Whether to apply XSS filtering
	 * @return	array
	 */
	public function request_headers($xss_clean = FALSE)
	{
		// If header is already defined, return it immediately
		if ( ! empty($this->headers))
		{
			return $this->_fetch_from_array($this->headers, NULL, $xss_clean);
		}

		// In Apache, you can simply call apache_request_headers()
		if (function_exists('apache_request_headers'))
		{
			$this->headers = apache_request_headers();
		}
		else
		{
			isset($_SERVER['CONTENT_TYPE']) && $this->headers['Content-Type'] = $_SERVER['CONTENT_TYPE'];

			foreach ($_SERVER as $key => $val)
			{
				if (sscanf($key, 'HTTP_%s', $header) === 1)
				{
					// take SOME_HEADER and turn it into Some-Header
					$header = str_replace('_', ' ', strtolower($header));
					$header = str_replace(' ', '-', ucwords($header));

					$this->headers[$header] = $_SERVER[$key];
				}
			}
		}

		return $this->_fetch_from_array($this->headers, NULL, $xss_clean);
	}

	// --------------------------------------------------------------------

	/**
	 * Get Request Header
	 *
	 * Returns the value of a single member of the headers class member
	 *
	 * @param	string		$index		Header name
	 * @param	bool		$xss_clean	Whether to apply XSS filtering
	 * @return	string|null	The requested header on success or NULL on failure
	 */
	public function get_request_header($index, $xss_clean = FALSE)
	{
		static $headers;

		if ( ! isset($headers))
		{
			empty($this->headers) && $this->request_headers();
			foreach ($this->headers as $key => $value)
			{
				$headers[strtolower($key)] = $value;
			}
		}

		$index = strtolower($index);

		if ( ! isset($headers[$index]))
		{
			return NULL;
		}

		return ($xss_clean === TRUE)
			? $this->security->xss_clean($headers[$index])
			: $headers[$index];
	}

	// --------------------------------------------------------------------

	/**
	 * Is AJAX request?
	 *
	 * Test to see if a request contains the HTTP_X_REQUESTED_WITH header.
	 *
	 * @return 	bool
	 */
	public function is_ajax_request()
	{
		return ( ! empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
	}

	// --------------------------------------------------------------------

	/**
	 * Is CLI request?
	 *
	 * Test to see if a request was made from the command line.
	 *
	 * @deprecated	3.0.0	Use is_cli() instead
	 * @return	bool
	 */
	public function is_cli_request()
	{
		return is_cli();
	}

	// --------------------------------------------------------------------

	/**
	 * Get Request Method
	 *
	 * Return the request method
	 *
	 * @param	bool	$upper	Whether to return in upper or lower case
	 *				(default: FALSE)
	 * @return 	string
	 */
	public function method($upper = FALSE)
	{
		return ($upper)
			? strtoupper($this->server('REQUEST_METHOD'))
			: strtolower($this->server('REQUEST_METHOD'));
	}

	// ------------------------------------------------------------------------

	/**
	 * Magic __get()
	 *
	 * Allows read access to protected properties
	 *
	 * @param	string	$name
	 * @return	mixed
	 */
	public function __get($name)
	{
		if ($name === 'raw_input_stream')
		{
			isset($this->_raw_input_stream) OR $this->_raw_input_stream = file_get_contents('php://input');
			return $this->_raw_input_stream;
		}
		elseif ($name === 'ip_address')
		{
			return $this->ip_address;
		}
	}

}


================================================
FILE: system/core/Lang.php
================================================
<?php
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP
 *
 * This content is released under the MIT License (MIT)
 *
 * Copyright (c) 2014 - 2016, British Columbia Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @package	CodeIgniter
 * @author	EllisLab Dev Team
 * @copyright	Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
 * @copyright	Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
 * @license	http://opensource.org/licenses/MIT	MIT License
 * @link	https://codeigniter.com
 * @since	Version 1.0.0
 * @filesource
 */
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Language Class
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Language
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/libraries/language.html
 */
class CI_Lang {

	/**
	 * List of translations
	 *
	 * @var	array
	 */
	public $language =	array();

	/**
	 * List of loaded language files
	 *
	 * @var	array
	 */
	public $is_loaded =	array();

	/**
	 * Class constructor
	 *
	 * @return	void
	 */
	public function __construct()
	{
		log_message('info', 'Language Class Initialized');
	}

	// --------------------------------------------------------------------

	/**
	 * Load a language file
	 *
	 * @param	mixed	$langfile	Language file name
	 * @param	string	$idiom		Language name (english, etc.)
	 * @param	bool	$return		Whether to return the loaded array of translations
	 * @param 	bool	$add_suffix	Whether to add suffix to $langfile
	 * @param 	string	$alt_path	Alternative path to look for the language file
	 *
	 * @return	void|string[]	Array containing translations, if $return is set to TRUE
	 */
	public function load($langfile, $idiom = '', $return = FALSE, $add_suffix = TRUE, $alt_path = '')
	{
		if (is_array($langfile))
		{
			foreach ($langfile as $value)
			{
				$this->load($value, $idiom, $return, $add_suffix, $alt_path);
			}

			return;
		}

		$langfile = str_replace('.php', '', $langfile);

		if ($add_suffix === TRUE)
		{
			$langfile = preg_replace('/_lang$/', '', $langfile).'_lang';
		}

		$langfile .= '.php';

		if (empty($idiom) OR ! preg_match('/^[a-z_-]+$/i', $idiom))
		{
			$config =& get_config();
			$idiom = empty($config['language']) ? 'english' : $config['language'];
		}

		if ($return === FALSE && isset($this->is_loaded[$langfile]) && $this->is_loaded[$langfile] === $idiom)
		{
			return;
		}

		// Load the base file, so any others found can override it
		$basepath = BASEPATH.'language/'.$idiom.'/'.$langfile;
		if (($found = file_exists($basepath)) === TRUE)
		{
			include($basepath);
		}

		// Do we have an alternative path to look in?
		if ($alt_path !== '')
		{
			$alt_path .= 'language/'.$idiom.'/'.$langfile;
			if (file_exists($alt_path))
			{
				include($alt_path);
				$found = TRUE;
			}
		}
		else
		{
			foreach (get_instance()->load->get_package_paths(TRUE) as $package_path)
			{
				$package_path .= 'language/'.$idiom.'/'.$langfile;
				if ($basepath !== $package_path && file_exists($package_path))
				{
					include($package_path);
					$found = TRUE;
					break;
				}
			}
		}

		if ($found !== TRUE)
		{
			show_error('Unable to load the requested language file: language/'.$idiom.'/'.$langfile);
		}

		if ( ! isset($lang) OR ! is_array($lang))
		{
			log_message('error', 'Language file contains no data: language/'.$idiom.'/'.$langfile);

			if ($return === TRUE)
			{
				return array();
			}
			return;
		}

		if ($return === TRUE)
		{
			return $lang;
		}

		$this->is_loaded[$langfile] = $idiom;
		$this->language = array_merge($this->language, $lang);

		log_message('info', 'Language file loaded: language/'.$idiom.'/'.$langfile);
		return TRUE;
	}

	// --------------------------------------------------------------------

	/**
	 * Language line
	 *
	 * Fetches a single line of text from the language array
	 *
	 * @param	string	$line		Language line key
	 * @param	bool	$log_errors	Whether to log an error message if the line is not found
	 * @return	string	Translation
	 */
	public function line($line
Download .txt
gitextract_q4gz8xoz/

├── .gitignore
├── .htaccess
├── LICENSE
├── README.md
├── application/
│   ├── .htaccess
│   ├── business/
│   │   └── ChatTunnelHandler.php
│   ├── cache/
│   │   ├── .htaccess
│   │   └── index.html
│   ├── config/
│   │   ├── autoload.php
│   │   ├── config.php
│   │   ├── constants.php
│   │   ├── database.php
│   │   ├── doctypes.php
│   │   ├── foreign_chars.php
│   │   ├── hooks.php
│   │   ├── index.html
│   │   ├── memcached.php
│   │   ├── migration.php
│   │   ├── mimes.php
│   │   ├── profiler.php
│   │   ├── routes.php
│   │   ├── smileys.php
│   │   └── user_agents.php
│   ├── controllers/
│   │   ├── Login.php
│   │   ├── Tunnel.php
│   │   ├── User.php
│   │   ├── Welcome.php
│   │   └── index.html
│   ├── core/
│   │   └── index.html
│   ├── helpers/
│   │   ├── general_helper.php
│   │   └── index.html
│   ├── hooks/
│   │   └── index.html
│   ├── index.html
│   ├── language/
│   │   ├── english/
│   │   │   └── index.html
│   │   └── index.html
│   ├── libraries/
│   │   └── index.html
│   ├── logs/
│   │   └── index.html
│   ├── models/
│   │   └── index.html
│   ├── third_party/
│   │   └── index.html
│   └── views/
│       ├── errors/
│       │   ├── cli/
│       │   │   ├── error_404.php
│       │   │   ├── error_db.php
│       │   │   ├── error_exception.php
│       │   │   ├── error_general.php
│       │   │   ├── error_php.php
│       │   │   └── index.html
│       │   ├── html/
│       │   │   ├── error_404.php
│       │   │   ├── error_db.php
│       │   │   ├── error_exception.php
│       │   │   ├── error_general.php
│       │   │   ├── error_php.php
│       │   │   └── index.html
│       │   └── index.html
│       ├── index.html
│       └── welcome_message.php
├── composer.json
├── index.php
├── install_qcloud_sdk.php
└── system/
    ├── .htaccess
    ├── core/
    │   ├── Benchmark.php
    │   ├── CodeIgniter.php
    │   ├── Common.php
    │   ├── Config.php
    │   ├── Controller.php
    │   ├── Exceptions.php
    │   ├── Hooks.php
    │   ├── Input.php
    │   ├── Lang.php
    │   ├── Loader.php
    │   ├── Log.php
    │   ├── Model.php
    │   ├── Output.php
    │   ├── Router.php
    │   ├── Security.php
    │   ├── URI.php
    │   ├── Utf8.php
    │   ├── compat/
    │   │   ├── hash.php
    │   │   ├── index.html
    │   │   ├── mbstring.php
    │   │   ├── password.php
    │   │   └── standard.php
    │   └── index.html
    ├── database/
    │   ├── DB.php
    │   ├── DB_cache.php
    │   ├── DB_driver.php
    │   ├── DB_forge.php
    │   ├── DB_query_builder.php
    │   ├── DB_result.php
    │   ├── DB_utility.php
    │   ├── drivers/
    │   │   ├── cubrid/
    │   │   │   ├── cubrid_driver.php
    │   │   │   ├── cubrid_forge.php
    │   │   │   ├── cubrid_result.php
    │   │   │   ├── cubrid_utility.php
    │   │   │   └── index.html
    │   │   ├── ibase/
    │   │   │   ├── ibase_driver.php
    │   │   │   ├── ibase_forge.php
    │   │   │   ├── ibase_result.php
    │   │   │   ├── ibase_utility.php
    │   │   │   └── index.html
    │   │   ├── index.html
    │   │   ├── mssql/
    │   │   │   ├── index.html
    │   │   │   ├── mssql_driver.php
    │   │   │   ├── mssql_forge.php
    │   │   │   ├── mssql_result.php
    │   │   │   └── mssql_utility.php
    │   │   ├── mysql/
    │   │   │   ├── index.html
    │   │   │   ├── mysql_driver.php
    │   │   │   ├── mysql_forge.php
    │   │   │   ├── mysql_result.php
    │   │   │   └── mysql_utility.php
    │   │   ├── mysqli/
    │   │   │   ├── index.html
    │   │   │   ├── mysqli_driver.php
    │   │   │   ├── mysqli_forge.php
    │   │   │   ├── mysqli_result.php
    │   │   │   └── mysqli_utility.php
    │   │   ├── oci8/
    │   │   │   ├── index.html
    │   │   │   ├── oci8_driver.php
    │   │   │   ├── oci8_forge.php
    │   │   │   ├── oci8_result.php
    │   │   │   └── oci8_utility.php
    │   │   ├── odbc/
    │   │   │   ├── index.html
    │   │   │   ├── odbc_driver.php
    │   │   │   ├── odbc_forge.php
    │   │   │   ├── odbc_result.php
    │   │   │   └── odbc_utility.php
    │   │   ├── pdo/
    │   │   │   ├── index.html
    │   │   │   ├── pdo_driver.php
    │   │   │   ├── pdo_forge.php
    │   │   │   ├── pdo_result.php
    │   │   │   ├── pdo_utility.php
    │   │   │   └── subdrivers/
    │   │   │       ├── index.html
    │   │   │       ├── pdo_4d_driver.php
    │   │   │       ├── pdo_4d_forge.php
    │   │   │       ├── pdo_cubrid_driver.php
    │   │   │       ├── pdo_cubrid_forge.php
    │   │   │       ├── pdo_dblib_driver.php
    │   │   │       ├── pdo_dblib_forge.php
    │   │   │       ├── pdo_firebird_driver.php
    │   │   │       ├── pdo_firebird_forge.php
    │   │   │       ├── pdo_ibm_driver.php
    │   │   │       ├── pdo_ibm_forge.php
    │   │   │       ├── pdo_informix_driver.php
    │   │   │       ├── pdo_informix_forge.php
    │   │   │       ├── pdo_mysql_driver.php
    │   │   │       ├── pdo_mysql_forge.php
    │   │   │       ├── pdo_oci_driver.php
    │   │   │       ├── pdo_oci_forge.php
    │   │   │       ├── pdo_odbc_driver.php
    │   │   │       ├── pdo_odbc_forge.php
    │   │   │       ├── pdo_pgsql_driver.php
    │   │   │       ├── pdo_pgsql_forge.php
    │   │   │       ├── pdo_sqlite_driver.php
    │   │   │       ├── pdo_sqlite_forge.php
    │   │   │       ├── pdo_sqlsrv_driver.php
    │   │   │       └── pdo_sqlsrv_forge.php
    │   │   ├── postgre/
    │   │   │   ├── index.html
    │   │   │   ├── postgre_driver.php
    │   │   │   ├── postgre_forge.php
    │   │   │   ├── postgre_result.php
    │   │   │   └── postgre_utility.php
    │   │   ├── sqlite/
    │   │   │   ├── index.html
    │   │   │   ├── sqlite_driver.php
    │   │   │   ├── sqlite_forge.php
    │   │   │   ├── sqlite_result.php
    │   │   │   └── sqlite_utility.php
    │   │   ├── sqlite3/
    │   │   │   ├── index.html
    │   │   │   ├── sqlite3_driver.php
    │   │   │   ├── sqlite3_forge.php
    │   │   │   ├── sqlite3_result.php
    │   │   │   └── sqlite3_utility.php
    │   │   └── sqlsrv/
    │   │       ├── index.html
    │   │       ├── sqlsrv_driver.php
    │   │       ├── sqlsrv_forge.php
    │   │       ├── sqlsrv_result.php
    │   │       └── sqlsrv_utility.php
    │   └── index.html
    ├── fonts/
    │   └── index.html
    ├── helpers/
    │   ├── array_helper.php
    │   ├── captcha_helper.php
    │   ├── cookie_helper.php
    │   ├── date_helper.php
    │   ├── directory_helper.php
    │   ├── download_helper.php
    │   ├── email_helper.php
    │   ├── file_helper.php
    │   ├── form_helper.php
    │   ├── html_helper.php
    │   ├── index.html
    │   ├── inflector_helper.php
    │   ├── language_helper.php
    │   ├── number_helper.php
    │   ├── path_helper.php
    │   ├── security_helper.php
    │   ├── smiley_helper.php
    │   ├── string_helper.php
    │   ├── text_helper.php
    │   ├── typography_helper.php
    │   ├── url_helper.php
    │   └── xml_helper.php
    ├── index.html
    ├── language/
    │   ├── english/
    │   │   ├── calendar_lang.php
    │   │   ├── date_lang.php
    │   │   ├── db_lang.php
    │   │   ├── email_lang.php
    │   │   ├── form_validation_lang.php
    │   │   ├── ftp_lang.php
    │   │   ├── imglib_lang.php
    │   │   ├── index.html
    │   │   ├── migration_lang.php
    │   │   ├── number_lang.php
    │   │   ├── pagination_lang.php
    │   │   ├── profiler_lang.php
    │   │   ├── unit_test_lang.php
    │   │   └── upload_lang.php
    │   └── index.html
    └── libraries/
        ├── Cache/
        │   ├── Cache.php
        │   ├── drivers/
        │   │   ├── Cache_apc.php
        │   │   ├── Cache_dummy.php
        │   │   ├── Cache_file.php
        │   │   ├── Cache_memcached.php
        │   │   ├── Cache_redis.php
        │   │   ├── Cache_wincache.php
        │   │   └── index.html
        │   └── index.html
        ├── Calendar.php
        ├── Cart.php
        ├── Driver.php
        ├── Email.php
        ├── Encrypt.php
        ├── Encryption.php
        ├── Form_validation.php
        ├── Ftp.php
        ├── Image_lib.php
        ├── Javascript/
        │   ├── Jquery.php
        │   └── index.html
        ├── Javascript.php
        ├── Migration.php
        ├── Pagination.php
        ├── Parser.php
        ├── Profiler.php
        ├── Session/
        │   ├── Session.php
        │   ├── SessionHandlerInterface.php
        │   ├── Session_driver.php
        │   ├── drivers/
        │   │   ├── Session_database_driver.php
        │   │   ├── Session_files_driver.php
        │   │   ├── Session_memcached_driver.php
        │   │   ├── Session_redis_driver.php
        │   │   └── index.html
        │   └── index.html
        ├── Table.php
        ├── Trackback.php
        ├── Typography.php
        ├── Unit_test.php
        ├── Upload.php
        ├── User_agent.php
        ├── Xmlrpc.php
        ├── Xmlrpcs.php
        ├── Zip.php
        └── index.html
Download .txt
SYMBOL INDEX (1839 symbols across 165 files)

FILE: application/business/ChatTunnelHandler.php
  class ChatTunnelHandler (line 11) | class ChatTunnelHandler implements ITunnelHandler {
    method onRequest (line 17) | public function onRequest($tunnelId, $userInfo) {
    method onConnect (line 33) | public function onConnect($tunnelId) {
    method onMessage (line 57) | public function onMessage($tunnelId, $type, $content) {
    method onClose (line 79) | public function onClose($tunnelId) {
    method broadcast (line 110) | private static function broadcast($type, $content) {
    method closeTunnel (line 136) | private static function closeTunnel($tunnelId) {
    method loadData (line 145) | private static function loadData() {
    method saveData (line 164) | private static function saveData($data) {
    method getDataFilePath (line 179) | private static function getDataFilePath() {

FILE: application/controllers/Login.php
  class Login (line 6) | class Login extends CI_Controller {
    method index (line 7) | public function index() {

FILE: application/controllers/Tunnel.php
  class Tunnel (line 8) | class Tunnel extends CI_Controller {
    method index (line 9) | public function index() {

FILE: application/controllers/User.php
  class User (line 6) | class User extends CI_Controller {
    method index (line 7) | public function index() {

FILE: application/controllers/Welcome.php
  class Welcome (line 4) | class Welcome extends CI_Controller {
    method index (line 21) | public function index()

FILE: application/helpers/general_helper.php
  function debug (line 9) | function debug() {

FILE: system/core/Benchmark.php
  class CI_Benchmark (line 52) | class CI_Benchmark {
    method mark (line 70) | public function mark($name)
    method elapsed_time (line 95) | public function elapsed_time($point1 = '', $point2 = '', $decimals = 4)
    method memory_usage (line 128) | public function memory_usage()

FILE: system/core/CodeIgniter.php
  function get_instance (line 364) | function &get_instance()

FILE: system/core/Common.php
  function is_php (line 62) | function is_php($version)
  function is_really_writable (line 91) | function is_really_writable($file)
  function load_class (line 141) | function &load_class($class, $directory = 'libraries', $param = NULL)
  function is_loaded (line 212) | function &is_loaded($class = '')
  function get_config (line 238) | function &get_config(Array $replace = array())
  function config_item (line 293) | function config_item($item)
  function get_mimes (line 316) | function &get_mimes()
  function is_https (line 352) | function is_https()
  function is_cli (line 383) | function is_cli()
  function show_error (line 407) | function show_error($message, $status_code = 500, $heading = 'An Error W...
  function show_404 (line 446) | function show_404($page = '', $log_error = TRUE)
  function log_message (line 468) | function log_message($level, $message)
  function set_status_header (line 493) | function set_status_header($code = 200, $text = '')
  function _error_handler (line 599) | function _error_handler($severity, $message, $filepath, $line)
  function _exception_handler (line 654) | function _exception_handler($exception)
  function _shutdown_handler (line 686) | function _shutdown_handler()
  function remove_invisible_characters (line 711) | function remove_invisible_characters($str, $url_encoded = TRUE)
  function html_escape (line 746) | function html_escape($var, $double_encode = TRUE)
  function _stringify_attributes (line 781) | function _stringify_attributes($attributes, $js = FALSE)
  function function_usable (line 833) | function function_usable($function_name)

FILE: system/core/Config.php
  class CI_Config (line 51) | class CI_Config {
    method __construct (line 84) | public function __construct()
    method load (line 126) | public function load($file = '', $use_sections = FALSE, $fail_graceful...
    method item (line 197) | public function item($item, $index = '')
    method slash_item (line 215) | public function slash_item($item)
    method site_url (line 242) | public function site_url($uri = '', $protocol = NULL)
    method base_url (line 305) | public function base_url($uri = '', $protocol = NULL)
    method _uri_string (line 336) | protected function _uri_string($uri)
    method system_url (line 359) | public function system_url()
    method set_item (line 374) | public function set_item($item, $value)

FILE: system/core/Controller.php
  class CI_Controller (line 52) | class CI_Controller {
    method __construct (line 66) | public function __construct()
    method get_instance (line 91) | public static function &get_instance()

FILE: system/core/Exceptions.php
  class CI_Exceptions (line 49) | class CI_Exceptions {
    method __construct (line 83) | public function __construct()
    method log_exception (line 102) | public function log_exception($severity, $message, $filepath, $line)
    method show_404 (line 119) | public function show_404($page = '', $log_error = TRUE)
    method show_error (line 157) | public function show_error($heading, $message, $template = 'error_gene...
    method show_exception (line 190) | public function show_exception($exception)
    method show_php_error (line 237) | public function show_php_error($severity, $message, $filepath, $line)

FILE: system/core/Hooks.php
  class CI_Hooks (line 51) | class CI_Hooks {
    method __construct (line 88) | public function __construct()
    method call_hook (line 133) | public function call_hook($which = '')
    method _run_hook (line 165) | protected function _run_hook($data)

FILE: system/core/Input.php
  class CI_Input (line 51) | class CI_Input {
    method __construct (line 138) | public function __construct()
    method _fetch_from_array (line 177) | protected function _fetch_from_array(&$array, $index = NULL, $xss_clea...
    method get (line 240) | public function get($index = NULL, $xss_clean = NULL)
    method post (line 254) | public function post($index = NULL, $xss_clean = NULL)
    method post_get (line 268) | public function post_get($index, $xss_clean = NULL)
    method get_post (line 284) | public function get_post($index, $xss_clean = NULL)
    method cookie (line 300) | public function cookie($index = NULL, $xss_clean = NULL)
    method server (line 314) | public function server($index, $xss_clean = NULL)
    method input_stream (line 330) | public function input_stream($index = NULL, $xss_clean = NULL)
    method set_cookie (line 362) | public function set_cookie($name, $value = '', $expire = '', $domain =...
    method ip_address (line 422) | public function ip_address()
    method valid_ip (line 559) | public function valid_ip($ip, $which = '')
    method user_agent (line 584) | public function user_agent($xss_clean = NULL)
    method _sanitize_globals (line 602) | protected function _sanitize_globals()
    method _clean_input_data (line 670) | protected function _clean_input_data($str)
    method _clean_input_keys (line 725) | protected function _clean_input_keys($str, $fatal = TRUE)
    method request_headers (line 758) | public function request_headers($xss_clean = FALSE)
    method get_request_header (line 802) | public function get_request_header($index, $xss_clean = FALSE)
    method is_ajax_request (line 836) | public function is_ajax_request()
    method is_cli_request (line 851) | public function is_cli_request()
    method method (line 867) | public function method($upper = FALSE)
    method __get (line 884) | public function __get($name)

FILE: system/core/Lang.php
  class CI_Lang (line 49) | class CI_Lang {
    method __construct (line 70) | public function __construct()
    method load (line 88) | public function load($langfile, $idiom = '', $return = FALSE, $add_suf...
    method line (line 190) | public function line($line, $log_errors = TRUE)

FILE: system/core/Loader.php
  class CI_Loader (line 51) | class CI_Loader {
    method __construct (line 136) | public function __construct()
    method initialize (line 155) | public function initialize()
    method is_loaded (line 172) | public function is_loaded($class)
    method library (line 190) | public function library($library, $params = NULL, $object_name = NULL)
    method model (line 234) | public function model($model, $name = '', $db_conn = FALSE)
    method database (line 370) | public function database($params = '', $return = FALSE, $query_builder...
    method dbutil (line 406) | public function dbutil($db = NULL, $return = FALSE)
    method dbforge (line 438) | public function dbforge($db = NULL, $return = FALSE)
    method view (line 487) | public function view($view, $vars = array(), $return = FALSE)
    method file (line 501) | public function file($path, $return = FALSE)
    method vars (line 520) | public function vars($vars, $val = '')
    method clear_vars (line 549) | public function clear_vars()
    method get_var (line 565) | public function get_var($key)
    method get_vars (line 579) | public function get_vars()
    method helper (line 592) | public function helper($helpers = array())
    method helpers (line 663) | public function helpers($helpers = array())
    method language (line 679) | public function language($files, $lang = '')
    method config (line 698) | public function config($file, $use_sections = FALSE, $fail_gracefully ...
    method driver (line 717) | public function driver($library, $params = NULL, $object_name = NULL)
    method add_package_path (line 773) | public function add_package_path($path, $view_cascade = TRUE)
    method get_package_paths (line 800) | public function get_package_paths($include_base = FALSE)
    method remove_package_path (line 817) | public function remove_package_path($path = '')
    method _ci_load (line 876) | protected function _ci_load($_ci_data)
    method _ci_load_library (line 1021) | protected function _ci_load_library($class, $params = NULL, $object_na...
    method _ci_load_stock_library (line 1115) | protected function _ci_load_stock_library($library_name, $file_path, $...
    method _ci_init_library (line 1205) | protected function _ci_init_library($class, $prefix, $config = FALSE, ...
    method _ci_autoloader (line 1305) | protected function _ci_autoloader()
    method _ci_object_to_array (line 1387) | protected function _ci_object_to_array($object)
    method _ci_get_component (line 1402) | protected function &_ci_get_component($component)
    method _ci_prep_filename (line 1420) | protected function _ci_prep_filename($filename, $extension)

FILE: system/core/Log.php
  class CI_Log (line 49) | class CI_Log {
    method __construct (line 114) | public function __construct()
    method write_log (line 161) | public function write_log($level, $msg)
    method _format_line (line 243) | protected function _format_line($level, $date, $message)

FILE: system/core/Model.php
  class CI_Model (line 49) | class CI_Model {
    method __construct (line 56) | public function __construct()
    method __get (line 71) | public function __get($key)

FILE: system/core/Output.php
  class CI_Output (line 51) | class CI_Output {
    method __construct (line 132) | public function __construct()
    method get_output (line 156) | public function get_output()
    method set_output (line 171) | public function set_output($output)
    method append_output (line 187) | public function append_output($output)
    method set_header (line 207) | public function set_header($header, $replace = TRUE)
    method set_content_type (line 231) | public function set_content_type($mime_type, $charset = NULL)
    method get_content_type (line 270) | public function get_content_type()
    method get_header (line 291) | public function get_header($header)
    method set_status_header (line 328) | public function set_status_header($code = 200, $text = '')
    method enable_profiler (line 342) | public function enable_profiler($val = TRUE)
    method set_profiler_sections (line 359) | public function set_profiler_sections($sections)
    method cache (line 383) | public function cache($time)
    method _display (line 405) | public function _display($output = '')
    method _write_cache (line 543) | public function _write_cache($output)
    method _display_cache (line 649) | public function _display_cache(&$CFG, &$URI)
    method delete_cache (line 727) | public function delete_cache($uri = '')
    method set_cache_header (line 782) | public function set_cache_header($last_modified, $expiration)

FILE: system/core/Router.php
  class CI_Router (line 51) | class CI_Router {
    method __construct (line 124) | public function __construct($routing = NULL)
    method _set_routing (line 155) | protected function _set_routing()
    method _set_request (line 248) | protected function _set_request($segments = array())
    method _set_default_controller (line 290) | protected function _set_default_controller()
    method _validate_request (line 332) | protected function _validate_request($segments)
    method _parse_routes (line 370) | protected function _parse_routes()
    method set_class (line 434) | public function set_class($class)
    method fetch_class (line 447) | public function fetch_class()
    method set_method (line 460) | public function set_method($method)
    method fetch_method (line 473) | public function fetch_method()
    method set_directory (line 487) | public function set_directory($dir, $append = FALSE)
    method fetch_directory (line 510) | public function fetch_directory()

FILE: system/core/Security.php
  class CI_Security (line 49) | class CI_Security {
    method __construct (line 169) | public function __construct()
    method csrf_verify (line 205) | public function csrf_verify()
    method csrf_set_cookie (line 259) | public function csrf_set_cookie()
    method csrf_show_error (line 290) | public function csrf_show_error()
    method get_csrf_hash (line 303) | public function get_csrf_hash()
    method get_csrf_token_name (line 316) | public function get_csrf_token_name()
    method xss_clean (line 349) | public function xss_clean($str, $is_image = FALSE)
    method xss_hash (line 568) | public function xss_hash()
    method get_random_bytes (line 589) | public function get_random_bytes($length)
    method entity_decode (line 658) | public function entity_decode($str, $charset = NULL)
    method sanitize_filename (line 733) | public function sanitize_filename($str, $relative_path = FALSE)
    method strip_image_tags (line 763) | public function strip_image_tags($str)
    method _compact_exploded_words (line 787) | protected function _compact_exploded_words($matches)
    method _sanitize_naughty_html (line 803) | protected function _sanitize_naughty_html($matches)
    method _js_link_removal (line 898) | protected function _js_link_removal($match)
    method _js_img_removal (line 926) | protected function _js_img_removal($match)
    method _convert_attribute (line 948) | protected function _convert_attribute($match)
    method _filter_attributes (line 965) | protected function _filter_attributes($str)
    method _decode_entity (line 988) | protected function _decode_entity($match)
    method _do_never_allowed (line 1011) | protected function _do_never_allowed($str)
    method _csrf_set_hash (line 1030) | protected function _csrf_set_hash()

FILE: system/core/URI.php
  class CI_URI (line 51) | class CI_URI {
    method __construct (line 99) | public function __construct()
    method _set_uri_string (line 151) | protected function _set_uri_string($str)
    method _parse_request_uri (line 197) | protected function _parse_request_uri()
    method _parse_query_string (line 255) | protected function _parse_query_string()
    method _parse_argv (line 284) | protected function _parse_argv()
    method _remove_relative_directory (line 300) | protected function _remove_relative_directory($uri)
    method filter_uri (line 326) | public function filter_uri(&$str)
    method segment (line 344) | public function segment($n, $no_result = NULL)
    method rsegment (line 364) | public function rsegment($n, $no_result = NULL)
    method uri_to_assoc (line 391) | public function uri_to_assoc($n = 3, $default = array())
    method ruri_to_assoc (line 409) | public function ruri_to_assoc($n = 3, $default = array())
    method _uri_to_assoc (line 428) | protected function _uri_to_assoc($n = 3, $default = array(), $which = ...
    method assoc_to_uri (line 496) | public function assoc_to_uri($array)
    method slash_segment (line 519) | public function slash_segment($n, $where = 'trailing')
    method slash_rsegment (line 535) | public function slash_rsegment($n, $where = 'trailing')
    method _slash_segment (line 555) | protected function _slash_segment($n, $where = 'trailing', $which = 's...
    method segment_array (line 578) | public function segment_array()
    method rsegment_array (line 590) | public function rsegment_array()
    method total_segments (line 602) | public function total_segments()
    method total_rsegments (line 614) | public function total_rsegments()
    method uri_string (line 626) | public function uri_string()
    method ruri_string (line 638) | public function ruri_string()

FILE: system/core/Utf8.php
  class CI_Utf8 (line 51) | class CI_Utf8 {
    method __construct (line 60) | public function __construct()
    method clean_string (line 90) | public function clean_string($str)
    method safe_ascii_for_xml (line 119) | public function safe_ascii_for_xml($str)
    method convert_to_utf8 (line 135) | public function convert_to_utf8($str, $encoding)
    method is_ascii (line 159) | public function is_ascii($str)

FILE: system/core/compat/hash.php
  function hash_equals (line 70) | function hash_equals($known_string, $user_string)
  function hash_pbkdf2 (line 120) | function hash_pbkdf2($algo, $password, $salt, $iterations, $length = 0, ...

FILE: system/core/compat/mbstring.php
  function mb_strlen (line 73) | function mb_strlen($str, $encoding = NULL)
  function mb_strpos (line 102) | function mb_strpos($haystack, $needle, $offset = 0, $encoding = NULL)
  function mb_substr (line 131) | function mb_substr($str, $start, $length = NULL, $encoding = NULL)

FILE: system/core/compat/password.php
  function password_get_info (line 74) | function password_get_info($hash)
  function password_hash (line 95) | function password_hash($password, $algo, array $options = array())
  function password_needs_rehash (line 203) | function password_needs_rehash($hash, $algo, array $options = array())
  function password_verify (line 236) | function password_verify($password, $hash)

FILE: system/core/compat/standard.php
  function array_column (line 70) | function array_column(array $array, $column_key, $index_key = NULL)
  function hex2bin (line 154) | function hex2bin($data)
  function array_replace (line 201) | function array_replace()
  function array_replace_recursive (line 256) | function array_replace_recursive()
  function quoted_printable_encode (line 314) | function quoted_printable_encode($str)

FILE: system/database/DB.php
  function DB (line 51) | function &DB($params = '', $query_builder_override = NULL)

FILE: system/database/DB_cache.php
  class CI_DB_Cache (line 47) | class CI_DB_Cache {
    method __construct (line 74) | public function __construct(&$db)
    method check_path (line 92) | public function check_path($path = '')
    method read (line 140) | public function read($sql)
    method write (line 163) | public function write($sql, $object)
    method delete (line 193) | public function delete($segment_one = '', $segment_two = '')
    method delete_all (line 216) | public function delete_all()

FILE: system/database/DB_driver.php
  class CI_DB_driver (line 53) | abstract class CI_DB_driver {
    method __construct (line 365) | public function __construct($params)
    method initialize (line 385) | public function initialize()
    method db_connect (line 456) | public function db_connect()
    method db_pconnect (line 468) | public function db_pconnect()
    method reconnect (line 486) | public function reconnect()
    method db_select (line 500) | public function db_select()
    method error (line 512) | public function error()
    method db_set_charset (line 525) | public function db_set_charset($charset)
    method platform (line 549) | public function platform()
    method version (line 564) | public function version()
    method _version (line 587) | protected function _version()
    method query (line 608) | public function query($sql, $binds = FALSE, $return_object = NULL)
    method load_rdriver (line 757) | public function load_rdriver()
    method simple_query (line 781) | public function simple_query($sql)
    method trans_off (line 802) | public function trans_off()
    method trans_strict (line 822) | public function trans_strict($mode = TRUE)
    method trans_start (line 835) | public function trans_start($test_mode = FALSE)
    method trans_complete (line 852) | public function trans_complete()
    method trans_status (line 886) | public function trans_status()
    method trans_begin (line 899) | public function trans_begin($test_mode = FALSE)
    method trans_commit (line 933) | public function trans_commit()
    method trans_rollback (line 956) | public function trans_rollback()
    method compile_binds (line 981) | public function compile_binds($sql, $binds)
    method is_write_type (line 1045) | public function is_write_type($sql)
    method elapsed_time (line 1058) | public function elapsed_time($decimals = 6)
    method total_queries (line 1070) | public function total_queries()
    method last_query (line 1082) | public function last_query()
    method escape (line 1098) | public function escape($str)
    method escape_str (line 1130) | public function escape_str($str, $like = FALSE)
    method escape_like_str (line 1168) | public function escape_like_str($str)
    method _escape_str (line 1181) | protected function _escape_str($str)
    method primary (line 1197) | public function primary($table)
    method count_all (line 1214) | public function count_all($table = '')
    method list_tables (line 1240) | public function list_tables($constrain_by_prefix = FALSE)
    method table_exists (line 1295) | public function table_exists($table_name)
    method list_fields (line 1308) | public function list_fields($table)
    method field_exists (line 1359) | public function field_exists($field_name, $table_name)
    method field_data (line 1372) | public function field_data($table)
    method escape_identifiers (line 1388) | public function escape_identifiers($item)
    method insert_string (line 1449) | public function insert_string($table, $data)
    method _insert (line 1474) | protected function _insert($table, $keys, $values)
    method update_string (line 1489) | public function update_string($table, $data, $where)
    method _update (line 1520) | protected function _update($table, $values)
    method _has_operator (line 1541) | protected function _has_operator($str)
    method _get_operator (line 1554) | protected function _get_operator($str)
    method call_function (line 1592) | public function call_function($function)
    method cache_set_path (line 1619) | public function cache_set_path($path = '')
    method cache_on (line 1631) | public function cache_on()
    method cache_off (line 1643) | public function cache_off()
    method cache_delete (line 1657) | public function cache_delete($segment_one = '', $segment_two = '')
    method cache_delete_all (line 1671) | public function cache_delete_all()
    method _cache_init (line 1685) | protected function _cache_init()
    method close (line 1707) | public function close()
    method _close (line 1725) | protected function _close()
    method display_error (line 1740) | public function display_error($error = '', $swap = '', $native = FALSE)
    method protect_identifiers (line 1813) | public function protect_identifiers($item, $prefix_single = FALSE, $pr...
    method _reset_select (line 1982) | protected function _reset_select()

FILE: system/database/DB_forge.php
  class CI_DB_forge (line 47) | abstract class CI_DB_forge {
    method __construct (line 167) | public function __construct(&$db)
    method create_database (line 181) | public function create_database($db_name)
    method drop_database (line 208) | public function drop_database($db_name)
    method add_key (line 240) | public function add_key($key, $primary = FALSE)
    method add_field (line 278) | public function add_field($field)
    method create_table (line 322) | public function create_table($table, $if_not_exists = FALSE, array $at...
    method _create_table (line 377) | protected function _create_table($table, $if_not_exists, $attributes)
    method _create_table_attr (line 431) | protected function _create_table_attr($attributes)
    method drop_table (line 455) | public function drop_table($table_name, $if_exists = FALSE)
    method _drop_table (line 493) | protected function _drop_table($table, $if_exists)
    method rename_table (line 524) | public function rename_table($table_name, $new_table_name)
    method add_column (line 564) | public function add_column($table, $field, $_after = NULL)
    method drop_column (line 607) | public function drop_column($table, $column_name)
    method modify_column (line 627) | public function modify_column($table, $field)
    method _alter_table (line 670) | protected function _alter_table($alter_type, $table, $field)
    method _process_fields (line 702) | protected function _process_fields($create_table = FALSE)
    method _process_column (line 805) | protected function _process_column($field)
    method _attr_type (line 826) | protected function _attr_type(&$attributes)
    method _attr_unsigned (line 849) | protected function _attr_unsigned(&$attributes, &$field)
    method _attr_default (line 890) | protected function _attr_default(&$attributes, &$field)
    method _attr_unique (line 923) | protected function _attr_unique(&$attributes, &$field)
    method _attr_auto_increment (line 940) | protected function _attr_auto_increment(&$attributes, &$field)
    method _process_primary_keys (line 956) | protected function _process_primary_keys($table)
    method _process_indexes (line 985) | protected function _process_indexes($table)
    method _reset (line 1027) | protected function _reset()

FILE: system/database/DB_query_builder.php
  class CI_DB_query_builder (line 52) | abstract class CI_DB_query_builder extends CI_DB_driver {
    method select (line 270) | public function select($select = '*', $escape = NULL)
    method select_max (line 312) | public function select_max($select = '', $alias = '')
    method select_min (line 328) | public function select_min($select = '', $alias = '')
    method select_avg (line 344) | public function select_avg($select = '', $alias = '')
    method select_sum (line 360) | public function select_sum($select = '', $alias = '')
    method _max_min_avg_sum (line 380) | protected function _max_min_avg_sum($select = '', $alias = '', $type =...
    method _create_alias_from_table (line 421) | protected function _create_alias_from_table($item)
    method distinct (line 442) | public function distinct($val = TRUE)
    method from (line 458) | public function from($from)
    method join (line 512) | public function join($table, $cond, $type = '', $escape = NULL)
    method where (line 607) | public function where($key, $value = NULL, $escape = NULL)
    method or_where (line 625) | public function or_where($key, $value = NULL, $escape = NULL)
    method _wh (line 647) | protected function _wh($qb_key, $key, $value = NULL, $type = 'AND ', $...
    method where_in (line 712) | public function where_in($key = NULL, $values = NULL, $escape = NULL)
    method or_where_in (line 730) | public function or_where_in($key = NULL, $values = NULL, $escape = NULL)
    method where_not_in (line 748) | public function where_not_in($key = NULL, $values = NULL, $escape = NULL)
    method or_where_not_in (line 766) | public function or_where_not_in($key = NULL, $values = NULL, $escape =...
    method _where_in (line 788) | protected function _where_in($key = NULL, $values = NULL, $not = FALSE...
    method like (line 850) | public function like($field, $match = '', $side = 'both', $escape = NULL)
    method not_like (line 869) | public function not_like($field, $match = '', $side = 'both', $escape ...
    method or_like (line 888) | public function or_like($field, $match = '', $side = 'both', $escape =...
    method or_not_like (line 907) | public function or_not_like($field, $match = '', $side = 'both', $esca...
    method _like (line 930) | protected function _like($field, $match = '', $type = 'AND ', $side = ...
    method group_start (line 994) | public function group_start($not = '', $type = 'AND ')
    method or_group_start (line 1021) | public function or_group_start()
    method not_group_start (line 1033) | public function not_group_start()
    method or_not_group_start (line 1045) | public function or_not_group_start()
    method group_end (line 1057) | public function group_end()
    method _group_get_type (line 1087) | protected function _group_get_type($type)
    method group_by (line 1107) | public function group_by($by, $escape = NULL)
    method having (line 1150) | public function having($key, $value = NULL, $escape = NULL)
    method or_having (line 1167) | public function or_having($key, $value = NULL, $escape = NULL)
    method order_by (line 1182) | public function order_by($orderby, $direction = '', $escape = NULL)
    method limit (line 1240) | public function limit($value, $offset = 0)
    method offset (line 1256) | public function offset($offset)
    method _limit (line 1272) | protected function _limit($sql)
    method set (line 1289) | public function set($key, $value = '', $escape = NULL)
    method get_compiled_select (line 1320) | public function get_compiled_select($table = '', $reset = TRUE)
    method get (line 1351) | public function get($table = '', $limit = NULL, $offset = NULL)
    method count_all_results (line 1381) | public function count_all_results($table = '', $reset = TRUE)
    method get_where (line 1434) | public function get_where($table = '', $where = NULL, $limit = NULL, $...
    method insert_batch (line 1468) | public function insert_batch($table, $set = NULL, $escape = NULL, $bat...
    method _insert_batch (line 1523) | protected function _insert_batch($table, $keys, $values)
    method set_insert_batch (line 1538) | public function set_insert_batch($key, $value = '', $escape = NULL)
    method get_compiled_insert (line 1597) | public function get_compiled_insert($table = '', $reset = TRUE)
    method insert (line 1632) | public function insert($table = '', $set = NULL, $escape = NULL)
    method _validate_insert (line 1668) | protected function _validate_insert($table = '')
    method replace (line 1698) | public function replace($table = '', $set = NULL)
    method _replace (line 1738) | protected function _replace($table, $keys, $values)
    method _from_tables (line 1755) | protected function _from_tables()
    method get_compiled_update (line 1771) | public function get_compiled_update($table = '', $reset = TRUE)
    method update (line 1804) | public function update($table = '', $set = NULL, $where = NULL, $limit...
    method _validate_update (line 1846) | protected function _validate_update($table)
    method update_batch (line 1877) | public function update_batch($table, $set = NULL, $index = NULL, $batc...
    method _update_batch (line 1942) | protected function _update_batch($table, $values, $index)
    method set_update_batch (line 1981) | public function set_update_batch($key, $index = '', $escape = NULL)
    method empty_table (line 2027) | public function empty_table($table = '')
    method truncate (line 2060) | public function truncate($table = '')
    method _truncate (line 2094) | protected function _truncate($table)
    method get_compiled_delete (line 2110) | public function get_compiled_delete($table = '', $reset = TRUE)
    method delete (line 2131) | public function delete($table = '', $where = '', $limit = NULL, $reset...
    method _delete (line 2195) | protected function _delete($table)
    method dbprefix (line 2211) | public function dbprefix($table = '')
    method set_dbprefix (line 2231) | public function set_dbprefix($prefix = '')
    method _track_aliases (line 2246) | protected function _track_aliases($table)
    method _compile_select (line 2292) | protected function _compile_select($select_override = FALSE)
    method _compile_wh (line 2365) | protected function _compile_wh($qb_key)
    method _compile_group_by (line 2440) | protected function _compile_group_by()
    method _compile_order_by (line 2476) | protected function _compile_order_by()
    method _object_to_array (line 2510) | protected function _object_to_array($object)
    method _object_to_array_batch (line 2540) | protected function _object_to_array_batch($object)
    method start_cache (line 2576) | public function start_cache()
    method stop_cache (line 2591) | public function stop_cache()
    method flush_cache (line 2606) | public function flush_cache()
    method _merge_cache (line 2634) | protected function _merge_cache()
    method _is_literal (line 2688) | protected function _is_literal($str)
    method reset_query (line 2717) | public function reset_query()
    method _reset_run (line 2732) | protected function _reset_run($qb_reset_items)
    method _reset_select (line 2747) | protected function _reset_select()
    method _reset_write (line 2774) | protected function _reset_write()

FILE: system/database/DB_result.php
  class CI_DB_result (line 51) | class CI_DB_result {
    method __construct (line 117) | public function __construct(&$driver_object)
    method num_rows (line 130) | public function num_rows()
    method result (line 156) | public function result($type = 'object')
    method custom_result_object (line 180) | public function custom_result_object($class_name)
    method result_object (line 235) | public function result_object()
    method result_array (line 276) | public function result_array()
    method row (line 321) | public function row($n = 0, $type = 'object')
    method set_row (line 351) | public function set_row($key, $value = NULL)
    method custom_row_object (line 383) | public function custom_row_object($n, $type)
    method row_object (line 408) | public function row_object($n = 0)
    method row_array (line 432) | public function row_array($n = 0)
    method first_row (line 456) | public function first_row($type = 'object')
    method last_row (line 470) | public function last_row($type = 'object')
    method next_row (line 484) | public function next_row($type = 'object')
    method previous_row (line 505) | public function previous_row($type = 'object')
    method unbuffered_row (line 528) | public function unbuffered_row($type = 'object')
    method num_fields (line 563) | public function num_fields()
    method list_fields (line 579) | public function list_fields()
    method field_data (line 595) | public function field_data()
    method free_result (line 609) | public function free_result()
    method data_seek (line 628) | public function data_seek($n = 0)
    method _fetch_assoc (line 644) | protected function _fetch_assoc()
    method _fetch_object (line 661) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/DB_utility.php
  class CI_DB_utility (line 47) | abstract class CI_DB_utility {
    method __construct (line 87) | public function __construct(&$db)
    method list_databases (line 100) | public function list_databases()
    method database_exists (line 136) | public function database_exists($database_name)
    method optimize_table (line 149) | public function optimize_table($table_name)
    method optimize_database (line 173) | public function optimize_database()
    method repair_table (line 210) | public function repair_table($table_name)
    method csv_from_result (line 238) | public function csv_from_result($query, $delim = ',', $newline = "\n",...
    method xml_from_result (line 277) | public function xml_from_result($query, $params = array())
    method backup (line 322) | public function backup($params = array())

FILE: system/database/drivers/cubrid/cubrid_driver.php
  class CI_DB_cubrid_driver (line 53) | class CI_DB_cubrid_driver extends CI_DB {
    method __construct (line 93) | public function __construct($params)
    method db_connect (line 119) | public function db_connect($persistent = FALSE)
    method reconnect (line 145) | public function reconnect()
    method version (line 160) | public function version()
    method _execute (line 180) | protected function _execute($sql)
    method _trans_begin (line 192) | protected function _trans_begin()
    method _trans_commit (line 213) | protected function _trans_commit()
    method _trans_rollback (line 235) | protected function _trans_rollback()
    method _escape_str (line 258) | protected function _escape_str($str)
    method affected_rows (line 270) | public function affected_rows()
    method insert_id (line 282) | public function insert_id()
    method _list_tables (line 297) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 319) | protected function _list_columns($table = '')
    method field_data (line 332) | public function field_data($table)
    method error (line 368) | public function error()
    method _from_tables (line 383) | protected function _from_tables()
    method _close (line 400) | protected function _close()

FILE: system/database/drivers/cubrid/cubrid_forge.php
  class CI_DB_cubrid_forge (line 47) | class CI_DB_cubrid_forge extends CI_DB_forge {
    method _alter_table (line 105) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 138) | protected function _process_column($field)
    method _attr_type (line 169) | protected function _attr_type(&$attributes)
    method _process_indexes (line 196) | protected function _process_indexes($table)

FILE: system/database/drivers/cubrid/cubrid_result.php
  class CI_DB_cubrid_result (line 49) | class CI_DB_cubrid_result extends CI_DB_result {
    method num_rows (line 56) | public function num_rows()
    method num_fields (line 70) | public function num_fields()
    method list_fields (line 84) | public function list_fields()
    method field_data (line 98) | public function field_data()
    method free_result (line 121) | public function free_result()
    method data_seek (line 143) | public function data_seek($n = 0)
    method _fetch_assoc (line 157) | protected function _fetch_assoc()
    method _fetch_object (line 172) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/cubrid/cubrid_utility.php
  class CI_DB_cubrid_utility (line 47) | class CI_DB_cubrid_utility extends CI_DB_utility {
    method list_databases (line 54) | public function list_databases()
    method _backup (line 72) | protected function _backup($params = array())

FILE: system/database/drivers/ibase/ibase_driver.php
  class CI_DB_ibase_driver (line 53) | class CI_DB_ibase_driver extends CI_DB {
    method db_connect (line 86) | public function db_connect($persistent = FALSE)
    method version (line 100) | public function version()
    method _execute (line 127) | protected function _execute($sql)
    method _trans_begin (line 139) | protected function _trans_begin()
    method _trans_commit (line 157) | protected function _trans_commit()
    method _trans_rollback (line 175) | protected function _trans_rollback()
    method affected_rows (line 193) | public function affected_rows()
    method insert_id (line 207) | public function insert_id($generator_name, $inc_by = 0)
    method _list_tables (line 223) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 246) | protected function _list_columns($table = '')
    method field_data (line 259) | public function field_data($table)
    method error (line 301) | public function error()
    method _update (line 317) | protected function _update($table, $values)
    method _truncate (line 336) | protected function _truncate($table)
    method _delete (line 351) | protected function _delete($table)
    method _limit (line 367) | protected function _limit($sql)
    method _close (line 391) | protected function _close()

FILE: system/database/drivers/ibase/ibase_forge.php
  class CI_DB_ibase_forge (line 47) | class CI_DB_ibase_forge extends CI_DB_forge {
    method create_database (line 96) | public function create_database($db_name)
    method drop_database (line 114) | public function drop_database($db_name = '')
    method _alter_table (line 142) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 196) | protected function _process_column($field)
    method _attr_type (line 215) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 246) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/ibase/ibase_result.php
  class CI_DB_ibase_result (line 49) | class CI_DB_ibase_result extends CI_DB_result {
    method num_fields (line 56) | public function num_fields()
    method list_fields (line 70) | public function list_fields()
    method field_data (line 91) | public function field_data()
    method free_result (line 114) | public function free_result()
    method _fetch_assoc (line 128) | protected function _fetch_assoc()
    method _fetch_object (line 143) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/ibase/ibase_utility.php
  class CI_DB_ibase_utility (line 47) | class CI_DB_ibase_utility extends CI_DB_utility {
    method _backup (line 55) | protected function _backup($filename)

FILE: system/database/drivers/mssql/mssql_driver.php
  class CI_DB_mssql_driver (line 53) | class CI_DB_mssql_driver extends CI_DB {
    method __construct (line 91) | public function __construct($params)
    method db_connect (line 109) | public function db_connect($persistent = FALSE)
    method db_select (line 149) | public function db_select($database = '')
    method _execute (line 176) | protected function _execute($sql)
    method _trans_begin (line 188) | protected function _trans_begin()
    method _trans_commit (line 200) | protected function _trans_commit()
    method _trans_rollback (line 212) | protected function _trans_rollback()
    method affected_rows (line 224) | public function affected_rows()
    method insert_id (line 238) | public function insert_id()
    method _db_set_charset (line 257) | protected function _db_set_charset($charset)
    method _version (line 269) | protected function _version()
    method _list_tables (line 284) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 309) | protected function _list_columns($table = '')
    method field_data (line 324) | public function field_data($table)
    method error (line 359) | public function error()
    method _update (line 387) | protected function _update($table, $values)
    method _truncate (line 407) | protected function _truncate($table)
    method _delete (line 422) | protected function _delete($table)
    method _limit (line 442) | protected function _limit($sql)
    method _insert_batch (line 495) | protected function _insert_batch($table, $keys, $values)
    method _close (line 513) | protected function _close()

FILE: system/database/drivers/mssql/mssql_forge.php
  class CI_DB_mssql_forge (line 49) | class CI_DB_mssql_forge extends CI_DB_forge {
    method _alter_table (line 87) | protected function _alter_table($alter_type, $table, $field)
    method _attr_type (line 114) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 143) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/mssql/mssql_result.php
  class CI_DB_mssql_result (line 51) | class CI_DB_mssql_result extends CI_DB_result {
    method num_rows (line 58) | public function num_rows()
    method num_fields (line 72) | public function num_fields()
    method list_fields (line 86) | public function list_fields()
    method field_data (line 107) | public function field_data()
    method free_result (line 130) | public function free_result()
    method data_seek (line 151) | public function data_seek($n = 0)
    method _fetch_assoc (line 165) | protected function _fetch_assoc()
    method _fetch_object (line 180) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/mssql/mssql_utility.php
  class CI_DB_mssql_utility (line 49) | class CI_DB_mssql_utility extends CI_DB_utility {
    method _backup (line 71) | protected function _backup($params = array())

FILE: system/database/drivers/mysql/mysql_driver.php
  class CI_DB_mysql_driver (line 53) | class CI_DB_mysql_driver extends CI_DB {
    method __construct (line 106) | public function __construct($params)
    method db_connect (line 124) | public function db_connect($persistent = FALSE)
    method reconnect (line 185) | public function reconnect()
    method db_select (line 201) | public function db_select($database = '')
    method _db_set_charset (line 226) | protected function _db_set_charset($charset)
    method version (line 238) | public function version()
    method _execute (line 261) | protected function _execute($sql)
    method _prep_query (line 276) | protected function _prep_query($sql)
    method _trans_begin (line 295) | protected function _trans_begin()
    method _trans_commit (line 308) | protected function _trans_commit()
    method _trans_rollback (line 326) | protected function _trans_rollback()
    method _escape_str (line 345) | protected function _escape_str($str)
    method affected_rows (line 357) | public function affected_rows()
    method insert_id (line 369) | public function insert_id()
    method _list_tables (line 384) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 406) | protected function _list_columns($table = '')
    method field_data (line 419) | public function field_data($table)
    method error (line 455) | public function error()
    method _from_tables (line 470) | protected function _from_tables()
    method _close (line 487) | protected function _close()

FILE: system/database/drivers/mysql/mysql_forge.php
  class CI_DB_mysql_forge (line 47) | class CI_DB_mysql_forge extends CI_DB_forge {
    method _create_table_attr (line 101) | protected function _create_table_attr($attributes)
    method _alter_table (line 136) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 178) | protected function _process_column($field)
    method _process_indexes (line 209) | protected function _process_indexes($table)

FILE: system/database/drivers/mysql/mysql_result.php
  class CI_DB_mysql_result (line 49) | class CI_DB_mysql_result extends CI_DB_result {
    method __construct (line 57) | public function __construct(&$driver_object)
    method num_rows (line 73) | public function num_rows()
    method num_fields (line 85) | public function num_fields()
    method list_fields (line 99) | public function list_fields()
    method field_data (line 120) | public function field_data()
    method free_result (line 142) | public function free_result()
    method data_seek (line 163) | public function data_seek($n = 0)
    method _fetch_assoc (line 179) | protected function _fetch_assoc()
    method _fetch_object (line 194) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/mysql/mysql_utility.php
  class CI_DB_mysql_utility (line 47) | class CI_DB_mysql_utility extends CI_DB_utility {
    method _backup (line 78) | protected function _backup($params = array())

FILE: system/database/drivers/mysqli/mysqli_driver.php
  class CI_DB_mysqli_driver (line 53) | class CI_DB_mysqli_driver extends CI_DB {
    method db_connect (line 117) | public function db_connect($persistent = FALSE)
    method reconnect (line 233) | public function reconnect()
    method db_select (line 249) | public function db_select($database = '')
    method _db_set_charset (line 274) | protected function _db_set_charset($charset)
    method version (line 286) | public function version()
    method _execute (line 304) | protected function _execute($sql)
    method _prep_query (line 319) | protected function _prep_query($sql)
    method _trans_begin (line 338) | protected function _trans_begin()
    method _trans_commit (line 353) | protected function _trans_commit()
    method _trans_rollback (line 371) | protected function _trans_rollback()
    method _escape_str (line 390) | protected function _escape_str($str)
    method affected_rows (line 402) | public function affected_rows()
    method insert_id (line 414) | public function insert_id()
    method _list_tables (line 429) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 451) | protected function _list_columns($table = '')
    method field_data (line 464) | public function field_data($table)
    method error (line 500) | public function error()
    method _from_tables (line 523) | protected function _from_tables()
    method _close (line 540) | protected function _close()

FILE: system/database/drivers/mysqli/mysqli_forge.php
  class CI_DB_mysqli_forge (line 49) | class CI_DB_mysqli_forge extends CI_DB_forge {
    method _create_table_attr (line 103) | protected function _create_table_attr($attributes)
    method _alter_table (line 138) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 180) | protected function _process_column($field)
    method _process_indexes (line 210) | protected function _process_indexes($table)

FILE: system/database/drivers/mysqli/mysqli_result.php
  class CI_DB_mysqli_result (line 51) | class CI_DB_mysqli_result extends CI_DB_result {
    method num_rows (line 58) | public function num_rows()
    method num_fields (line 72) | public function num_fields()
    method list_fields (line 86) | public function list_fields()
    method field_data (line 107) | public function field_data()
    method free_result (line 131) | public function free_result()
    method data_seek (line 152) | public function data_seek($n = 0)
    method _fetch_assoc (line 166) | protected function _fetch_assoc()
    method _fetch_object (line 181) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/mysqli/mysqli_utility.php
  class CI_DB_mysqli_utility (line 49) | class CI_DB_mysqli_utility extends CI_DB_utility {
    method _backup (line 80) | protected function _backup($params = array())

FILE: system/database/drivers/oci8/oci8_driver.php
  class CI_DB_oci8_driver (line 62) | class CI_DB_oci8_driver extends CI_DB {
    method __construct (line 146) | public function __construct($params)
    method db_connect (line 233) | public function db_connect($persistent = FALSE)
    method version (line 248) | public function version()
    method _execute (line 275) | protected function _execute($sql)
    method get_cursor (line 296) | public function get_cursor()
    method stored_procedure (line 320) | public function stored_procedure($package, $procedure, array $params)
    method _bind_params (line 359) | protected function _bind_params($params)
    method _trans_begin (line 387) | protected function _trans_begin()
    method _trans_commit (line 400) | protected function _trans_commit()
    method _trans_rollback (line 414) | protected function _trans_rollback()
    method affected_rows (line 427) | public function affected_rows()
    method insert_id (line 439) | public function insert_id()
    method _list_tables (line 455) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 478) | protected function _list_columns($table = '')
    method field_data (line 502) | public function field_data($table)
    method error (line 560) | public function error()
    method _insert_batch (line 599) | protected function _insert_batch($table, $keys, $values)
    method _truncate (line 625) | protected function _truncate($table)
    method _delete (line 640) | protected function _delete($table)
    method _limit (line 661) | protected function _limit($sql)
    method _close (line 683) | protected function _close()

FILE: system/database/drivers/oci8/oci8_forge.php
  class CI_DB_oci8_forge (line 47) | class CI_DB_oci8_forge extends CI_DB_forge {
    method _alter_table (line 94) | protected function _alter_table($alter_type, $table, $field)
    method _attr_auto_increment (line 151) | protected function _attr_auto_increment(&$attributes, &$field)
    method _attr_type (line 166) | protected function _attr_type(&$attributes)

FILE: system/database/drivers/oci8/oci8_result.php
  class CI_DB_oci8_result (line 49) | class CI_DB_oci8_result extends CI_DB_result {
    method __construct (line 87) | public function __construct(&$driver_object)
    method num_fields (line 105) | public function num_fields()
    method list_fields (line 122) | public function list_fields()
    method field_data (line 141) | public function field_data()
    method free_result (line 164) | public function free_result()
    method _fetch_assoc (line 193) | protected function _fetch_assoc()
    method _fetch_object (line 209) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/oci8/oci8_utility.php
  class CI_DB_oci8_utility (line 47) | class CI_DB_oci8_utility extends CI_DB_utility {
    method _backup (line 62) | protected function _backup($params = array())

FILE: system/database/drivers/odbc/odbc_driver.php
  class CI_DB_odbc_driver (line 53) | class CI_DB_odbc_driver extends CI_DB_driver {
    method __construct (line 118) | public function __construct($params)
    method db_connect (line 137) | public function db_connect($persistent = FALSE)
    method compile_binds (line 153) | public function compile_binds($sql, $binds)
    method _execute (line 220) | protected function _execute($sql)
    method _trans_begin (line 250) | protected function _trans_begin()
    method _trans_commit (line 262) | protected function _trans_commit()
    method _trans_rollback (line 280) | protected function _trans_rollback()
    method is_write_type (line 299) | public function is_write_type($sql)
    method _escape_str (line 317) | protected function _escape_str($str)
    method affected_rows (line 329) | public function affected_rows()
    method insert_id (line 341) | public function insert_id()
    method _list_tables (line 356) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 379) | protected function _list_columns($table = '')
    method _field_data (line 394) | protected function _field_data($table)
    method error (line 409) | public function error()
    method _close (line 421) | protected function _close()

FILE: system/database/drivers/odbc/odbc_forge.php
  class CI_DB_odbc_forge (line 49) | class CI_DB_odbc_forge extends CI_DB_forge {
    method _attr_auto_increment (line 81) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/odbc/odbc_result.php
  class CI_DB_odbc_result (line 51) | class CI_DB_odbc_result extends CI_DB_result {
    method num_rows (line 58) | public function num_rows()
    method num_fields (line 89) | public function num_fields()
    method list_fields (line 103) | public function list_fields()
    method field_data (line 128) | public function field_data()
    method free_result (line 151) | public function free_result()
    method _fetch_assoc (line 169) | protected function _fetch_assoc()
    method _fetch_object (line 184) | protected function _fetch_object($class_name = 'stdClass')
  function odbc_fetch_array (line 218) | function odbc_fetch_array(&$result, $rownumber = 1)
  function odbc_fetch_object (line 251) | function odbc_fetch_object(&$result, $rownumber = 1)

FILE: system/database/drivers/odbc/odbc_utility.php
  class CI_DB_odbc_utility (line 49) | class CI_DB_odbc_utility extends CI_DB_utility {
    method _backup (line 57) | protected function _backup($params = array())

FILE: system/database/drivers/pdo/pdo_driver.php
  class CI_DB_pdo_driver (line 53) | class CI_DB_pdo_driver extends CI_DB {
    method __construct (line 79) | public function __construct($params)
    method db_connect (line 127) | public function db_connect($persistent = FALSE)
    method version (line 156) | public function version()
    method _execute (line 182) | protected function _execute($sql)
    method _trans_begin (line 194) | protected function _trans_begin()
    method _trans_commit (line 206) | protected function _trans_commit()
    method _trans_rollback (line 218) | protected function _trans_rollback()
    method _escape_str (line 231) | protected function _escape_str($str)
    method affected_rows (line 249) | public function affected_rows()
    method insert_id (line 262) | public function insert_id($name = NULL)
    method _field_data (line 277) | protected function _field_data($table)
    method error (line 292) | public function error()
    method _update_batch (line 323) | protected function _update_batch($table, $values, $index)
    method _truncate (line 370) | protected function _truncate($table)

FILE: system/database/drivers/pdo/pdo_forge.php
  class CI_DB_pdo_forge (line 49) | class CI_DB_pdo_forge extends CI_DB_forge {

FILE: system/database/drivers/pdo/pdo_result.php
  class CI_DB_pdo_result (line 51) | class CI_DB_pdo_result extends CI_DB_result {
    method num_rows (line 58) | public function num_rows()
    method num_fields (line 87) | public function num_fields()
    method list_fields (line 101) | public function list_fields()
    method field_data (line 124) | public function field_data()
    method free_result (line 161) | public function free_result()
    method _fetch_assoc (line 178) | protected function _fetch_assoc()
    method _fetch_object (line 193) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/pdo/pdo_utility.php
  class CI_DB_pdo_utility (line 49) | class CI_DB_pdo_utility extends CI_DB_utility {
    method _backup (line 57) | protected function _backup($params = array())

FILE: system/database/drivers/pdo/subdrivers/pdo_4d_driver.php
  class CI_DB_pdo_4d_driver (line 53) | class CI_DB_pdo_4d_driver extends CI_DB_pdo_driver {
    method __construct (line 79) | public function __construct($params)
    method _list_tables (line 107) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 130) | protected function _list_columns($table = '')
    method _field_data (line 146) | protected function _field_data($table)
    method _update (line 162) | protected function _update($table, $values)
    method _delete (line 179) | protected function _delete($table)
    method _limit (line 195) | protected function _limit($sql)

FILE: system/database/drivers/pdo/subdrivers/pdo_4d_forge.php
  class CI_DB_pdo_4d_forge (line 47) | class CI_DB_pdo_4d_forge extends CI_DB_pdo_forge {
    method _alter_table (line 113) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 132) | protected function _process_column($field)
    method _attr_type (line 151) | protected function _attr_type(&$attributes)
    method _attr_unique (line 182) | protected function _attr_unique(&$attributes, &$field)
    method _attr_auto_increment (line 202) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/pdo/subdrivers/pdo_cubrid_driver.php
  class CI_DB_pdo_cubrid_driver (line 53) | class CI_DB_pdo_cubrid_driver extends CI_DB_pdo_driver {
    method __construct (line 86) | public function __construct($params)
    method _list_tables (line 110) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 132) | protected function _list_columns($table = '')
    method field_data (line 145) | public function field_data($table)
    method _update_batch (line 183) | protected function _update_batch($table, $values, $index)
    method _truncate (line 225) | protected function _truncate($table)
    method _from_tables (line 240) | protected function _from_tables()

FILE: system/database/drivers/pdo/subdrivers/pdo_cubrid_forge.php
  class CI_DB_pdo_cubrid_forge (line 47) | class CI_DB_pdo_cubrid_forge extends CI_DB_pdo_forge {
    method _alter_table (line 105) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 138) | protected function _process_column($field)
    method _attr_type (line 169) | protected function _attr_type(&$attributes)
    method _process_indexes (line 196) | protected function _process_indexes($table)

FILE: system/database/drivers/pdo/subdrivers/pdo_dblib_driver.php
  class CI_DB_pdo_dblib_driver (line 53) | class CI_DB_pdo_dblib_driver extends CI_DB_pdo_driver {
    method __construct (line 91) | public function __construct($params)
    method db_connect (line 127) | public function db_connect($persistent = FALSE)
    method _list_tables (line 160) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 185) | protected function _list_columns($table = '')
    method field_data (line 200) | public function field_data($table)
    method _update (line 236) | protected function _update($table, $values)
    method _delete (line 253) | protected function _delete($table)
    method _limit (line 273) | protected function _limit($sql)
    method _insert_batch (line 326) | protected function _insert_batch($table, $keys, $values)

FILE: system/database/drivers/pdo/subdrivers/pdo_dblib_forge.php
  class CI_DB_pdo_dblib_forge (line 47) | class CI_DB_pdo_dblib_forge extends CI_DB_pdo_forge {
    method _alter_table (line 85) | protected function _alter_table($alter_type, $table, $field)
    method _attr_type (line 112) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 141) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/pdo/subdrivers/pdo_firebird_driver.php
  class CI_DB_pdo_firebird_driver (line 53) | class CI_DB_pdo_firebird_driver extends CI_DB_pdo_driver {
    method __construct (line 81) | public function __construct($params)
    method _list_tables (line 117) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 140) | protected function _list_columns($table = '')
    method field_data (line 153) | public function field_data($table)
    method _update (line 196) | protected function _update($table, $values)
    method _truncate (line 215) | protected function _truncate($table)
    method _delete (line 230) | protected function _delete($table)
    method _limit (line 246) | protected function _limit($sql)

FILE: system/database/drivers/pdo/subdrivers/pdo_firebird_forge.php
  class CI_DB_pdo_firebird_forge (line 47) | class CI_DB_pdo_firebird_forge extends CI_DB_pdo_forge {
    method create_database (line 82) | public function create_database($db_name)
    method drop_database (line 100) | public function drop_database($db_name = '')
    method _alter_table (line 128) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 182) | protected function _process_column($field)
    method _attr_type (line 201) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 232) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php
  class CI_DB_pdo_ibm_driver (line 53) | class CI_DB_pdo_ibm_driver extends CI_DB_pdo_driver {
    method __construct (line 72) | public function __construct($params)
    method _list_tables (line 138) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 162) | protected function _list_columns($table = '')
    method field_data (line 177) | public function field_data($table)
    method _update (line 202) | protected function _update($table, $values)
    method _delete (line 219) | protected function _delete($table)
    method _limit (line 235) | protected function _limit($sql)

FILE: system/database/drivers/pdo/subdrivers/pdo_ibm_forge.php
  class CI_DB_pdo_ibm_forge (line 47) | class CI_DB_pdo_ibm_forge extends CI_DB_pdo_forge {
    method _alter_table (line 84) | protected function _alter_table($alter_type, $table, $field)
    method _attr_type (line 104) | protected function _attr_type(&$attributes)
    method _attr_unique (line 129) | protected function _attr_unique(&$attributes, &$field)
    method _attr_auto_increment (line 149) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/pdo/subdrivers/pdo_informix_driver.php
  class CI_DB_pdo_informix_driver (line 53) | class CI_DB_pdo_informix_driver extends CI_DB_pdo_driver {
    method __construct (line 81) | public function __construct($params)
    method _list_tables (line 140) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 164) | protected function _list_columns($table = '')
    method field_data (line 190) | public function field_data($table)
    method _update (line 252) | protected function _update($table, $values)
    method _truncate (line 272) | protected function _truncate($table)
    method _delete (line 287) | protected function _delete($table)
    method _limit (line 303) | protected function _limit($sql)

FILE: system/database/drivers/pdo/subdrivers/pdo_informix_forge.php
  class CI_DB_pdo_informix_forge (line 47) | class CI_DB_pdo_informix_forge extends CI_DB_pdo_forge {
    method _alter_table (line 86) | protected function _alter_table($alter_type, $table, $field)
    method _attr_type (line 106) | protected function _attr_type(&$attributes)
    method _attr_unique (line 141) | protected function _attr_unique(&$attributes, &$field)
    method _attr_auto_increment (line 158) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php
  class CI_DB_pdo_mysql_driver (line 53) | class CI_DB_pdo_mysql_driver extends CI_DB_pdo_driver {
    method __construct (line 97) | public function __construct($params)
    method db_connect (line 123) | public function db_connect($persistent = FALSE)
    method db_select (line 211) | public function db_select($database = '')
    method _list_tables (line 238) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 260) | protected function _list_columns($table = '')
    method field_data (line 273) | public function field_data($table)
    method _truncate (line 312) | protected function _truncate($table)
    method _from_tables (line 327) | protected function _from_tables()

FILE: system/database/drivers/pdo/subdrivers/pdo_mysql_forge.php
  class CI_DB_pdo_mysql_forge (line 47) | class CI_DB_pdo_mysql_forge extends CI_DB_pdo_forge {
    method _create_table_attr (line 115) | protected function _create_table_attr($attributes)
    method _alter_table (line 150) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 192) | protected function _process_column($field)
    method _process_indexes (line 222) | protected function _process_indexes($table)

FILE: system/database/drivers/pdo/subdrivers/pdo_oci_driver.php
  class CI_DB_pdo_oci_driver (line 53) | class CI_DB_pdo_oci_driver extends CI_DB_pdo_driver {
    method __construct (line 100) | public function __construct($params)
    method version (line 137) | public function version()
    method _list_tables (line 163) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 186) | protected function _list_columns($table = '')
    method field_data (line 210) | public function field_data($table)
    method _insert_batch (line 268) | protected function _insert_batch($table, $keys, $values)
    method _delete (line 291) | protected function _delete($table)
    method _limit (line 312) | protected function _limit($sql)

FILE: system/database/drivers/pdo/subdrivers/pdo_oci_forge.php
  class CI_DB_pdo_oci_forge (line 47) | class CI_DB_pdo_oci_forge extends CI_DB_pdo_forge {
    method _alter_table (line 87) | protected function _alter_table($alter_type, $table, $field)
    method _attr_auto_increment (line 144) | protected function _attr_auto_increment(&$attributes, &$field)
    method _attr_type (line 157) | protected function _attr_type(&$attributes)

FILE: system/database/drivers/pdo/subdrivers/pdo_odbc_driver.php
  class CI_DB_pdo_odbc_driver (line 53) | class CI_DB_pdo_odbc_driver extends CI_DB_pdo_driver {
    method __construct (line 104) | public function __construct($params)
    method _escape_str (line 169) | protected function _escape_str($str)
    method is_write_type (line 182) | public function is_write_type($sql)
    method _list_tables (line 202) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 225) | protected function _list_columns($table = '')

FILE: system/database/drivers/pdo/subdrivers/pdo_odbc_forge.php
  class CI_DB_pdo_odbc_forge (line 47) | class CI_DB_pdo_odbc_forge extends CI_DB_pdo_forge {
    method _attr_auto_increment (line 65) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/pdo/subdrivers/pdo_pgsql_driver.php
  class CI_DB_pdo_pgsql_driver (line 53) | class CI_DB_pdo_pgsql_driver extends CI_DB_pdo_driver {
    method __construct (line 88) | public function __construct($params)
    method db_connect (line 115) | public function db_connect($persistent = FALSE)
    method insert_id (line 135) | public function insert_id($name = NULL)
    method is_write_type (line 155) | public function is_write_type($sql)
    method escape (line 175) | public function escape($str)
    method order_by (line 195) | public function order_by($orderby, $direction = '', $escape = NULL)
    method _list_tables (line 230) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 254) | protected function _list_columns($table = '')
    method field_data (line 269) | public function field_data($table)
    method _update (line 305) | protected function _update($table, $values)
    method _update_batch (line 324) | protected function _update_batch($table, $values, $index)
    method _delete (line 363) | protected function _delete($table)
    method _limit (line 379) | protected function _limit($sql)

FILE: system/database/drivers/pdo/subdrivers/pdo_pgsql_forge.php
  class CI_DB_pdo_pgsql_forge (line 47) | class CI_DB_pdo_pgsql_forge extends CI_DB_pdo_forge {
    method __construct (line 88) | public function __construct(&$db)
    method _alter_table (line 108) | protected function _alter_table($alter_type, $table, $field)
    method _attr_type (line 169) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 200) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/pdo/subdrivers/pdo_sqlite_driver.php
  class CI_DB_pdo_sqlite_driver (line 53) | class CI_DB_pdo_sqlite_driver extends CI_DB_pdo_driver {
    method __construct (line 81) | public function __construct($params)
    method _list_tables (line 108) | protected function _list_tables($prefix_limit = FALSE)
    method list_fields (line 129) | public function list_fields($table)
    method field_data (line 159) | public function field_data($table)
    method _replace (line 196) | protected function _replace($table, $keys, $values)
    method _truncate (line 214) | protected function _truncate($table)

FILE: system/database/drivers/pdo/subdrivers/pdo_sqlite_forge.php
  class CI_DB_pdo_sqlite_forge (line 47) | class CI_DB_pdo_sqlite_forge extends CI_DB_pdo_forge {
    method __construct (line 85) | public function __construct(&$db)
    method create_database (line 104) | public function create_database($db_name = '')
    method drop_database (line 119) | public function drop_database($db_name = '')
    method _alter_table (line 155) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 183) | protected function _process_column($field)
    method _attr_type (line 203) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 224) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/pdo/subdrivers/pdo_sqlsrv_driver.php
  class CI_DB_pdo_sqlsrv_driver (line 53) | class CI_DB_pdo_sqlsrv_driver extends CI_DB_pdo_driver {
    method __construct (line 91) | public function __construct($params)
    method db_connect (line 151) | public function db_connect($persistent = FALSE)
    method _list_tables (line 184) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 209) | protected function _list_columns($table = '')
    method field_data (line 224) | public function field_data($table)
    method _update (line 260) | protected function _update($table, $values)
    method _delete (line 277) | protected function _delete($table)
    method _limit (line 297) | protected function _limit($sql)
    method _insert_batch (line 358) | protected function _insert_batch($table, $keys, $values)

FILE: system/database/drivers/pdo/subdrivers/pdo_sqlsrv_forge.php
  class CI_DB_pdo_sqlsrv_forge (line 47) | class CI_DB_pdo_sqlsrv_forge extends CI_DB_pdo_forge {
    method _alter_table (line 85) | protected function _alter_table($alter_type, $table, $field)
    method _attr_type (line 112) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 141) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/postgre/postgre_driver.php
  class CI_DB_postgre_driver (line 53) | class CI_DB_postgre_driver extends CI_DB {
    method __construct (line 88) | public function __construct($params)
    method db_connect (line 150) | public function db_connect($persistent = FALSE)
    method reconnect (line 182) | public function reconnect()
    method _db_set_charset (line 198) | protected function _db_set_charset($charset)
    method version (line 210) | public function version()
    method _execute (line 240) | protected function _execute($sql)
    method _trans_begin (line 252) | protected function _trans_begin()
    method _trans_commit (line 264) | protected function _trans_commit()
    method _trans_rollback (line 276) | protected function _trans_rollback()
    method is_write_type (line 289) | public function is_write_type($sql)
    method _escape_str (line 307) | protected function _escape_str($str)
    method escape (line 322) | public function escape($str)
    method affected_rows (line 343) | public function affected_rows()
    method insert_id (line 355) | public function insert_id()
    method _list_tables (line 404) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 428) | protected function _list_columns($table = '')
    method field_data (line 443) | public function field_data($table)
    method error (line 478) | public function error()
    method order_by (line 493) | public function order_by($orderby, $direction = '', $escape = NULL)
    method _update (line 529) | protected function _update($table, $values)
    method _update_batch (line 548) | protected function _update_batch($table, $values, $index)
    method _delete (line 587) | protected function _delete($table)
    method _limit (line 603) | protected function _limit($sql)
    method _close (line 615) | protected function _close()

FILE: system/database/drivers/postgre/postgre_forge.php
  class CI_DB_postgre_forge (line 49) | class CI_DB_postgre_forge extends CI_DB_forge {
    method __construct (line 83) | public function __construct(&$db)
    method _alter_table (line 103) | protected function _alter_table($alter_type, $table, $field)
    method _attr_type (line 164) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 195) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/postgre/postgre_result.php
  class CI_DB_postgre_result (line 51) | class CI_DB_postgre_result extends CI_DB_result {
    method num_rows (line 58) | public function num_rows()
    method num_fields (line 72) | public function num_fields()
    method list_fields (line 86) | public function list_fields()
    method field_data (line 106) | public function field_data()
    method free_result (line 127) | public function free_result()
    method data_seek (line 148) | public function data_seek($n = 0)
    method _fetch_assoc (line 162) | protected function _fetch_assoc()
    method _fetch_object (line 177) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/postgre/postgre_utility.php
  class CI_DB_postgre_utility (line 49) | class CI_DB_postgre_utility extends CI_DB_utility {
    method _backup (line 73) | protected function _backup($params = array())

FILE: system/database/drivers/sqlite/sqlite_driver.php
  class CI_DB_sqlite_driver (line 53) | class CI_DB_sqlite_driver extends CI_DB {
    method db_connect (line 79) | public function db_connect($persistent = FALSE)
    method version (line 98) | public function version()
    method _execute (line 113) | protected function _execute($sql)
    method _trans_begin (line 127) | protected function _trans_begin()
    method _trans_commit (line 139) | protected function _trans_commit()
    method _trans_rollback (line 151) | protected function _trans_rollback()
    method _escape_str (line 164) | protected function _escape_str($str)
    method affected_rows (line 176) | public function affected_rows()
    method insert_id (line 188) | public function insert_id()
    method _list_tables (line 203) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 225) | protected function _list_columns($table = '')
    method field_data (line 239) | public function field_data($table)
    method error (line 276) | public function error()
    method _replace (line 295) | protected function _replace($table, $keys, $values)
    method _truncate (line 313) | protected function _truncate($table)
    method _close (line 325) | protected function _close()

FILE: system/database/drivers/sqlite/sqlite_forge.php
  class CI_DB_sqlite_forge (line 47) | class CI_DB_sqlite_forge extends CI_DB_forge {
    method create_database (line 78) | public function create_database($db_name = '')
    method drop_database (line 93) | public function drop_database($db_name = '')
    method _alter_table (line 122) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 150) | protected function _process_column($field)
    method _attr_type (line 170) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 191) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/sqlite/sqlite_result.php
  class CI_DB_sqlite_result (line 49) | class CI_DB_sqlite_result extends CI_DB_result {
    method num_rows (line 56) | public function num_rows()
    method num_fields (line 70) | public function num_fields()
    method list_fields (line 84) | public function list_fields()
    method field_data (line 104) | public function field_data()
    method data_seek (line 130) | public function data_seek($n = 0)
    method _fetch_assoc (line 144) | protected function _fetch_assoc()
    method _fetch_object (line 159) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/sqlite/sqlite_utility.php
  class CI_DB_sqlite_utility (line 47) | class CI_DB_sqlite_utility extends CI_DB_utility {
    method _backup (line 55) | protected function _backup($params = array())

FILE: system/database/drivers/sqlite3/sqlite3_driver.php
  class CI_DB_sqlite3_driver (line 53) | class CI_DB_sqlite3_driver extends CI_DB {
    method db_connect (line 79) | public function db_connect($persistent = FALSE)
    method version (line 105) | public function version()
    method _execute (line 125) | protected function _execute($sql)
    method _trans_begin (line 139) | protected function _trans_begin()
    method _trans_commit (line 151) | protected function _trans_commit()
    method _trans_rollback (line 163) | protected function _trans_rollback()
    method _escape_str (line 176) | protected function _escape_str($str)
    method affected_rows (line 188) | public function affected_rows()
    method insert_id (line 200) | public function insert_id()
    method _list_tables (line 215) | protected function _list_tables($prefix_limit = FALSE)
    method list_fields (line 231) | public function list_fields($table)
    method field_data (line 261) | public function field_data($table)
    method error (line 298) | public function error()
    method _replace (line 315) | protected function _replace($table, $keys, $values)
    method _truncate (line 333) | protected function _truncate($table)
    method _close (line 345) | protected function _close()

FILE: system/database/drivers/sqlite3/sqlite3_forge.php
  class CI_DB_sqlite3_forge (line 47) | class CI_DB_sqlite3_forge extends CI_DB_forge {
    method __construct (line 71) | public function __construct(&$db)
    method create_database (line 90) | public function create_database($db_name = '')
    method drop_database (line 105) | public function drop_database($db_name = '')
    method _alter_table (line 142) | protected function _alter_table($alter_type, $table, $field)
    method _process_column (line 170) | protected function _process_column($field)
    method _attr_type (line 190) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 211) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/sqlite3/sqlite3_result.php
  class CI_DB_sqlite3_result (line 49) | class CI_DB_sqlite3_result extends CI_DB_result {
    method num_fields (line 56) | public function num_fields()
    method list_fields (line 70) | public function list_fields()
    method field_data (line 90) | public function field_data()
    method free_result (line 122) | public function free_result()
    method _fetch_assoc (line 140) | protected function _fetch_assoc()
    method _fetch_object (line 155) | protected function _fetch_object($class_name = 'stdClass')
    method data_seek (line 188) | public function data_seek($n = 0)

FILE: system/database/drivers/sqlite3/sqlite3_utility.php
  class CI_DB_sqlite3_utility (line 47) | class CI_DB_sqlite3_utility extends CI_DB_utility {
    method _backup (line 55) | protected function _backup($params = array())

FILE: system/database/drivers/sqlsrv/sqlsrv_driver.php
  class CI_DB_sqlsrv_driver (line 53) | class CI_DB_sqlsrv_driver extends CI_DB {
    method __construct (line 101) | public function __construct($params)
    method db_connect (line 122) | public function db_connect($pooling = FALSE)
    method db_select (line 164) | public function db_select($database = '')
    method _execute (line 189) | protected function _execute($sql)
    method _trans_begin (line 203) | protected function _trans_begin()
    method _trans_commit (line 215) | protected function _trans_commit()
    method _trans_rollback (line 227) | protected function _trans_rollback()
    method affected_rows (line 239) | public function affected_rows()
    method insert_id (line 253) | public function insert_id()
    method version (line 265) | public function version()
    method _list_tables (line 290) | protected function _list_tables($prefix_limit = FALSE)
    method _list_columns (line 315) | protected function _list_columns($table = '')
    method field_data (line 330) | public function field_data($table)
    method error (line 365) | public function error()
    method _update (line 404) | protected function _update($table, $values)
    method _truncate (line 424) | protected function _truncate($table)
    method _delete (line 439) | protected function _delete($table)
    method _limit (line 459) | protected function _limit($sql)
    method _insert_batch (line 520) | protected function _insert_batch($table, $keys, $values)
    method _close (line 538) | protected function _close()

FILE: system/database/drivers/sqlsrv/sqlsrv_forge.php
  class CI_DB_sqlsrv_forge (line 47) | class CI_DB_sqlsrv_forge extends CI_DB_forge {
    method _alter_table (line 85) | protected function _alter_table($alter_type, $table, $field)
    method _attr_type (line 112) | protected function _attr_type(&$attributes)
    method _attr_auto_increment (line 141) | protected function _attr_auto_increment(&$attributes, &$field)

FILE: system/database/drivers/sqlsrv/sqlsrv_result.php
  class CI_DB_sqlsrv_result (line 49) | class CI_DB_sqlsrv_result extends CI_DB_result {
    method __construct (line 66) | public function __construct(&$driver_object)
    method num_rows (line 80) | public function num_rows()
    method num_fields (line 100) | public function num_fields()
    method list_fields (line 114) | public function list_fields()
    method field_data (line 134) | public function field_data()
    method free_result (line 155) | public function free_result()
    method _fetch_assoc (line 173) | protected function _fetch_assoc()
    method _fetch_object (line 188) | protected function _fetch_object($class_name = 'stdClass')

FILE: system/database/drivers/sqlsrv/sqlsrv_utility.php
  class CI_DB_sqlsrv_utility (line 47) | class CI_DB_sqlsrv_utility extends CI_DB_utility {
    method _backup (line 71) | protected function _backup($params = array())

FILE: system/helpers/array_helper.php
  function element (line 65) | function element($item, array $array, $default = NULL)
  function random_element (line 81) | function random_element($array)
  function elements (line 102) | function elements($items, array $array, $default = NULL)

FILE: system/helpers/captcha_helper.php
  function create_captcha (line 63) | function create_captcha($data = '', $img_path = '', $img_url = '', $font...

FILE: system/helpers/cookie_helper.php
  function set_cookie (line 70) | function set_cookie($name, $value = '', $expire = '', $domain = '', $pat...
  function get_cookie (line 88) | function get_cookie($index, $xss_clean = NULL)
  function delete_cookie (line 109) | function delete_cookie($name, $domain = '', $path = '/', $prefix = '')

FILE: system/helpers/date_helper.php
  function now (line 63) | function now($timezone = NULL)
  function mdate (line 102) | function mdate($datestr = '', $time = '')
  function standard_date (line 146) | function standard_date($fmt = 'DATE_RFC822', $time = NULL)
  function timespan (line 178) | function timespan($seconds = 1, $time = '', $units = 7)
  function days_in_month (line 281) | function days_in_month($month = 0, $year = '')
  function local_to_gmt (line 325) | function local_to_gmt($time = '')
  function gmt_to_local (line 359) | function gmt_to_local($time = '', $timezone = 'UTC', $dst = FALSE)
  function mysql_to_unix (line 382) | function mysql_to_unix($time = '')
  function unix_to_human (line 416) | function unix_to_human($time = '', $seconds = FALSE, $fmt = 'us')
  function human_to_unix (line 455) | function human_to_unix($datestr = '')
  function nice_date (line 503) | function nice_date($bad_date = '', $format = FALSE)
  function timezone_menu (line 571) | function timezone_menu($default = 'UTC', $class = '', $name = 'timezones...
  function timezones (line 610) | function timezones($tz = '')
  function date_range (line 686) | function date_range($unix_start = '', $mixed = '', $is_unix = TRUE, $for...

FILE: system/helpers/directory_helper.php
  function directory_map (line 67) | function directory_map($source_dir, $directory_depth = 0, $hidden = FALSE)

FILE: system/helpers/download_helper.php
  function force_download (line 64) | function force_download($filename = '', $data = '', $set_mime = FALSE)

FILE: system/helpers/email_helper.php
  function valid_email (line 61) | function valid_email($email)
  function send_email (line 80) | function send_email($recipient, $subject, $message)

FILE: system/helpers/file_helper.php
  function read_file (line 64) | function read_file($file)
  function write_file (line 85) | function write_file($path, $data, $mode = 'wb')
  function delete_files (line 127) | function delete_files($path, $del_dir = FALSE, $htdocs = FALSE, $_level ...
  function get_filenames (line 177) | function get_filenames($source_dir, $include_path = FALSE, $_recursion =...
  function get_dir_file_info (line 227) | function get_dir_file_info($source_dir, $top_level_only = TRUE, $_recurs...
  function get_file_info (line 279) | function get_file_info($file, $returned_values = array('name', 'server_p...
  function get_mime_by_extension (line 342) | function get_mime_by_extension($filename)
  function symbolic_permissions (line 382) | function symbolic_permissions($perms)
  function octal_permissions (line 449) | function octal_permissions($perms)

FILE: system/helpers/form_helper.php
  function form_open (line 64) | function form_open($action = '', $attributes = array(), $hidden = array())
  function form_open_multipart (line 125) | function form_open_multipart($action = '', $attributes = array(), $hidde...
  function form_hidden (line 155) | function form_hidden($name, $value = '', $recursing = FALSE)
  function form_input (line 203) | function form_input($data = '', $value = '', $extra = '')
  function form_password (line 229) | function form_password($data = '', $value = '', $extra = '')
  function form_upload (line 251) | function form_upload($data = '', $value = '', $extra = '')
  function form_textarea (line 273) | function form_textarea($data = '', $value = '', $extra = '')
  function form_multiselect (line 310) | function form_multiselect($name = '', $options = array(), $selected = ar...
  function form_dropdown (line 335) | function form_dropdown($data = '', $options = array(), $selected = array...
  function form_checkbox (line 430) | function form_checkbox($data = '', $value = '', $checked = FALSE, $extra...
  function form_radio (line 474) | function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
  function form_submit (line 495) | function form_submit($data = '', $value = '', $extra = '')
  function form_reset (line 519) | function form_reset($data = '', $value = '', $extra = '')
  function form_button (line 543) | function form_button($data = '', $content = '', $extra = '')
  function form_label (line 574) | function form_label($label_text = '', $id = '', $attributes = array())
  function form_fieldset (line 610) | function form_fieldset($legend_text = '', $attributes = array())
  function form_fieldset_close (line 632) | function form_fieldset_close($extra = '')
  function form_close (line 648) | function form_close($extra = '')
  function form_prep (line 667) | function form_prep($str)
  function set_value (line 689) | function set_value($field, $default = '', $html_escape = TRUE)
  function set_select (line 717) | function set_select($field, $value = '', $default = FALSE)
  function set_checkbox (line 764) | function set_checkbox($field, $value = '', $default = FALSE)
  function set_radio (line 816) | function set_radio($field, $value = '', $default = FALSE)
  function form_error (line 868) | function form_error($field = '', $prefix = '', $suffix = '')
  function validation_errors (line 893) | function validation_errors($prefix = '', $suffix = '')
  function _parse_form_attributes (line 917) | function _parse_form_attributes($attributes, $default)
  function _attributes_to_string (line 968) | function _attributes_to_string($attributes)
  function _get_validation_object (line 1013) | function &_get_validation_object()

FILE: system/helpers/html_helper.php
  function heading (line 64) | function heading($data = '', $h = '1', $attributes = '')
  function ul (line 83) | function ul($list, $attributes = '')
  function ol (line 102) | function ol($list, $attributes = '')
  function _list (line 123) | function _list($type = 'ul', $list = array(), $attributes = '', $depth = 0)
  function img (line 178) | function img($src = '', $index_page = FALSE, $attributes = '')
  function doctype (line 232) | function doctype($type = 'xhtml1-strict')
  function link_tag (line 278) | function link_tag($href = '', $rel = 'stylesheet', $type = 'text/css', $...
  function meta (line 349) | function meta($name = '', $content = '', $type = 'name', $newline = "\n")
  function br (line 389) | function br($count = 1)
  function nbs (line 406) | function nbs($num = 1)

FILE: system/helpers/inflector_helper.php
  function singular (line 62) | function singular($str)
  function plural (line 126) | function plural($str)
  function camelize (line 183) | function camelize($str)
  function underscore (line 201) | function underscore($str)
  function humanize (line 220) | function humanize($str, $separator = '_')
  function is_countable (line 236) | function is_countable($word)

FILE: system/helpers/language_helper.php
  function lang (line 64) | function lang($line, $for = '', $attributes = array())

FILE: system/helpers/number_helper.php
  function byte_format (line 61) | function byte_format($num, $precision = 1)

FILE: system/helpers/path_helper.php
  function set_realpath (line 61) | function set_realpath($path, $check_existance = FALSE)

FILE: system/helpers/security_helper.php
  function xss_clean (line 61) | function xss_clean($str, $is_image = FALSE)
  function sanitize_filename (line 77) | function sanitize_filename($filename)
  function do_hash (line 96) | function do_hash($str, $type = 'sha1')
  function strip_image_tags (line 117) | function strip_image_tags($str)
  function encode_php_tags (line 133) | function encode_php_tags($str)

FILE: system/helpers/smiley_helper.php
  function smiley_js (line 66) | function smiley_js($alias = '', $field_id = '', $inline = TRUE)
  function get_clickable_smileys (line 149) | function get_clickable_smileys($image_url, $alias = '')
  function parse_smileys (line 198) | function parse_smileys($str = '', $image_url = '', $smileys = NULL)
  function _get_smiley_array (line 228) | function _get_smiley_array()

FILE: system/helpers/string_helper.php
  function trim_slashes (line 71) | function trim_slashes($str)
  function strip_slashes (line 89) | function strip_slashes($str)
  function strip_quotes (line 117) | function strip_quotes($str)
  function quotes_to_entities (line 135) | function quotes_to_entities($str)
  function reduce_double_slashes (line 160) | function reduce_double_slashes($str)
  function reduce_multiples (line 186) | function reduce_multiples($str, $character = ',', $trim = FALSE)
  function random_string (line 206) | function random_string($type = 'alnum', $len = 8)
  function increment_string (line 254) | function increment_string($str, $separator = '_', $first = 1)
  function alternator (line 273) | function alternator()
  function repeater (line 302) | function repeater($data, $num = 1)

FILE: system/helpers/text_helper.php
  function word_limiter (line 64) | function word_limiter($str, $limit = 100, $end_char = '&#8230;')
  function character_limiter (line 97) | function character_limiter($str, $n = 500, $end_char = '&#8230;')
  function ascii_to_entities (line 138) | function ascii_to_entities($str)
  function entities_to_ascii (line 203) | function entities_to_ascii($str, $all = TRUE)
  function word_censor (line 261) | function word_censor($str, $censored, $replacement = '')
  function highlight_code (line 319) | function highlight_code($str)
  function highlight_phrase (line 377) | function highlight_phrase($str, $phrase, $tag_open = '<mark>', $tag_clos...
  function convert_accented_characters (line 395) | function convert_accented_characters($str)
  function word_wrap (line 442) | function word_wrap($str, $charlim = 76)
  function ellipsize (line 539) | function ellipsize($str, $max_length, $position = 1, $ellipsis = '&helli...

FILE: system/helpers/typography_helper.php
  function nl2br_except_pre (line 60) | function nl2br_except_pre($str)
  function auto_typography (line 79) | function auto_typography($str, $reduce_linebreaks = FALSE)
  function entity_decode (line 100) | function entity_decode($str, $charset = NULL)

FILE: system/helpers/url_helper.php
  function site_url (line 64) | function site_url($uri = '', $protocol = NULL)
  function base_url (line 85) | function base_url($uri = '', $protocol = NULL)
  function current_url (line 103) | function current_url()
  function uri_string (line 121) | function uri_string()
  function index_page (line 138) | function index_page()
  function anchor (line 158) | function anchor($uri = '', $title = '', $attributes = '')
  function anchor_popup (line 195) | function anchor_popup($uri = '', $title = '', $attributes = FALSE)
  function mailto (line 253) | function mailto($email, $title = '', $attributes = '')
  function safe_mailto (line 280) | function safe_mailto($email, $title = '', $attributes = '')
  function auto_link (line 393) | function auto_link($str, $type = 'both', $popup = FALSE)
  function prep_url (line 444) | function prep_url($str = '')
  function url_title (line 480) | function url_title($str, $separator = '-', $lowercase = FALSE)
  function redirect (line 532) | function redirect($uri = '', $method = 'auto', $code = NULL)

FILE: system/helpers/xml_helper.php
  function xml_convert (line 61) | function xml_convert($str, $protect_all = FALSE)

FILE: system/libraries/Cache/Cache.php
  class CI_Cache (line 49) | class CI_Cache extends CI_Driver_Library {
    method __construct (line 101) | public function __construct($config = array())
    method get (line 136) | public function get($id)
    method save (line 152) | public function save($id, $data, $ttl = 60, $raw = FALSE)
    method delete (line 165) | public function delete($id)
    method increment (line 179) | public function increment($id, $offset = 1)
    method decrement (line 193) | public function decrement($id, $offset = 1)
    method clean (line 205) | public function clean()
    method cache_info (line 218) | public function cache_info($type = 'user')
    method get_metadata (line 231) | public function get_metadata($id)
    method is_supported (line 244) | public function is_supported($driver)

FILE: system/libraries/Cache/drivers/Cache_apc.php
  class CI_Cache_apc (line 49) | class CI_Cache_apc extends CI_Driver {
    method __construct (line 59) | public function __construct()
    method get (line 78) | public function get($id)
    method save (line 104) | public function save($id, $data, $ttl = 60, $raw = FALSE)
    method delete (line 123) | public function delete($id)
    method increment (line 137) | public function increment($id, $offset = 1)
    method decrement (line 151) | public function decrement($id, $offset = 1)
    method clean (line 163) | public function clean()
    method cache_info (line 176) | public function cache_info($type = NULL)
    method get_metadata (line 189) | public function get_metadata($id)
    method is_supported (line 217) | public function is_supported()

FILE: system/libraries/Cache/drivers/Cache_dummy.php
  class CI_Cache_dummy (line 49) | class CI_Cache_dummy extends CI_Driver {
    method get (line 59) | public function get($id)
    method save (line 75) | public function save($id, $data, $ttl = 60, $raw = FALSE)
    method delete (line 88) | public function delete($id)
    method increment (line 102) | public function increment($id, $offset = 1)
    method decrement (line 116) | public function decrement($id, $offset = 1)
    method clean (line 128) | public function clean()
    method cache_info (line 141) | public function cache_info($type = NULL)
    method get_metadata (line 154) | public function get_metadata($id)
    method is_supported (line 167) | public function is_supported()

FILE: system/libraries/Cache/drivers/Cache_file.php
  class CI_Cache_file (line 49) | class CI_Cache_file extends CI_Driver {
    method __construct (line 63) | public function __construct()
    method get (line 79) | public function get($id)
    method save (line 96) | public function save($id, $data, $ttl = 60, $raw = FALSE)
    method delete (line 121) | public function delete($id)
    method increment (line 135) | public function increment($id, $offset = 1)
    method decrement (line 163) | public function decrement($id, $offset = 1)
    method clean (line 189) | public function clean()
    method cache_info (line 204) | public function cache_info($type = NULL)
    method get_metadata (line 217) | public function get_metadata($id)
    method is_supported (line 253) | public function is_supported()
    method _get (line 268) | protected function _get($id)

FILE: system/libraries/Cache/drivers/Cache_memcached.php
  class CI_Cache_memcached (line 49) | class CI_Cache_memcached extends CI_Driver {
    method __construct (line 80) | public function __construct()
    method get (line 140) | public function get($id)
    method save (line 158) | public function save($id, $data, $ttl = 60, $raw = FALSE)
    method delete (line 185) | public function delete($id)
    method increment (line 199) | public function increment($id, $offset = 1)
    method decrement (line 213) | public function decrement($id, $offset = 1)
    method clean (line 225) | public function clean()
    method cache_info (line 237) | public function cache_info()
    method get_metadata (line 250) | public function get_metadata($id)
    method is_supported (line 278) | public function is_supported()
    method __destruct (line 292) | public function __destruct()

FILE: system/libraries/Cache/drivers/Cache_redis.php
  class CI_Cache_redis (line 49) | class CI_Cache_redis extends CI_Driver
    method __construct (line 92) | public function __construct()
    method get (line 152) | public function get($key)
    method save (line 175) | public function save($id, $data, $ttl = 60, $raw = FALSE)
    method delete (line 204) | public function delete($key)
    method increment (line 229) | public function increment($id, $offset = 1)
    method decrement (line 243) | public function decrement($id, $offset = 1)
    method clean (line 256) | public function clean()
    method cache_info (line 272) | public function cache_info($type = NULL)
    method get_metadata (line 285) | public function get_metadata($key)
    method is_supported (line 307) | public function is_supported()
    method __destruct (line 321) | public function __destruct()

FILE: system/libraries/Cache/drivers/Cache_wincache.php
  class CI_Cache_wincache (line 52) | class CI_Cache_wincache extends CI_Driver {
    method __construct (line 62) | public function __construct()
    method get (line 81) | public function get($id)
    method save (line 101) | public function save($id, $data, $ttl = 60, $raw = FALSE)
    method delete (line 114) | public function delete($id)
    method increment (line 128) | public function increment($id, $offset = 1)
    method decrement (line 145) | public function decrement($id, $offset = 1)
    method clean (line 160) | public function clean()
    method cache_info (line 172) | public function cache_info()
    method get_metadata (line 185) | public function get_metadata($id)
    method is_supported (line 213) | public function is_supported()

FILE: system/libraries/Calendar.php
  class CI_Calendar (line 51) | class CI_Calendar {
    method __construct (line 130) | public function __construct($config = array())
    method initialize (line 150) | public function initialize($config = array())
    method generate (line 179) | public function generate($year = '', $month = '', $data = array())
    method get_month_name (line 353) | public function get_month_name($month)
    method get_day_names (line 380) | public function get_day_names($day_type = '')
    method adjust_date (line 422) | public function adjust_date($month, $year)
    method get_total_days (line 458) | public function get_total_days($month, $year)
    method default_template (line 473) | public function default_template()
    method parse_template (line 513) | public function parse_template()

FILE: system/libraries/Cart.php
  class CI_Cart (line 50) | class CI_Cart {
    method __construct (line 99) | public function __construct($params = array())
    method insert (line 129) | public function insert($items = array())
    method _insert (line 183) | protected function _insert($items = array())
    method update (line 287) | public function update($items = array())
    method _update (line 344) | protected function _update($items = array())
    method _save_cart (line 389) | protected function _save_cart()
    method total (line 430) | public function total()
    method remove (line 445) | public function remove($rowid)
    method total_items (line 462) | public function total_items()
    method contents (line 477) | public function contents($newest_first = FALSE)
    method get_item (line 499) | public function get_item($row_id)
    method has_options (line 517) | public function has_options($row_id = '')
    method product_options (line 532) | public function product_options($row_id = '')
    method format_number (line 547) | public function format_number($n = '')
    method destroy (line 561) | public function destroy()

FILE: system/libraries/Driver.php
  class CI_Driver_Library (line 52) | class CI_Driver_Library {
    method __get (line 77) | public function __get($child)
    method load_driver (line 91) | public function load_driver($child)
  class CI_Driver (line 208) | class CI_Driver {
    method decorate (line 247) | public function decorate($parent)
    method __call (line 295) | public function __call($method, $args = array())
    method __get (line 315) | public function __get($var)
    method __set (line 334) | public function __set($var, $val)

FILE: system/libraries/Email.php
  class CI_Email (line 51) | class CI_Email {
    method __construct (line 387) | public function __construct(array $config = array())
    method initialize (line 404) | public function initialize(array $config = array())
    method clear (line 439) | public function clear($clear_attachments = FALSE)
    method from (line 473) | public function from($from, $name = '', $return_path = NULL)
    method reply_to (line 521) | public function reply_to($replyto, $name = '')
    method to (line 561) | public function to($to)
    method cc (line 589) | public function cc($cc)
    method bcc (line 617) | public function bcc($bcc, $limit = '')
    method subject (line 652) | public function subject($subject)
    method message (line 667) | public function message($body)
    method attach (line 696) | public function attach($file, $disposition = '', $newname = NULL, $mim...
    method attachment_cid (line 742) | public function attachment_cid($filename)
    method set_header (line 766) | public function set_header($header, $value)
    method _str_to_array (line 780) | protected function _str_to_array($email)
    method set_alt_message (line 800) | public function set_alt_message($str)
    method set_mailtype (line 814) | public function set_mailtype($type = 'text')
    method set_wordwrap (line 828) | public function set_wordwrap($wordwrap = TRUE)
    method set_protocol (line 842) | public function set_protocol($protocol = 'mail')
    method set_priority (line 856) | public function set_priority($n = 3)
    method set_newline (line 870) | public function set_newline($newline = "\n")
    method set_crlf (line 884) | public function set_crlf($crlf = "\n")
    method _get_message_id (line 897) | protected function _get_message_id()
    method _get_protocol (line 911) | protected function _get_protocol($return = TRUE)
    method _get_encoding (line 930) | protected function _get_encoding($return = TRUE)
    method _get_content_type (line 955) | protected function _get_content_type()
    method _set_date (line 978) | protected function _set_date()
    method _get_mime_message (line 995) | protected function _get_mime_message()
    method validate_email (line 1008) | public function validate_email($email)
    method valid_email (line 1036) | public function valid_email($email)
    method clean_email (line 1054) | public function clean_email($email)
    method _get_alt_message (line 1083) | protected function _get_alt_message()
    method word_wrap (line 1117) | public function word_wrap($str, $charlim = NULL)
    method _build_headers (line 1207) | protected function _build_headers()
    method _write_headers (line 1223) | protected function _write_headers()
    method _build_message (line 1260) | protected function _build_message()
    method _attachments_have_multipart (line 1431) | protected function _attachments_have_multipart($type)
    method _append_attachments (line 1454) | protected function _append_attachments(&$body, $boundary, $multipart =...
    method _prep_quoted_printable (line 1491) | protected function _prep_quoted_printable($str)
    method _prep_q_encoding (line 1606) | protected function _prep_q_encoding($str)
    method send (line 1681) | public function send($auto_clear = TRUE)
    method batch_bcc_send (line 1738) | public function batch_bcc_send()
    method _unwrap_specials (line 1795) | protected function _unwrap_specials()
    method _remove_nl_callback (line 1808) | protected function _remove_nl_callback($matches)
    method _spool_email (line 1825) | protected function _spool_email()
    method _send_with_mail (line 1847) | protected function _send_with_mail()
    method _send_with_sendmail (line 1873) | protected function _send_with_sendmail()
    method _send_with_smtp (line 1907) | protected function _send_with_smtp()
    method _smtp_end (line 1993) | protected function _smtp_end()
    method _smtp_connect (line 2007) | protected function _smtp_connect()
    method _send_command (line 2057) | protected function _send_command($cmd, $data = '')
    method _smtp_authenticate (line 2139) | protected function _smtp_authenticate()
    method _send_data (line 2202) | protected function _send_data($data)
    method _get_smtp_data (line 2249) | protected function _get_smtp_data()
    method _get_hostname (line 2279) | protected function _get_hostname()
    method print_debugger (line 2298) | public function print_debugger($include = array('headers', 'subject', ...
    method _set_error_message (line 2341) | protected function _set_error_message($msg, $val = '')
    method _mime_types (line 2364) | protected function _mime_types($ext = '')
    method __destruct (line 2387) | public function __destruct()

FILE: system/libraries/Encrypt.php
  class CI_Encrypt (line 51) | class CI_Encrypt {
    method __construct (line 93) | public function __construct()
    method get_key (line 114) | public function get_key($key = '')
    method set_key (line 142) | public function set_key($key = '')
    method encode (line 165) | public function encode($string, $key = '')
    method decode (line 181) | public function decode($string, $key = '')
    method encode_from_legacy (line 208) | public function encode_from_legacy($string, $legacy_mode = MCRYPT_MODE...
    method _xor_decode (line 250) | protected function _xor_decode($string, $key)
    method _xor_merge (line 274) | protected function _xor_merge($string, $key)
    method mcrypt_encode (line 295) | public function mcrypt_encode($data, $key)
    method mcrypt_decode (line 311) | public function mcrypt_decode($data, $key)
    method _add_cipher_noise (line 337) | protected function _add_cipher_noise($data, $key)
    method _remove_cipher_noise (line 367) | protected function _remove_cipher_noise($data, $key)
    method set_cipher (line 400) | public function set_cipher($cipher)
    method set_mode (line 414) | public function set_mode($mode)
    method _get_cipher (line 427) | protected function _get_cipher()
    method _get_mode (line 444) | protected function _get_mode()
    method set_hash (line 462) | public function set_hash($type = 'sha1')
    method hash (line 475) | public function hash($str)

FILE: system/libraries/Encryption.php
  class CI_Encryption (line 51) | class CI_Encryption {
    method __construct (line 152) | public function __construct(array $params = array())
    method initialize (line 185) | public function initialize(array $params)
    method _mcrypt_initialize (line 229) | protected function _mcrypt_initialize($params)
    method _openssl_initialize (line 288) | protected function _openssl_initialize($params)
    method create_key (line 338) | public function create_key($length)
    method encrypt (line 373) | public function encrypt($data, array $params = NULL)
    method _mcrypt_encrypt (line 407) | protected function _mcrypt_encrypt($data, $params)
    method _openssl_encrypt (line 472) | protected function _openssl_encrypt($data, $params)
    method decrypt (line 508) | public function decrypt($data, array $params = NULL)
    method _mcrypt_decrypt (line 566) | protected function _mcrypt_decrypt($data, $params)
    method _openssl_decrypt (line 628) | protected function _openssl_decrypt($data, $params)
    method _get_params (line 659) | protected function _get_params($params)
    method _mcrypt_get_handle (line 744) | protected function _mcrypt_get_handle($cipher, $mode)
    method _openssl_get_handle (line 758) | protected function _openssl_get_handle($cipher, $mode)
    method _cipher_alias (line 776) | protected function _cipher_alias(&$cipher)
    method hkdf (line 854) | public function hkdf($key, $digest = 'sha512', $salt = NULL, $length =...
    method __get (line 891) | public function __get($key)
    method strlen (line 914) | protected static function strlen($str)
    method substr (line 931) | protected static function substr($str, $start, $length = NULL)

FILE: system/libraries/Form_validation.php
  class CI_Form_validation (line 49) | class CI_Form_validation {
    method __construct (line 127) | public function __construct($rules = array())
    method set_rules (line 167) | public function set_rules($field, $label = '', $rules = array(), $erro...
    method set_data (line 267) | public function set_data(array $data)
    method set_message (line 289) | public function set_message($lang, $val = '')
    method set_error_delimiters (line 311) | public function set_error_delimiters($prefix = '<p>', $suffix = '</p>')
    method error (line 330) | public function error($field, $prefix = '', $suffix = '')
    method error_array (line 359) | public function error_array()
    method error_string (line 375) | public function error_string($prefix = '', $suffix = '')
    method run (line 416) | public function run($group = '')
    method _prepare_rules (line 509) | protected function _prepare_rules($rules)
    method _reduce_array (line 561) | protected function _reduce_array($array, $keys, $i = 0)
    method _reset_post_array (line 579) | protected function _reset_post_array()
    method _execute (line 624) | protected function _execute($row, $rules, $postdata = NULL, $cycles = 0)
    method _get_error_message (line 832) | protected function _get_error_message($rule, $field)
    method _translate_fieldname (line 865) | protected function _translate_fieldname($fieldname)
    method _build_error_msg (line 887) | protected function _build_error_msg($line, $field = '', $param = '')
    method has_rule (line 908) | public function has_rule($field)
    method set_value (line 925) | public function set_value($field = '', $default = '')
    method set_select (line 955) | public function set_select($field = '', $value = '', $default = FALSE)
    method set_radio (line 998) | public function set_radio($field = '', $value = '', $default = FALSE)
    method set_checkbox (line 1041) | public function set_checkbox($field = '', $value = '', $default = FALSE)
    method required (line 1055) | public function required($str)
    method regex_match (line 1071) | public function regex_match($str, $regex)
    method matches (line 1085) | public function matches($str, $field)
    method differs (line 1101) | public function differs($str, $field)
    method is_unique (line 1118) | public function is_unique($str, $field)
    method min_length (line 1135) | public function min_length($str, $val)
    method max_length (line 1154) | public function max_length($str, $val)
    method exact_length (line 1173) | public function exact_length($str, $val)
    method valid_url (line 1191) | public function valid_url($str)
    method valid_email (line 1241) | public function valid_email($str)
    method valid_emails (line 1259) | public function valid_emails($str)
    method valid_ip (line 1286) | public function valid_ip($ip, $which = '')
    method alpha (line 1299) | public function alpha($str)
    method alpha_numeric (line 1312) | public function alpha_numeric($str)
    method alpha_numeric_spaces (line 1325) | public function alpha_numeric_spaces($str)
    method alpha_dash (line 1338) | public function alpha_dash($str)
    method numeric (line 1351) | public function numeric($str)
    method integer (line 1365) | public function integer($str)
    method decimal (line 1378) | public function decimal($str)
    method greater_than (line 1392) | public function greater_than($str, $min)
    method greater_than_equal_to (line 1406) | public function greater_than_equal_to($str, $min)
    method less_than (line 1420) | public function less_than($str, $max)
    method less_than_equal_to (line 1434) | public function less_than_equal_to($str, $max)
    method in_list (line 1448) | public function in_list($value, $list)
    method is_natural (line 1461) | public function is_natural($str)
    method is_natural_no_zero (line 1474) | public function is_natural_no_zero($str)
    method valid_base64 (line 1490) | public function valid_base64($str)
    method prep_for_form (line 1507) | public function prep_for_form($data)
    method prep_url (line 1535) | public function prep_url($str = '')
    method strip_image_tags (line 1558) | public function strip_image_tags($str)
    method encode_php_tags (line 1571) | public function encode_php_tags($str)
    method reset_validation (line 1586) | public function reset_validation()

FILE: system/libraries/Ftp.php
  class CI_FTP (line 49) | class CI_FTP {
    method __construct (line 112) | public function __construct($config = array())
    method initialize (line 126) | public function initialize($config = array())
    method connect (line 148) | public function connect($config = array())
    method _login (line 191) | protected function _login()
    method _is_conn (line 203) | protected function _is_conn()
    method changedir (line 233) | public function changedir($path, $suppress_debug = FALSE)
    method mkdir (line 264) | public function mkdir($path, $permissions = NULL)
    method upload (line 303) | public function upload($locpath, $rempath, $mode = 'auto', $permission...
    method download (line 357) | public function download($rempath, $locpath, $mode = 'auto')
    method rename (line 399) | public function rename($old_file, $new_file, $move = FALSE)
    method move (line 430) | public function move($old_file, $new_file)
    method delete_file (line 443) | public function delete_file($filepath)
    method delete_dir (line 474) | public function delete_dir($filepath)
    method chmod (line 520) | public function chmod($path, $perm)
    method list_files (line 548) | public function list_files($path = '.')
    method mirror (line 569) | public function mirror($locpath, $rempath)
    method _getext (line 616) | protected function _getext($filename)
    method _settype (line 631) | protected function _settype($ext)
    method close (line 645) | public function close()
    method _error (line 660) | protected function _error($line)

FILE: system/libraries/Image_lib.php
  class CI_Image_lib (line 49) | class CI_Image_lib {
    method __construct (line 388) | public function __construct($props = array())
    method clear (line 407) | public function clear()
    method initialize (line 450) | public function initialize($props = array())
    method resize (line 672) | public function resize()
    method crop (line 688) | public function crop()
    method rotate (line 704) | public function rotate()
    method image_process_gd (line 749) | public function image_process_gd($action = 'resize')
    method image_process_imagemagick (line 850) | public function image_process_imagemagick($action = 'resize')
    method image_process_netpbm (line 920) | public function image_process_netpbm($action = 'resize')
    method image_rotate_gd (line 1005) | public function image_rotate_gd()
    method image_mirror_gd (line 1051) | public function image_mirror_gd()
    method watermark (line 1130) | public function watermark()
    method overlay_watermark (line 1142) | public function overlay_watermark()
    method text_watermark (line 1256) | public function text_watermark()
    method image_create_gd (line 1431) | public function image_create_gd($path = '', $image_type = '')
    method image_save_gd (line 1486) | public function image_save_gd($resource)
    method image_display_gd (line 1546) | public function image_display_gd($resource)
    method image_reproportion (line 1580) | public function image_reproportion()
    method get_image_properties (line 1632) | public function get_image_properties($path = '', $return = FALSE)
    method size_calculator (line 1691) | public function size_calculator($vals)
    method explode_name (line 1740) | public function explode_name($source_image)
    method gd_loaded (line 1755) | public function gd_loaded()
    method gd_version (line 1775) | public function gd_version()
    method set_error (line 1794) | public function set_error($msg)
    method display_errors (line 1825) | public function display_errors($open = '<p>', $close = '</p>')

FILE: system/libraries/Javascript.php
  class CI_Javascript (line 50) | class CI_Javascript {
    method __construct (line 67) | public function __construct($params = array())
    method blur (line 104) | public function blur($element = 'this', $js = '')
    method change (line 120) | public function change($element = 'this', $js = '')
    method click (line 137) | public function click($element = 'this', $js = '', $ret_false = TRUE)
    method dblclick (line 153) | public function dblclick($element = 'this', $js = '')
    method error (line 169) | public function error($element = 'this', $js = '')
    method focus (line 185) | public function focus($element = 'this', $js = '')
    method hover (line 202) | public function hover($element = 'this', $over = '', $out = '')
    method keydown (line 218) | public function keydown($element = 'this', $js = '')
    method keyup (line 234) | public function keyup($element = 'this', $js = '')
    method load (line 250) | public function load($element = 'this', $js = '')
    method mousedown (line 266) | public function mousedown($element = 'this', $js = '')
    method mouseout (line 282) | public function mouseout($element = 'this', $js = '')
    method mouseover (line 298) | public function mouseover($element = 'this', $js = '')
    method mouseup (line 314) | public function mouseup($element = 'this', $js = '')
    method output (line 329) | public function output($js)
    method ready (line 344) | public function ready($js)
    method resize (line 360) | public function resize($element = 'this', $js = '')
    method scroll (line 376) | public function scroll($element = 'this', $js = '')
    method unload (line 392) | public function unload($element = 'this', $js = '')
    method addClass (line 410) | public function addClass($element = 'this', $class = '')
    method animate (line 428) | public function animate($element = 'this', $params = array(), $speed =...
    method fadeIn (line 445) | public function fadeIn($element = 'this', $speed = '', $callback = '')
    method fadeOut (line 462) | public function fadeOut($element = 'this', $speed = '', $callback = '')
    method slideUp (line 478) | public function slideUp($element = 'this', $speed = '', $callback = '')
    method removeClass (line 495) | public function removeClass($element = 'this', $class = '')
    method slideDown (line 512) | public function slideDown($element = 'this', $speed = '', $callback = '')
    method slideToggle (line 529) | public function slideToggle($element = 'this', $speed = '', $callback ...
    method hide (line 547) | public function hide($element = 'this', $speed = '', $callback = '')
    method toggle (line 562) | public function toggle($element = 'this')
    method toggleClass (line 579) | public function toggleClass($element = 'this', $class = '')
    method show (line 596) | public function show($element = 'this', $speed = '', $callback = '')
    method compile (line 612) | public function compile($view_var = 'script_foot', $script_tags = TRUE)
    method clear_compile (line 626) | public function clear_compile()
    method external (line 642) | public function external($external_file = '', $relative = FALSE)
    method inline (line 680) | public function inline($script, $cdata = TRUE)
    method _open_script (line 697) | protected function _open_script($src = '')
    method _close_script (line 713) | protected function _close_script($extra = "\n")
    method update (line 732) | public function update($element = 'this', $speed = '', $callback = '')
    method generate_json (line 748) | public function generate_json($result = NULL, $match_array_type = FALSE)
    method _is_associative_array (line 812) | protected function _is_associative_array($arr)
    method _prep_args (line 836) | protected function _prep_args($result, $is_key = FALSE)

FILE: system/libraries/Javascript/Jquery.php
  class CI_Jquery (line 49) | class CI_Jquery extends CI_Javascript {
    method __construct (line 108) | public function __construct($params)
    method _blur (line 134) | protected function _blur($element = 'this', $js = '')
    method _change (line 150) | protected function _change($element = 'this', $js = '')
    method _click (line 167) | protected function _click($element = 'this', $js = '', $ret_false = TRUE)
    method _dblclick (line 190) | protected function _dblclick($element = 'this', $js = '')
    method _error (line 206) | protected function _error($element = 'this', $js = '')
    method _focus (line 222) | protected function _focus($element = 'this', $js = '')
    method _hover (line 239) | protected function _hover($element = 'this', $over = '', $out = '')
    method _keydown (line 259) | protected function _keydown($element = 'this', $js = '')
    method _keyup (line 275) | protected function _keyup($element = 'this', $js = '')
    method _load (line 291) | protected function _load($element = 'this', $js = '')
    method _mousedown (line 307) | protected function _mousedown($element = 'this', $js = '')
    method _mouseout (line 323) | protected function _mouseout($element = 'this', $js = '')
    method _mouseover (line 339) | protected function _mouseover($element = 'this', $js = '')
    method _mouseup (line 355) | protected function _mouseup($element = 'this', $js = '')
    method _output (line 370) | protected function _output($array_js = array())
    method _resize (line 394) | protected function _resize($element = 'this', $js = '')
    method _scroll (line 410) | protected function _scroll($element = 'this', $js = '')
    method _unload (line 426) | protected function _unload($element = 'this', $js = '')
    method _addClass (line 444) | protected function _addClass($element = 'this', $class = '')
    method _animate (line 463) | protected function _animate($element = 'this', $params = array(), $spe...
    method _fadeIn (line 502) | protected function _fadeIn($element = 'this', $speed = '', $callback =...
    method _fadeOut (line 527) | protected function _fadeOut($element = 'this', $speed = '', $callback ...
    method _hide (line 552) | protected function _hide($element = 'this', $speed = '', $callback = '')
    method _removeClass (line 576) | protected function _removeClass($element = 'this', $class = '')
    method _slideUp (line 594) | protected function _slideUp($element = 'this', $speed = '', $callback ...
    method _slideDown (line 619) | protected function _slideDown($element = 'this', $speed = '', $callbac...
    method _slideToggle (line 644) | protected function _slideToggle($element = 'this', $speed = '', $callb...
    method _toggle (line 667) | protected function _toggle($element = 'this')
    method _toggleClass (line 684) | protected function _toggleClass($element = 'this', $class = '')
    method _show (line 702) | protected function _show($element = 'this', $speed = '', $callback = '')
    method _updater (line 729) | protected function _updater($container = 'this', $controller = '', $op...
    method _zebraTables (line 770) | protected function _zebraTables($class = '', $odd = 'odd', $hover = '')
    method corner (line 797) | public function corner($element = '', $corner_style = '')
    method modal (line 821) | public function modal($src, $relative = FALSE)
    method effect (line 837) | public function effect($src, $relative = FALSE)
    method plugin (line 853) | public function plugin($src, $relative = FALSE)
    method ui (line 869) | public function ui($src, $relative = FALSE)
    method sortable (line 885) | public function sortable($element, $options = array())
    method tablesorter (line 913) | public function tablesorter($table = '', $options = '')
    method _add_event (line 932) | protected function _add_event($element, $js, $event)
    method _compile (line 956) | protected function _compile($view_var = 'script_foot', $script_tags = ...
    method _clear_compile (line 987) | protected function _clear_compile()
    method _document_ready (line 1002) | protected function _document_ready($js)
    method script (line 1023) | public function script($library_src = '', $relative = FALSE)
    method _prep_element (line 1042) | protected function _prep_element($element)
    method _validate_speed (line 1062) | protected function _validate_speed($speed)

FILE: system/libraries/Migration.php
  class CI_Migration (line 52) | class CI_Migration {
    method __construct (line 116) | public function __construct($config = array())
    method version (line 196) | public function version($target_version)
    method latest (line 333) | public function latest()
    method current (line 357) | public function current()
    method error_string (line 369) | public function error_string()
    method find_migrations (line 381) | public function find_migrations()
    method _get_migration_number (line 418) | protected function _get_migration_number($migration)
    method _get_migration_name (line 432) | protected function _get_migration_name($migration)
    method _get_version (line 446) | protected function _get_version()
    method _update_version (line 460) | protected function _update_version($migration)
    method __get (line 475) | public function __get($var)

FILE: system/libraries/Pagination.php
  class CI_Pagination (line 49) | class CI_Pagination {
    method __construct (line 330) | public function __construct($params = array())
    method initialize (line 354) | public function initialize(array $params = array())
    method create_links (line 399) | public function create_links()
    method _parse_attributes (line 666) | protected function _parse_attributes($attributes)
    method _attr_rel (line 690) | protected function _attr_rel($type)

FILE: system/libraries/Parser.php
  class CI_Parser (line 49) | class CI_Parser {
    method __construct (line 79) | public function __construct()
    method parse (line 98) | public function parse($template, $data, $return = FALSE)
    method parse_string (line 118) | public function parse_string($template, $data, $return = FALSE)
    method _parse (line 136) | protected function _parse($template, $data, $return = FALSE)
    method set_delimiters (line 174) | public function set_delimiters($l = '{', $r = '}')
    method _parse_single (line 190) | protected function _parse_single($key, $val, $string)
    method _parse_pair (line 207) | protected function _parse_pair($variable, $data, $string)

FILE: system/libraries/Profiler.php
  function set_sections (line 126) | function set_sections($config)

FILE: system/libraries/Session/Session.php
  class CI_Session (line 49) | class CI_Session {
    method __construct (line 69) | public function __construct(array $params = array())
    method _ci_load_classes (line 189) | protected function _ci_load_classes($driver)
    method _configure (line 261) | protected function _configure(&$params)
    method _ci_init_vars (line 332) | protected function _ci_init_vars()
    method mark_as_flash (line 369) | public function mark_as_flash($key)
    method get_flash_keys (line 406) | public function get_flash_keys()
    method unmark_flash (line 430) | public function unmark_flash($key)
    method mark_as_temp (line 462) | public function mark_as_temp($key, $ttl = 300)
    method get_temp_keys (line 514) | public function get_temp_keys()
    method unmark_temp (line 538) | public function unmark_temp($key)
    method __get (line 569) | public function __get($key)
    method __isset (line 593) | public function __isset($key)
    method __set (line 612) | public function __set($key, $value)
    method sess_destroy (line 626) | public function sess_destroy()
    method sess_regenerate (line 641) | public function sess_regenerate($destroy = FALSE)
    method get_userdata (line 656) | public function &get_userdata()
    method userdata (line 671) | public function userdata($key = NULL)
    method set_userdata (line 711) | public function set_userdata($data, $value = NULL)
    method unset_userdata (line 736) | public function unset_userdata($key)
    method all_userdata (line 760) | public function all_userdata()
    method has_userdata (line 775) | public function has_userdata($key)
    method flashdata (line 790) | public function flashdata($key = NULL)
    method set_flashdata (line 823) | public function set_flashdata($data, $value = NULL)
    method keep_flashdata (line 839) | public function keep_flashdata($key)
    method tempdata (line 854) | public function tempdata($key = NULL)
    method set_tempdata (line 888) | public function set_tempdata($data, $value = NULL, $ttl = 300)
    method unset_tempdata (line 904) | public function unset_tempdata($key)

FILE: system/libraries/Session/SessionHandlerInterface.php
  type SessionHandlerInterface (line 51) | interface SessionHandlerInterface {
    method open (line 53) | public function open($save_path, $name);
    method close (line 54) | public function close();
    method read (line 55) | public function read($session_id);
    method write (line 56) | public function write($session_id, $session_data);
    method destroy (line 57) | public function destroy($session_id);
    method gc (line 58) | public function gc($maxlifetime);

FILE: system/libraries/Session/Session_driver.php
  class CI_Session_driver (line 49) | abstract class CI_Session_driver implements SessionHandlerInterface {
    method __construct (line 97) | public function __construct(&$params)
    method _cookie_destroy (line 123) | protected function _cookie_destroy()
    method _get_lock (line 148) | protected function _get_lock($session_id)
    method _release_lock (line 161) | protected function _release_lock()
    method _fail (line 186) | protected function _fail()

FILE: system/libraries/Session/drivers/Session_database_driver.php
  class CI_Session_database_driver (line 49) | class CI_Session_database_driver extends CI_Session_driver implements Se...
    method __construct (line 80) | public function __construct(&$params)
    method open (line 129) | public function open($save_path, $name)
    method read (line 149) | public function read($session_id)
    method write (line 206) | public function write($session_id, $session_data)
    method close (line 278) | public function close()
    method destroy (line 295) | public function destroy($session_id)
    method gc (line 333) | public function gc($maxlifetime)
    method _get_lock (line 353) | protected function _get_lock($session_id)
    method _release_lock (line 390) | protected function _release_lock()

FILE: system/libraries/Session/drivers/Session_files_driver.php
  class CI_Session_files_driver (line 49) | class CI_Session_files_driver extends CI_Session_driver implements Sessi...
    method __construct (line 87) | public function __construct(&$params)
    method open (line 114) | public function open($save_path, $name)
    method read (line 146) | public function read($session_id)
    method write (line 224) | public function write($session_id, $session_data)
    method close (line 281) | public function close()
    method destroy (line 304) | public function destroy($session_id)
    method gc (line 345) | public function gc($maxlifetime)

FILE: system/libraries/Session/drivers/Session_memcached_driver.php
  class CI_Session_memcached_driver (line 49) | class CI_Session_memcached_driver extends CI_Session_driver implements S...
    method __construct (line 80) | public function __construct(&$params)
    method open (line 106) | public function open($save_path, $name)
    method read (line 161) | public function read($session_id)
    method write (line 187) | public function write($session_id, $session_data)
    method close (line 245) | public function close()
    method destroy (line 272) | public function destroy($session_id)
    method gc (line 294) | public function gc($maxlifetime)
    method _get_lock (line 310) | protected function _get_lock($session_id)
    method _release_lock (line 366) | protected function _release_lock()

FILE: system/libraries/Session/drivers/Session_redis_driver.php
  class CI_Session_redis_driver (line 49) | class CI_Session_redis_driver extends CI_Session_driver implements Sessi...
    method __construct (line 87) | public function __construct(&$params)
    method open (line 130) | public function open($save_path, $name)
    method read (line 169) | public function read($session_id)
    method write (line 200) | public function write($session_id, $session_data)
    method close (line 250) | public function close()
    method destroy (line 286) | public function destroy($session_id)
    method gc (line 312) | public function gc($maxlifetime)
    method _get_lock (line 328) | protected function _get_lock($session_id)
    method _release_lock (line 383) | protected function _release_lock()

FILE: system/libraries/Table.php
  class CI_Table (line 51) | class CI_Table {
    method __construct (line 115) | public function __construct($config = array())
    method set_template (line 134) | public function set_template($template)
    method set_heading (line 155) | public function set_heading($args = array())
    method make_columns (line 173) | public function make_columns($array = array(), $col_limit = 0)
    method set_empty (line 219) | public function set_empty($value)
    method add_row (line 235) | public function add_row($args = array())
    method _prep_args (line 251) | protected function _prep_args($args)
    method set_caption (line 277) | public function set_caption($caption)
    method generate (line 290) | public function generate($table_data = NULL)
    method clear (line 424) | public function clear()
    method _set_from_db_result (line 440) | protected function _set_from_db_result($object)
    method _set_from_array (line 462) | protected function _set_from_array($data)
    method _compile_template (line 482) | protected function _compile_template()
    method _default_template (line 507) | protected function _default_template()

FILE: system/libraries/Trackback.php
  class CI_Trackback (line 51) | class CI_Trackback {
    method __construct (line 104) | public function __construct()
    method send (line 117) | public function send($tb_data)
    method receive (line 191) | public function receive()
    method send_error (line 240) | public function send_error($message = 'Incomplete Information')
    method send_success (line 255) | public function send_success()
    method data (line 268) | public function data($item)
    method process (line 285) | public function process($url, $data)
    method extract_urls (line 347) | public function extract_urls($urls)
    method validate_url (line 369) | public function validate_url(&$url)
    method get_id (line 387) | public function get_id($url)
    method convert_xml (line 428) | public function convert_xml($str)
    method limit_characters (line 453) | public function limit_characters($str, $n = 500, $end_char = '&#8230;')
    method convert_ascii (line 489) | public function convert_ascii($str)
    method set_error (line 536) | public function set_error($msg)
    method display_errors (line 551) | public function display_errors($open = '<p>', $close = '</p>')

FILE: system/libraries/Typography.php
  class CI_Typography (line 49) | class CI_Typography {
    method auto_typography (line 108) | public function auto_typography($str, $reduce_linebreaks = FALSE)
    method format_characters (line 293) | public function format_characters($str)
    method _format_newlines (line 356) | protected function _format_newlines($str)
    method _protect_characters (line 396) | protected function _protect_characters($match)
    method nl2br_except_pre (line 409) | public function nl2br_except_pre($str)

FILE: system/libraries/Unit_test.php
  class CI_Unit_test (line 51) | class CI_Unit_test {
    method __construct (line 112) | public function __construct()
    method set_test_items (line 127) | public function set_test_items($items)
    method run (line 148) | public function run($test, $expected = TRUE, $test_name = 'undefined',...
    method report (line 194) | public function report($result = array())
    method use_strict (line 244) | public function use_strict($state = TRUE)
    method active (line 259) | public function active($state = TRUE)
    method result (line 274) | public function result($results = array())
    method set_template (line 321) | public function set_template($template)
    method _backtrace (line 335) | protected function _backtrace()
    method _default_template (line 351) | protected function _default_template()
    method _parse_template (line 368) | protected function _parse_template()
  function is_true (line 393) | function is_true($test)
  function is_false (line 404) | function is_false($test)

FILE: system/libraries/Upload.php
  class CI_Upload (line 49) | class CI_Upload {
    method __construct (line 292) | public function __construct($config = array())
    method initialize (line 311) | public function initialize(array $config = array(), $reset = TRUE)
    method do_upload (line 374) | public function do_upload($field = 'userfile')
    method data (line 597) | public function data($index = NULL)
    method set_upload_path (line 632) | public function set_upload_path($path)
    method set_filename (line 652) | public function set_filename($path, $filename)
    method set_max_filesize (line 695) | public function set_max_filesize($n)
    method set_max_size (line 712) | protected function set_max_size($n)
    method set_max_filename (line 725) | public function set_max_filename($n)
    method set_max_width (line 739) | public function set_max_width($n)
    method set_max_height (line 753) | public function set_max_height($n)
    method set_min_width (line 767) | public function set_min_width($n)
    method set_min_height (line 781) | public function set_min_height($n)
    method set_allowed_types (line 795) | public function set_allowed_types($types)
    method set_image_properties (line 813) | public function set_image_properties($path = '')
    method set_xss_clean (line 842) | public function set_xss_clean($flag = FALSE)
    method is_image (line 855) | public function is_image()
    method is_allowed_filetype (line 885) | public function is_allowed_filetype($ignore_mime = FALSE)
    method is_allowed_filesize (line 933) | public function is_allowed_filesize()
    method is_allowed_dimensions (line 945) | public function is_allowed_dimensions()
    method validate_upload_path (line 989) | public function validate_upload_path()
    method get_extension (line 1026) | public function get_extension($filename)
    method limit_filename_length (line 1048) | public function limit_filename_length($filename, $length)
    method do_xss_clean (line 1077) | public function do_xss_clean()
    method set_error (line 1140) | public function set_error($msg, $log_level = 'error')
    method display_errors (line 1164) | public function display_errors($open = '<p>', $close = '</p>')
    method _prep_filename (line 1182) | protected function _prep_filename($filename)
    method _file_mime_type (line 1205) | protected function _file_mime_type($file)

FILE: system/libraries/User_agent.php
  class CI_User_agent (line 51) | class CI_User_agent {
    method __construct (line 174) | public function __construct()
    method _load_agent_file (line 194) | protected function _load_agent_file()
    method _compile_data (line 252) | protected function _compile_data()
    method _set_platform (line 272) | protected function _set_platform()
    method _set_browser (line 297) | protected function _set_browser()
    method _set_robot (line 324) | protected function _set_robot()
    method _set_mobile (line 350) | protected function _set_mobile()
    method _set_languages (line 375) | protected function _set_languages()
    method _set_charsets (line 395) | protected function _set_charsets()
    method is_browser (line 416) | public function is_browser($key = NULL)
    method is_robot (line 441) | public function is_robot($key = NULL)
    method is_mobile (line 466) | public function is_mobile($key = NULL)
    method is_referral (line 490) | public function is_referral()
    method agent_string (line 517) | public function agent_string()
    method platform (line 529) | public function platform()
    method browser (line 541) | public function browser()
    method version (line 553) | public function version()
    method robot (line 565) | public function robot()
    method mobile (line 576) | public function mobile()
    method referrer (line 588) | public function referrer()
    method languages (line 600) | public function languages()
    method charsets (line 617) | public function charsets()
    method accept_lang (line 635) | public function accept_lang($lang = 'en')
    method accept_charset (line 648) | public function accept_charset($charset = 'utf-8')
    method parse (line 661) | public function parse($string)

FILE: system/libraries/Xmlrpc.php
  class CI_Xmlrpc (line 56) | class CI_Xmlrpc {
    method __construct (line 264) | public function __construct($config = array())
    method initialize (line 328) | public function initialize($config = array())
    method server (line 353) | public function server($url, $port = 80, $proxy = FALSE, $proxy_port =...
    method timeout (line 385) | public function timeout($seconds = 5)
    method method (line 401) | public function method($function)
    method request (line 414) | public function request($incoming)
    method set_debug (line 438) | public function set_debug($flag = TRUE)
    method values_parsing (line 451) | public function values_parsing($value)
    method send_request (line 487) | public function send_request()
    method display_error (line 509) | public function display_error()
    method display_response (line 521) | public function display_response()
    method send_error_message (line 535) | public function send_error_message($number, $message)
    method send_response (line 548) | public function send_response($response)
  class XML_RPC_Client (line 564) | class XML_RPC_Client extends CI_Xmlrpc
    method __construct (line 656) | public function __construct($path, $server, $port = 80, $proxy = FALSE...
    method send (line 683) | public function send($msg)
    method sendPayload (line 702) | public function sendPayload($msg)
  class XML_RPC_Response (line 786) | class XML_RPC_Response
    method __construct (line 834) | public function __construct($val, $code = 0, $fstr = '')
    method faultCode (line 863) | public function faultCode()
    method faultString (line 875) | public function faultString()
    method value (line 887) | public function value()
    method prepare_response (line 899) | public function prepare_response()
    method decode (line 929) | public function decode($array = NULL)
    method xmlrpc_decoder (line 972) | public function xmlrpc_decoder($xmlrpc_val)
    method iso8601_decode (line 1014) | public function iso8601_decode($time, $utc = FALSE)
  class XML_RPC_Message (line 1035) | class XML_RPC_Message extends CI_Xmlrpc
    method __construct (line 1075) | public function __construct($method, $pars = FALSE)
    method createPayload (line 1097) | public function createPayload()
    method parseResponse (line 1121) | public function parseResponse($fp)
    method open_tag (line 1281) | public function open_tag($the_parser, $name)
    method closing_tag (line 1382) | public function closing_tag($the_parser, $name)
    method character_data (line 1516) | public function character_data($the_parser, $data)
    method addParam (line 1547) | public function addParam($par)
    method output_parameters (line 1560) | public function output_parameters(array $array = array())
    method decode_message (line 1610) | public function decode_message($param)
  class XML_RPC_Values (line 1654) | class XML_RPC_Values extends CI_Xmlrpc
    method __construct (line 1679) | public function __construct($val = -1, $type = '')
    method addScalar (line 1711) | public function addScalar($val, $type = 'string')
    method addArray (line 1757) | public function addArray($vals)
    method addStruct (line 1778) | public function addStruct($vals)
    method kindOf (line 1797) | public function kindOf()
    method serializedata (line 1817) | public function serializedata($typ, $val)
    method serialize_class (line 1873) | public function serialize_class()
    method serializeval (line 1886) | public function serializeval($o)
    method scalarval (line 1902) | public function scalarval()
    method iso8601_encode (line 1918) | public function iso8601_encode($time, $utc = FALSE)

FILE: system/libraries/Xmlrpcs.php
  class CI_Xmlrpcs (line 61) | class CI_Xmlrpcs extends CI_Xmlrpc {
    method __construct (line 97) | public function __construct($config = array())
    method initialize (line 118) | public function initialize($config = array())
    method set_system_methods (line 148) | public function set_system_methods()
    method serve (line 177) | public function serve()
    method add_to_map (line 198) | public function add_to_map($methodname, $function, $sig, $doc)
    method parseRequest (line 215) | public function parseRequest($data = '')
    method _execute (line 316) | protected function _execute($m)
    method listMethods (line 424) | public function listMethods($m)
    method methodSignature (line 451) | public function methodSignature($m)
    method methodHelp (line 491) | public function methodHelp($m)
    method multicall (line 516) | public function multicall($m)
    method multicall_error (line 557) | public function multicall_error($err)
    method do_multicall (line 576) | public function do_multicall($call)

FILE: system/libraries/Zip.php
  class CI_Zip (line 55) | class CI_Zip {
    method __construct (line 113) | public function __construct()
    method add_dir (line 129) | public function add_dir($directory)
    method _get_mod_time (line 153) | protected function _get_mod_time($dir)
    method _add_dir (line 174) | protected function _add_dir($dir, $file_mtime, $file_mdate)
    method add_data (line 226) | public function add_data($filepath, $data = NULL)
    method _add_data (line 254) | protected function _add_data($filepath, $data, $file_mtime, $file_mdate)
    method read_file (line 305) | public function read_file($path, $archive_filepath = FALSE)
    method read_dir (line 344) | public function read_dir($path, $preserve_filepath = TRUE, $root_path ...
    method get_zip (line 392) | public function get_zip()
    method archive (line 419) | public function archive($filepath)
    method download (line 450) | public function download($filename = 'backup.zip')
    method clear_data (line 474) | public function clear_data()
Condensed preview — 258 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,966K chars).
[
  {
    "path": ".gitignore",
    "chars": 100,
    "preview": "sftp-config.json\napplication/logs/*.log\napplication/business/*.json\nvendor/\nweapp-sdk/\ncomposer.lock"
  },
  {
    "path": ".htaccess",
    "chars": 158,
    "preview": "RewriteEngine on\nRewriteCond $1 !^(index\\.php)\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nR"
  },
  {
    "path": "LICENSE",
    "chars": 1084,
    "preview": "LICENSE - \"MIT License\"\n\nCopyright (c) 2016 by Tencent Cloud\n\nPermission is hereby granted, free of charge, to any perso"
  },
  {
    "path": "README.md",
    "chars": 2140,
    "preview": "# Wafer 服务端 Demo - PHP\n\n本仓库是 [Wafer](https://github.com/tencentyun/wafer) 组成部分,提供 PHP 版本业务服务器示例。示例需要和[微信小程序客户端示例](https:"
  },
  {
    "path": "application/.htaccess",
    "chars": 123,
    "preview": "<IfModule authz_core_module>\n    Require all denied\n</IfModule>\n<IfModule !authz_core_module>\n    Deny from all\n</IfModu"
  },
  {
    "path": "application/business/ChatTunnelHandler.php",
    "chars": 5353,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\nuse \\QCloud_WeApp_SDK\\Tunnel\\ITunnelHandler as IT"
  },
  {
    "path": "application/cache/.htaccess",
    "chars": 123,
    "preview": "<IfModule authz_core_module>\n    Require all denied\n</IfModule>\n<IfModule !authz_core_module>\n    Deny from all\n</IfModu"
  },
  {
    "path": "application/cache/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/config/autoload.php",
    "chars": 4034,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/config/config.php",
    "chars": 18140,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n|---------------------------------------------"
  },
  {
    "path": "application/config/constants.php",
    "chars": 4322,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n|---------------------------------------------"
  },
  {
    "path": "application/config/database.php",
    "chars": 4514,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/config/doctypes.php",
    "chars": 2441,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n$_doctypes = array(\n\t'xhtml11' => '<!DOCTYPE html"
  },
  {
    "path": "application/config/foreign_chars.php",
    "chars": 2466,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/config/hooks.php",
    "chars": 417,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/config/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/config/memcached.php",
    "chars": 498,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/config/migration.php",
    "chars": 3032,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n|---------------------------------------------"
  },
  {
    "path": "application/config/mimes.php",
    "chars": 9087,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/config/profiler.php",
    "chars": 477,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/config/routes.php",
    "chars": 1970,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/config/smileys.php",
    "chars": 3181,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/config/user_agents.php",
    "chars": 6132,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n/*\n| --------------------------------------------"
  },
  {
    "path": "application/controllers/Login.php",
    "chars": 283,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\nuse \\QCloud_WeApp_SDK\\Auth\\LoginService as LoginS"
  },
  {
    "path": "application/controllers/Tunnel.php",
    "chars": 373,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\nuse \\QCloud_WeApp_SDK\\Tunnel\\TunnelService as Tun"
  },
  {
    "path": "application/controllers/User.php",
    "chars": 590,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\nuse \\QCloud_WeApp_SDK\\Auth\\LoginService as LoginS"
  },
  {
    "path": "application/controllers/Welcome.php",
    "chars": 679,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\nclass Welcome extends CI_Controller {\n\n\t/**\n\t * I"
  },
  {
    "path": "application/controllers/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/core/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/helpers/general_helper.php",
    "chars": 857,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n\nif (!function_exists('debug')) {\n    /**\n     * "
  },
  {
    "path": "application/helpers/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/hooks/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/language/english/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/language/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/libraries/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/logs/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/models/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/third_party/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/views/errors/cli/error_404.php",
    "chars": 128,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\necho \"\\nERROR: \",\n\t$heading,\n\t\"\\n\\n\",\n\t$message,\n"
  },
  {
    "path": "application/views/errors/cli/error_db.php",
    "chars": 137,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\necho \"\\nDatabase error: \",\n\t$heading,\n\t\"\\n\\n\",\n\t$"
  },
  {
    "path": "application/views/errors/cli/error_exception.php",
    "chars": 745,
    "preview": "<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>\n\nAn uncaught Exception was encountered\n\nType:  "
  },
  {
    "path": "application/views/errors/cli/error_general.php",
    "chars": 128,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\necho \"\\nERROR: \",\n\t$heading,\n\t\"\\n\\n\",\n\t$message,\n"
  },
  {
    "path": "application/views/errors/cli/error_php.php",
    "chars": 690,
    "preview": "<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>\n\nA PHP Error was encountered\n\nSeverity:    <?ph"
  },
  {
    "path": "application/views/errors/cli/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/views/errors/html/error_404.php",
    "chars": 1187,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n?><!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta ch"
  },
  {
    "path": "application/views/errors/html/error_db.php",
    "chars": 1183,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n?><!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta ch"
  },
  {
    "path": "application/views/errors/html/error_exception.php",
    "chars": 887,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n?>\n\n<div style=\"border:1px solid #990000;padding-l"
  },
  {
    "path": "application/views/errors/html/error_general.php",
    "chars": 1174,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n?><!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta ch"
  },
  {
    "path": "application/views/errors/html/error_php.php",
    "chars": 835,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n?>\n\n<div style=\"border:1px solid #990000;padding-l"
  },
  {
    "path": "application/views/errors/html/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/views/errors/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/views/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "application/views/welcome_message.php",
    "chars": 1735,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n?><!DOCTYPE html>\n<html>\n<head>\n    <meta charset="
  },
  {
    "path": "composer.json",
    "chars": 64,
    "preview": "{\n    \"require\": {\n        \"qcloud/weapp-sdk\": \"v0.4.4\"\n    }\n}\n"
  },
  {
    "path": "index.php",
    "chars": 10553,
    "preview": "<?php\n\n/**\n * 设置时区\n */\ndate_default_timezone_set('Asia/Shanghai');\n\n/**\n * CodeIgniter\n *\n * An open source application "
  },
  {
    "path": "install_qcloud_sdk.php",
    "chars": 1701,
    "preview": "<?php\ndefined('BASEPATH') OR exit('No direct script access allowed');\n\n// 加载 SDK\nrequire_once './vendor/autoload.php';\n/"
  },
  {
    "path": "system/.htaccess",
    "chars": 117,
    "preview": "<IfModule authz_core_module>\n\tRequire all denied\n</IfModule>\n<IfModule !authz_core_module>\n\tDeny from all\n</IfModule>"
  },
  {
    "path": "system/core/Benchmark.php",
    "chars": 4013,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/CodeIgniter.php",
    "chars": 15615,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Common.php",
    "chars": 21681,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Config.php",
    "chars": 9276,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Controller.php",
    "chars": 2899,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Exceptions.php",
    "chars": 7301,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Hooks.php",
    "chars": 6251,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Input.php",
    "chars": 22550,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Lang.php",
    "chars": 5465,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Loader.php",
    "chars": 37418,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Log.php",
    "chars": 6425,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Model.php",
    "chars": 2564,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Output.php",
    "chars": 20027,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Router.php",
    "chars": 13151,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Security.php",
    "chars": 27869,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/URI.php",
    "chars": 15200,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/Utf8.php",
    "chars": 4414,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/compat/hash.php",
    "chars": 6662,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/compat/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/core/compat/mbstring.php",
    "chars": 4425,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/compat/password.php",
    "chars": 7544,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/compat/standard.php",
    "chars": 8929,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/core/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/DB.php",
    "chars": 6671,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/DB_cache.php",
    "chars": 5871,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/DB_driver.php",
    "chars": 45753,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/DB_forge.php",
    "chars": 23956,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/DB_query_builder.php",
    "chars": 63253,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/DB_result.php",
    "chars": 14271,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/DB_utility.php",
    "chars": 10845,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/cubrid/cubrid_driver.php",
    "chars": 9545,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/cubrid/cubrid_forge.php",
    "chars": 5816,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/cubrid/cubrid_result.php",
    "chars": 4737,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/cubrid/cubrid_utility.php",
    "chars": 2626,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/cubrid/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/ibase/ibase_driver.php",
    "chars": 9962,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/ibase/ibase_forge.php",
    "chars": 6474,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/ibase/ibase_result.php",
    "chars": 4141,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/ibase/ibase_utility.php",
    "chars": 2343,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/ibase/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/mssql/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/mssql/mssql_driver.php",
    "chars": 13624,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mssql/mssql_forge.php",
    "chars": 4367,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mssql/mssql_result.php",
    "chars": 4854,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mssql/mssql_utility.php",
    "chars": 2464,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mysql/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/mysql/mysql_driver.php",
    "chars": 11531,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mysql/mysql_forge.php",
    "chars": 6131,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mysql/mysql_result.php",
    "chars": 5092,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mysql/mysql_utility.php",
    "chars": 5556,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mysqli/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/mysqli/mysqli_driver.php",
    "chars": 13387,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mysqli/mysqli_forge.php",
    "chars": 6180,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mysqli/mysqli_result.php",
    "chars": 4758,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/mysqli/mysqli_utility.php",
    "chars": 5575,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/oci8/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/oci8/oci8_driver.php",
    "chars": 16895,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/oci8/oci8_forge.php",
    "chars": 4835,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/oci8/oci8_result.php",
    "chars": 5345,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/oci8/oci8_utility.php",
    "chars": 2304,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/odbc/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/odbc/odbc_driver.php",
    "chars": 9792,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/odbc/odbc_forge.php",
    "chars": 2551,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/odbc/odbc_result.php",
    "chars": 6359,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/odbc/odbc_utility.php",
    "chars": 2183,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/pdo/pdo_driver.php",
    "chars": 8763,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/pdo_forge.php",
    "chars": 2147,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/pdo_result.php",
    "chars": 5013,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/pdo_utility.php",
    "chars": 2181,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_4d_driver.php",
    "chars": 5682,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_4d_forge.php",
    "chars": 5366,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_cubrid_driver.php",
    "chars": 6483,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_cubrid_forge.php",
    "chars": 5846,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_dblib_driver.php",
    "chars": 9784,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_dblib_forge.php",
    "chars": 4330,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_firebird_driver.php",
    "chars": 7284,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_firebird_forge.php",
    "chars": 6284,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php",
    "chars": 6628,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_ibm_forge.php",
    "chars": 4069,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_informix_driver.php",
    "chars": 8515,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_informix_forge.php",
    "chars": 4324,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php",
    "chars": 9436,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_mysql_forge.php",
    "chars": 6376,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_oci_driver.php",
    "chars": 8473,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_oci_forge.php",
    "chars": 4677,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_odbc_driver.php",
    "chars": 5889,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_odbc_forge.php",
    "chars": 2321,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_pgsql_driver.php",
    "chars": 9589,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_pgsql_forge.php",
    "chars": 5791,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_sqlite_driver.php",
    "chars": 5870,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_sqlite_forge.php",
    "chars": 6181,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_sqlsrv_driver.php",
    "chars": 10894,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/pdo/subdrivers/pdo_sqlsrv_forge.php",
    "chars": 4332,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/postgre/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/postgre/postgre_driver.php",
    "chars": 14698,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/postgre/postgre_forge.php",
    "chars": 5714,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/postgre/postgre_result.php",
    "chars": 4656,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/postgre/postgre_utility.php",
    "chars": 2508,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlite/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/sqlite/sqlite_driver.php",
    "chars": 7995,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlite/sqlite_forge.php",
    "chars": 5469,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlite/sqlite_result.php",
    "chars": 4288,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlite/sqlite_utility.php",
    "chars": 2150,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlite3/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/sqlite3/sqlite3_driver.php",
    "chars": 8564,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlite3/sqlite3_forge.php",
    "chars": 5973,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlite3/sqlite3_result.php",
    "chars": 4907,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlite3/sqlite3_utility.php",
    "chars": 2139,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlsrv/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/database/drivers/sqlsrv/sqlsrv_driver.php",
    "chars": 14268,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlsrv/sqlsrv_forge.php",
    "chars": 4320,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlsrv/sqlsrv_result.php",
    "chars": 4884,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/drivers/sqlsrv/sqlsrv_utility.php",
    "chars": 2491,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/database/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/fonts/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/helpers/array_helper.php",
    "chars": 3495,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/captcha_helper.php",
    "chars": 9505,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/cookie_helper.php",
    "chars": 3845,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/date_helper.php",
    "chars": 19312,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/directory_helper.php",
    "chars": 3327,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/download_helper.php",
    "chars": 4577,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/email_helper.php",
    "chars": 2699,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/file_helper.php",
    "chars": 12200,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/form_helper.php",
    "chars": 23512,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/html_helper.php",
    "chars": 9617,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/helpers/inflector_helper.php",
    "chars": 7043,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/language_helper.php",
    "chars": 2588,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/number_helper.php",
    "chars": 2988,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/path_helper.php",
    "chars": 2885,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/security_helper.php",
    "chars": 3704,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/smiley_helper.php",
    "chars": 6906,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/string_helper.php",
    "chars": 7600,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/text_helper.php",
    "chars": 14415,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/typography_helper.php",
    "chars": 3259,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/url_helper.php",
    "chars": 13897,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/helpers/xml_helper.php",
    "chars": 2864,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  },
  {
    "path": "system/index.html",
    "chars": 131,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>403 Forbidden</title>\n</head>\n<body>\n\n<p>Directory access is forbidden.</p>\n\n</bod"
  },
  {
    "path": "system/language/english/calendar_lang.php",
    "chars": 3023,
    "preview": "<?php\n/**\n * CodeIgniter\n *\n * An open source application development framework for PHP\n *\n * This content is released u"
  }
]

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

About this extraction

This page contains the full source code of the tencentyun/wafer-php-server-demo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 258 files (1.7 MB), approximately 488.6k tokens, and a symbol index with 1839 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!