本文原创,欢迎转载,但是,务必保持原文并且给出原文链接。
前言:
本节对Wafer 服务端 SDK 是腾讯云为微信小程序开发者提供的快速开发库,SDK 封装了以下功能供小程序开发者快速调用的源码的初始化进行了分析.
写在前面的话:
小程序PHP,用的是CodeIgniter开源框架,那么,要了解启动的过程,必须先对文件结构体系有所了解:
1 CodeIgniter 是什么
http://codeigniter.org.cn/user_guide/overview/at_a_glance.html
1.1 CodeIgniter 是一个应用程序框架
CodeIgniter 是为 PHP 开发人员提供的一套 Web 应用程序工具包。 它的目标是能够让你比从零开始更加快速的完成项目,它提供了一套 丰富的的类库来满足我们日常的任务需求,并且提供了一个简单的 接口和逻辑结构来调用这些库。CodeIgniter 通过最小化你需要的代码量, 让你把更多的精力放到项目的创造性开发上。
1.2 应用程序流程图
下图说明了整个系统的数据流程:
- index.php 文件作为前端控制器,初始化运行 CodeIgniter 所需的基本资源;
- Router 检查 HTTP 请求,以确定如何处理该请求;
- 如果存在缓存文件,将直接输出到浏览器,不用走下面正常的系统流程;
- 在加载应用程序控制器之前,对 HTTP 请求以及任何用户提交的数据进行安全检查;
- 控制器加载模型、核心类库、辅助函数以及其他所有处理请求所需的资源;
- 最后一步,渲染视图并发送至浏览器,如果开启了缓存,视图被会先缓存起来用于 后续的请求。
1.3 模型-视图-控制器
CodeIgniter 的开发基于 MVC(模型-视图-控制器)设计模式。MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。在实践中,由于这种分离 所以你的页面中只包含很少的 PHP 脚本。
- 模型 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。
- 视图 是要展现给用户的信息。一个视图通常就是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一部分页面(例如页头、页尾),它也可以是一个 RSS 页面, 或其他任何类型的页面。
- 控制器 是模型、视图以及其他任何处理 HTTP 请求所必须的资源之间的中介,并生成网页。
1 初始化文件:
下图给出了文件目录的大致分析,和初始化相关的。
参考,我的另外一个博文;
1.1 初始化配置文件
在SDK说明文件里面:提到的初始化相关的配置文件:有SDK的配置,有DEMO的配置。在SDK的说明文档里面有一些零散的说明,但是,感觉东一块西一块,感觉腾讯说明不是很清楚。
1.1.1 server 根目录下的Readme说明:
上了就提到如下配置文件,
- SDK 配置文件:`/etc/qcloud/sdk.config`
- 示例代码部署目录:`/data/release/php-weapp-demo`
- 运行示例的 nginx 配置文件: `/etc/nginx/conf.d/php-weapp-demo.conf`
这些文件应该是部署后,运行态的访问文件,因为开发文件里面根本没这些文件,所以,我们这里不要去管他。
示例使用 `CodeIgniter(v3.1)` 框架制作。其中,`index.php` 是 启动文件,`install_qcloud_sdk.php` 用于初始化 SDK 配置,配置从文件 `/etc/qcloud/sdk.config` 中读取(运行态不要管他4。配)置文件包含如下配置项:
这一句,开始正在说明了启动初始化相关的讯息,
- `index.php` 是 启动文件
- `install_qcloud_sdk.php` 用于初始化 SDK 配置
### 初始化 SDK 配置项
```php
use \QCloud_WeApp_SDK\Conf;
2 启动源码大致分析
2.1 index.php
基本上根据用户给出的环境,构建整个SDK后台的环境,根据不同的运行环境,设置不同的错误报告等级:
/*
*---------------------------------------------------------------
* 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
}
然后设置,SDK的应用目录体系:
// --------------------------------------------------------------------
// END OF USER CONFIGURABLE SETTINGS. DO NOT EDIT BELOW THIS LINE
// --------------------------------------------------------------------
注意在上述注解之前都是可以用户配置的,这段注解后的代码,后面的配置似乎不被推荐。index指向了后面两个初始化文件:
/*
* --------------------------------------------------------------------
* 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';
2.2 install_qcloud_sdk.php
// 加载 SDK
require_once './vendor/autoload.php';
require_once './config.php';
2.2.1 autoload.php
require_once __DIR__ . '/composer/autoload_real.php';
这是一个编译自动生成的load文件。没有配置需求
2.2.2 config.php
这里设置了应用Demo的配置,
2.2.3 本文件做了的事情
- 合并两个配置文件
- 设置日志输出级别
2.3 core/CodeIgniter.php
/*
* ------------------------------------------------------
* 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');
这一段定义了,系统常量的设置文件路径和文件,“."是PHP字符串连接符
- APPPATH 就是 application/ 注意分隔符已经定义了
define('APPPATH', $application_folder.DIRECTORY_SEPARATOR);
- config 是application下的一个文件夹
- constants.php 是定义了一下常量的表述