美国主机Lunarpages

Mediawiki中文技术论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4095|回复: 0

mediawiki(一): Special::Upload 调用过程

[复制链接]
发表于 2011-7-2 10:19:55 | 显示全部楼层 |阅读模式
HostEase主机优惠
在每执行如上所示的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的细节部分.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

BlueHost美国主机优惠码

Archiver|手机版|小黑屋|Mediawiki中文技术论坛

GMT+8, 2022-8-13 05:02 , Processed in 0.107962 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2022, Tencent Cloud.

快速回复 返回顶部 返回列表