前段時間給自己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的邏輯,即客戶端的處理邏輯。