Discuz!客户端api开发(一)

本文解析了Discuz!论坛API的工作原理,介绍了根目录下的api.php文件如何处理客户端请求,并展示了如何修改以直接处理mobile.php的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值