mediawiki: Special::Upload 调用过程 收藏
2009年12月27日




在每执行如上所示的url时:

入口: index.php

 

在require_once( "$preIP/includes/WebStart.php" )时,

执行require_once( "$IP/includes/Setup.php" )

在Setup.php文件里, 初使化$wgRequest, $wgTitle等全局变量对象

 

$mediaWiki = new MediaWiki(); 生成 mediawiki 对象, 可以理解是 整个网页.

 

Index.php里执行初使化.

$mediaWiki->initialize( $wgTitle, $wgArticle, $wgOut, $wgUser, $wgRequest );

 

在initialize中调用 initializeSpecialCases()

在initializeSpecialCases()中有代码如下:(我这里是 223行开始)

 

else if( NS_SPECIAL == $title->getNamespace() ) {

/* actions that need to be made when we have a special pages */

SpecialPage::executePath( $title );

}

 

此时的 $title 的namespace 为 NS_SPECIAL($title已根据url生成)

执行 SpecialPage::executePath( $title );这个函数在 SpecialPage.php中

 

* SpecialPage: handling special pages and lists thereof.

 

这个函数又调用 $page->execute( $par ); 也是在 SpecialPage.php文件里.

 

在这个函数里, 注意有一个 call_user_func( $func, $par, $this ); 他调用 $func指定的 函数. call_user_func函数可参考php手册.

 

能过 dubugger可发现, 此时, 这个 $func正是: wfSpecialUpload  

 

通过这种方式, 就转到 SpecialUpload.php这个文件上里了.

 

 

在分析wfSpecialUpload()这个函数:

function wfSpecialUpload() {

global $wgRequest;

$form = new UploadForm( $wgRequest );

$form->execute();

}

 

他根据$wgRequest生成一个新 form类, 这个form类就是 实际 显示的那个 表单类.

追踪$form->execute();这个函数:

 

这倒数几行: 有代码:

else if( 'submit' == $this->mAction || $this->mUploadClicked ) {

$this->processUpload();

} else {

$this->mainUploadForm();

}

 

 

第一个if里面, 有个submit 显然这是 执行 上传文件.

而第二个 mainUploadForm(), 进入这个函数, 可以发现 里面都是 addHtml函数. 也就是 翱翔 修改过的, 在里面 加入 <input…> 等.

简单的说: processUpload() 执行upload过程, 而 mainUploadForm生成 html的表单.

也就是说, 在点击upload那个button时, 执行的还是 那个 页面. 而只不过里面的参数通过 变化, 最后执行的 函数不一样而以.

 

 

在processUpload()中, 调用internalProcessUpload()函数, 这里 应该就是 upload的细节部分
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/IamAm/archive/2009/09/20/4571806.aspx

 

本文永久链接: http://www.zzxj.net/blog/fxs_2008/archive/2009/12/27/110.html

发表于 @ 2009年12月27日 |评论(loading... )|收藏

发表评论 姓  名: