本文共812 个字,平均阅读时长 ≈ 3分钟
一、问题缘由
我在使用joe主题的过程中,发现网站流量统计,有一个宝塔服务器的对接功能,但是在配置好宝塔的api和密钥后,发现无法使用,花费了1个小时(实际上几天的挣扎后 ),终于找到问题的根源,下面是解决问题的过程!
二、基本配置
- 在宝塔后台开启API接口,配置线上服务器的ip到白名单里,然后获取 宝塔地址 和 密钥
- 在joe主题修改外观的其他设置,先配置好 宝塔地址 和 密钥
- 没有出现信息【首先确保前面两个步骤没问题】,那么问题就不就不离十跟我遇到的一样了。
三、修复过程
1.HTML端排查
开启浏览器F12开发者模式,获取对应位置的class名称“joe_census__server”,找到相应源代码的位置:census.php
文件下
可以看到的是,里面的代码都是静态的,通过一个<?php if ($this->options->JBTPanel && $this->options->JBTKey) : ?>
的判断去输出这块的内容,其实这块就是看你有没有配置这个信息,只要没有配置就是不输出,所以第一步没有找到问题的根源,但是在文件开头有一个<script src="<?php _getAssets('assets/js/joe.census.min.js'); ?>"></script>
我尝试从里面寻找答案,测试时要把 min 去掉,测试压缩前的js文件--><script src="<?php _getAssets('assets/js/joe.census.js'); ?>"></script>
{/card-list-item}
{card-list-item}
2.JavaScript排查
在joe.census.js文件中,可以看到,其实是通过ajax请求后台php,去获取服务器内核数据的,再通过dom操作将内核数据插入到的html里。
所以我在这些位置添加console.log()
在控制台看请求的结果,这个结果让我非常惊喜,居然走到了error
分支,
responseText
的代码是这样的,内核数据都出来了,但是有一个Warning
警告,说明系统其实已经请求到数据了,但是没有走到success
分支
接下来,我沿着错误从ajax
请求的后台路径,去找到请求的api
{/card-list-item}
{card-list-item}
3.PHP脚本端排查
$.ajax({
url: Joe.BASE_API,
type: 'POST',
dataType: 'json',
data: {
routeType: 'server_status'
},...
可以工具请求的特征,是通过一个server_status
参数去请求一个http://my.srqcode.com/joe/api
,接下来需要做的就是去找到这个api的位置,去看看请求的函数。
在core
目录下的core.php
中,可以找到这段代码:
在找到这个方法后,看到
$self->response->throwJson(array(
/* 状态 */
"status" => $response ? true : false,
/* 信息提示 */
"message" => $response['msg'],
/* 上行流量KB */
"up" => $response["up"] ? $response["up"] : 0,
/* 下行流量KB */
"down" => $response["down"] ? $response["down"] : 0,
/* 总发送(字节数) */
"upTotal" => $response["upTotal"] ? $response["upTotal"] : 0,
/* 总接收(字节数) */
"downTotal" => $response["downTotal"] ? $response["downTotal"] : 0,
/* 内存占用 */
"memory" => $response["mem"] ? $response["mem"] : ["memBuffers" => 0, "memCached" => 0, "memFree" => 0, "memRealUsed" => 0, "memTotal" => 0],
/* CPU */
"cpu" => $response["cpu"] ? $response["cpu"] : [0, 0, [0], 0, 0, 0],
/* 系统负载 */
"load" => $response["load"] ? $response["load"] : ["fifteen" => 0, "five" => 0, "limit" => 0, "max" => 0, "one" => 0, "safe" => 0],
));
还记得之前的报错吗,message未定义,找到宝塔最新的 api接口文档
其实报错也已经提示错误的位置了Warning: Undefined array key "msg" in /www/wwwroot/my.srqcode.com/usr/themes/Joe-master/core/route.php on line 325
joe.census.min.js
">
{/card-list-item}
四、最终答案
没看三 ???,那就留下你的评论吧!
hi
1
hello