|
在每执行如上所示的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的细节部分. |
|