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

 

http://localhost/mediawiki/index.php/Special:Upload

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值