dedecms代码研究二

dedecms代码研究(2)从index开始

现在继续,今天讲的主要是dedecms的入口代码。

先打开index.PHP看看里面是什么吧。打开根目录下的index.php嗯

映入眼帘的是一个if语句。检查/data/common.inc.php是否存在。如果不存在就跳转到安装界面。

if(!file_exists(dirname(__FILE__).'/data/common.inc.php'))
{
    header('Location:install/index.php');
    exit();
}

我们来到/data/看看这个目录和common.inc.php。

打开/data/,里面很多目录和文件,有上传的临时目录,模板缓存,压缩的临时目录,各种数据库里保存的系统配置信息的缓存文件以及其他的一些东西,就一个字乱~

好吧,我们打开common.inc.php。哦,原来就是保存了数据库连接的相关变量而已。说白了,就是dedecms的数据库连接配置文件,估计是安装完系统生成的。所以/index.php会检查它是否存在。

 我们回到/index.php中继续往下看,第二个if语句,判断GET请求“upcache”是否存在,存在就更新首页缓存,不存在就直接301跳转到index.html,也就是dedecms的静态首页(记住,dedecms的前台页面都是系统生成的静态页面)。

想想接下来我们要研究什么?对,就是GET请求“upcache”存在的时候,更新首页缓存这小段代码啦。代码如下:

if(isset($_GET['upcache']) || !file_exists('index.html'))
{
    require_once (dirname(__FILE__) . "/include/common.inc.php");
    require_once DEDEINC."/arc.partview.class.php";
    $GLOBALS['_arclistEnv'] = 'index';
    $row = $dsql->GetOne("Select * From `#@__homepageset`");
    $row['templet'] = MfTemplet($row['templet']);
    $pv = new PartView();
    $pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
    $row['showmod'] = isset($row['showmod'])? $row['showmod'] : 0;
    if ($row['showmod'] == 1)
    {
        $pv->SaveToHtml(dirname(__FILE__).'/index.html');
        include(dirname(__FILE__).'/index.html');
        exit();
    } else {
        $pv->Display();
        exit();
    }
}
else
{
    header('HTTP/1.1 301 Moved Permanently');
    header('Location:index.html');
}

①加载/include/common.inc.php,估计是一些常用函数和加载其他系统函数和类的文件。

②接下来又加载了DEDEINC."/arc.partview.class.php",注意DEDEINC这个常量,我们知道经过前期对dedecms目录结构观察,arc.partview.class.php是在/include目录下的,而加载/include/common.inc.php却没有用DEDEINC这个常量,这说明,common.inc.php里面定义了DEDEINC这个常量,所以后面得以使用,也印证了common.inc.php大体作用就是系统运行基本部分,都在这里面啦。我们不急着进common.inc.php,继续把index.php的更新缓存代码看完。

第三句,设置了一个全局变量:$GLOBALS['_arclistEnv'] = 'index';

第四行,获取一个表'#@__homepageset'的所有记录,当然如果你看下数据库,里面没有“#@__homepageset”这个表,我们判断,是数据库操作相关函数把表名用表名前缀替换了一下前半部分,这个都不重要了,重要的是,通过这句,获取了首页的相关配置信息,我们打开数据库里面的dede_homepageset表,晕,就一条记录,俩字段,基本猜到了,一个是首页模板名称,一个是生成的静态文件的位置。

回来继续分析前面的代码

$row['templet'] = MfTemplet($row['templet']);

通过MfTemplet函数好像把$row['templet']进行了某些转换。我们记下MfTemplet函数,以待后面挖掘。

接下来,就是new了一个PartView类,看这个名字,我们就知道了前面加载arc.partview.class.php的作用啦。

至于这个PartView类有什么作用,我们继续看代码。看了下面两行,我想大家应该都明白啦

$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);

$pv->SaveToHtml(dirname(__FILE__).'/index.html');

创建个视图对象(PartView类的实例,我们姑且叫视图对象),设置模板,通过SaveToHtml方法,把最后生成的页面写到指定位置。

首页生成完毕,接下来就是把生成的静态文件通过include的形式显示出来,然后exit中断页面解析。

至此,/index.php就分析完啦。

它先是通过/data/common.inc.php,判断是否安装了dedecms或者说判断是否定义了数据库配置信息,好为后面操作打下基础。

然后判断是否有GET请求"upcache",如果有就加载/include/common.inc.php初始化系统,然后调用partview类的相关方法来生成静态首页文件,最后显示出来。

这么来看dedecms也没有太多的秘密嘛~


不过呢,我们这篇文章也遗留下了几个问题:

1)加载了/include/common.inc.php,里面做了哪些工作?

2)/include/arc.partview.class.php到底是干什么的,/include/下还有很多arc开头的文件都是干什么的?

3)MfTemplet这个函数到底对模板文件路径这个字符串做了什么操作?

4)partview类的相关方法都有什么秘密?

带着这几个疑问,我们将结束本文,后面的文章将将这些谜题一一揭开。 博主个人博客:www.kanronghua.com 欢迎学习交流。

posted @ 2016-10-07 11:25  华子web  阅读(241)  评论(0编辑  收藏  举报