前段时间给自己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的逻辑,即客户端的处理逻辑。