创新实训(一)——HTML生成的开始
服务端收到请求后,会运行 web 文件夹下的 index.php 文件(由同目录下的.htaccess决定)
index.php 文件的内容截图如下:

index.php 会加载所需的函数库和类库,具体如下:
require $_SERVER['DOCUMENT_ROOT'] . '/app/libs/doj-lib.php';
该句是调用 /app/libs/ 下的php文件,用来调用一些类和方法。
doj-lib.php 的完整代码如下:

注意到 doj-lib.php 下有如下代码段:
function requirePHPLib($name) { // doj php lib
require $_SERVER['DOCUMENT_ROOT'].'/app/libs/doj-'.$name.'-lib.php';
}
requirePHPLib('validate');
requirePHPLib('query');
requirePHPLib('rand');
requirePHPLib('utility');
requirePHPLib('security');
requirePHPLib('contest');
requirePHPLib('html');
可知在代码中调用了同类文件夹的其他 lib.php 文件,这些文件的具体功能大致如下:
validate:验证lib,用来验证某些信息是否合法,比如账号密码等query:查询lib,用来调用后台数据库查询相关信息,结合model文件夹下的DB.php类使用rand:随机lib,用来生成随机数据(随机数、随机文件名等)utility:utility—lib,用来实现一些在web上的功能,比如配置合并,字符串处理等security:安全lib,用来维护账号的安全,比如密码处理,token等contest:比赛lib,用来处理比赛相关的方法集,比如计算rating,更新人数等html:HTMLlib,用来接收网页相关信息、输出html代码等
注意到 doj-lib.php 下有如下代码段:
Session::init();
DOJTime::init();
DB::init();
Auth::init();
if (isset($_GET['locale'])) {
DOJLocale::setLocale($_GET['locale']);
}
DOJLocale::requireModule('basic');
此段均是对 /app/models/ 下的部分类进行初始化,其中:
Session:初始化会话层相关的信息DOJTime:初始化时间信息DB:初始化和数据库的连接Auth:初始化登录用户的信息DOJLocale:中英文相关的配置信息
回到web 文件夹下的 index.php 文件,注意到如下代码:
require DOJContext::documentRoot().'/app/route.php';
其中,DOJContext类是用来管理和获取与当前Web请求相关的上下文信息,例如获取服务器环境信息,blog处理等。该句是调用路由文件。路由文件(route file) 去给请求中的网址匹配用于生成响应报文的 PHP 代码,结合 models 下的 Route 使用。 Route 定义了一个简单的路由系统,允许通过静态方法定义和管理路由。通过 match、get、post 等方法,可以方便地为不同的HTTP请求方法定义路由。通过 group 方法,可以对一组路由应用共同的属性。dispatch 方法用于遍历和匹配请求的路由,并执行相应的操作。整个路由系统利用静态属性和方法来管理路由,使其在应用中便于使用和扩展。
index.php 文件中,注意到如下代码:
include DOJContext::documentRoot().'/app/controllers'.call_user_func(function() {
$route = Route::dispatch();
$q_pos = strpos($route['action'], '?');
if ($q_pos === false) {
$path = $route['action'];
} else {
parse_str(substr($route['action'], $q_pos + 1), $vars);
$_GET += $vars;
$path = substr($route['action'], 0, $q_pos);
}
if (isset($route['onload'])) {
call_user_func($route['onload']);
}
return $path;
});
这里是动态调用库文件,主要是根据用户的网页请求来调用。比如申请主页,会调用 controllers 的 index.php 文件。
浙公网安备 33010602011771号