DirectAdmin API问题:调用CMD_API_SHOW_USER_CONFIG接口返回空数组
看起来你碰到了这么个问题:调用DirectAdmin的CMD_API_SHOW_USER_CONFIG接口返回空数组,但其他API(比如创建用户)却能正常工作。咱们一步步排查可能的原因和解决办法:
先调试原始API响应
你现在的代码只打印了解析后的结果,但原始响应里可能藏着问题线索。先修改代码,输出未处理的原始响应:
<?php include '../protocol/httpsocket.php'; $sock = new HTTPSocket; $sock->connect('localhost',2222); $sock->set_login('admin','admin_password'); $show_user='user5'; // 发送API请求 $sock->query('/CMD_API_SHOW_USER_CONFIG?user='.$show_user); // 先打印原始响应用于诊断 echo "原始API响应:\n"; echo $sock->fetch_body() . "\n\n"; // 再打印解析后的结果 $result = $sock->fetch_parsed_body(); echo "解析结果:\n"; print_r($result); ?>
常见原因与修复方案
目标用户不存在或拼写错误
仔细确认user5是DirectAdmin中真实存在的用户名,拼写完全一致——哪怕大小写不对,都可能导致接口找不到用户(取决于服务器配置)。API请求方式不匹配
部分DirectAdmin API要求用POST请求而非GET。如果你的HTTPSocket::query()方法支持传递POST数据,试试把user参数通过POST发送,而不是拼在URL里:// 把原来的query行替换成这个(假设query方法第二个参数是POST数据) $sock->query('/CMD_API_SHOW_USER_CONFIG', ['user' => $show_user]);如果你的
httpsocket.php不支持这种方式,可以手动设置请求方法和请求体:$sock->method = 'POST'; $sock->query('/CMD_API_SHOW_USER_CONFIG', 'user=' . urlencode($show_user));解析函数出问题
fetch_parsed_body()方法可能无法正确解析API返回的内容。DirectAdmin的API通常返回key=value&key2=value2格式的字符串。如果原始响应里有用户配置数据,但解析后是空数组,那得检查httpsocket.php里的解析逻辑——比如是不是用错了分隔符,或者错误跳过了空值。权限特殊情况
虽然你的admin账号能创建用户,但也有可能存在自定义权限限制,导致无法查看这个特定用户的配置。去DirectAdmin的管理员设置里确认,你的账号拥有完整的用户管理权限。
原始响应里该看什么
- 如果看到
error=1&text=User does not exist,说明用户名无效; - 如果看到一串
key=value格式的用户数据,问题出在解析函数上; - 如果响应是空的,可能是服务器端有问题(去DirectAdmin的日志里查这个API调用相关的错误)。
内容的提问来源于stack exchange,提问作者Tom Arm
相关产品推荐
相关产品推荐

