前段时间给自己Discuz!x3.2论坛开发客户端,自己就研究了下discuz的api的接口和流程,记录下一些重要的点。
api的入口文件,为根目录下的api.php,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?php
define(
'IN_API'
, true);
//定义api标识
define(
'CURSCRIPT'
,
'api'
);
//定义CURSCRIPT常量
$modarray
=
array
(
'js'
=>
'javascript/javascript'
,
'ad'
=>
'javascript/advertisement'
);
$mod
= !
empty
(
$_GET
[
'mod'
]) ?
$_GET
[
'mod'
] :
''
;
if
(
empty
(
$mod
) || !in_array(
$mod
,
array
(
'js'
,
'ad'
))) {
exit
(
'Access Denied'
);
}
require_once
'./api/'
.
$modarray
[
$mod
].
'.php'
;
//包含对应php文件
function
loadcore() {
global
$_G
;
require_once
'./source/class/class_core.php'
;
$discuz
= C::app();
$discuz
->init_cron = false;
$discuz
->init_session = false;
$discuz
->init();
}
?>
|
该文件最后包含根目录下api/mobile/下的文件,源码中该文件夹里只有一个index.php文件:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php
if
(!
empty
(
$_SERVER
[
'QUERY_STRING'
])) {
$plugin
= !
empty
(
$_GET
[
'oem'
]) ?
'mobileoem'
:
'mobile'
;
$dir
=
'../../source/plugin/'
.
$plugin
.
'/'
;
chdir
(
$dir
);
if
((isset(
$_GET
[
'check'
]) &&
$_GET
[
'check'
] ==
'check'
||
$_SERVER
[
'QUERY_STRING'
] ==
'check'
) &&
is_file
(
'check.php'
)) {
require_once
'check.php'
;
}
elseif
(
is_file
(
'mobile.php'
)) {
require_once
'mobile.php'
;
}
}
?>
|
可以看出,是想包含/source/plugin/mobile/mobile.php的逻辑,所以可以索性直接在api.php中包含mobile的逻辑即可,修改如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?php
define(
'IN_API'
, true);
define(
'CURSCRIPT'
,
'api'
);
$module
= !
empty
(
$_GET
[
'module'
]) ?
$_GET
[
'module'
] :
''
;
if
(
empty
(
$module
)) {
exit
(
'Access Denied'
);
}
chdir
(
'source/plugin/mobile/'
);
if
((isset(
$_GET
[
'check'
]) &&
$_GET
[
'check'
] ==
'check'
||
$_SERVER
[
'QUERY_STRING'
] ==
'check'
) &&
is_file
(
'check.php'
)) {
require_once
'check.php'
;
}
elseif
(
is_file
(
'mobile.php'
)) {
require_once
'mobile.php'
;
}
function
loadcore() {
global
$_G
;
require_once
'./source/class/class_core.php'
;
$discuz
= C::app();
$discuz
->init_cron = false;
$discuz
->init_session = false;
$discuz
->init();
}
?>
|
如果请求包含了check,则包含check.php代码,否则直接包含mobile.php的逻辑,即客户端的处理逻辑。