You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP程序化创建DirectAdmin子域名?选择API调用还是直接文件操作?

用PHP创建DirectAdmin子域名:API vs 直接文件操作

兄弟,我之前折腾过DirectAdmin里用PHP自动化建子域名的需求,给你梳理下最靠谱的方案和要踩的坑:

优先推荐:使用DirectAdmin API

绝对不要一开始就想着直接改服务器文件!DirectAdmin的内部配置是互相关联的,手动操作很容易漏步骤或者导致面板和服务冲突。用官方API才是正确姿势,它会帮你自动处理所有依赖环节(目录创建、DNS配置、Apache虚拟主机、面板记录同步等等)。

用PHP调用API的大致步骤:

  1. 准备API请求参数:你需要管理员账号的用户名、密码,目标主域名mydomain.com,要创建的子域名前缀sub,还有服务器的DirectAdmin访问地址(比如https://your-server-ip:2222)。
  2. 用CURL构造POST请求,调用CMD_API_SUBDOMAINS接口,核心参数包括:
    • action=create
    • domain=mydomain.com
    • subdomain=sub
    • 可选:dir=public_html/sub.mydomain.com(指定子域名的根目录,默认就是这个路径)
  3. 处理API响应:返回的文本会告诉你创建是否成功,失败的话会给出错误原因(比如子域名已存在、权限不足等)。

举个简单的PHP代码片段(记得替换成你的实际信息):

$daUrl = 'https://your-server-ip:2222/CMD_API_SUBDOMAINS';
$credentials = 'admin:your-admin-password';
$postData = http_build_query([
    'action' => 'create',
    'domain' => 'mydomain.com',
    'subdomain' => 'sub',
    'dir' => 'public_html/sub.mydomain.com'
]);

$ch = curl_init($daUrl);
curl_setopt($ch, CURLOPT_USERPWD, $credentials);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 如果你没装可信SSL证书的话

$response = curl_exec($ch);
curl_close($ch);

// 解析响应,DirectAdmin API通常返回类似"error=0&text=Subdomain created"的格式
parse_str($response, $result);
if ($result['error'] == 0) {
    echo "子域名创建成功!";
} else {
    echo "创建失败:" . $result['text'];
}

万不得已才用:直接操作服务器文件(不推荐)

如果你因为某些原因必须手动操作文件,那得覆盖所有DirectAdmin涉及子域名的配置点,缺一不可:

  • 创建子域名根目录:在主域名的public_html下新建对应文件夹,比如mkdir /home/admin/domains/mydomain.com/public_html/sub.mydomain.com,还要把权限改成和主目录一致(通常是admin:admin,用chown -R admin:admin 目录路径)。
  • 更新Apache虚拟主机配置:DirectAdmin不会直接让你改全局httpd.conf,而是每个域名有单独的配置文件,路径是/usr/local/directadmin/data/users/admin/domains/mydomain.com.conf。你需要在这个文件里添加子域名的<VirtualHost>段,格式和主域名类似,把ServerName改成sub.mydomain.com,DocumentRoot指向刚才创建的目录。
  • 添加DNS记录:编辑主域名的DNS数据库文件/usr/local/directadmin/data/users/admin/domains/mydomain.com.db,添加一条A记录:sub.mydomain.com. IN A 你的服务器IP,保存后重载DNS服务(比如systemctl reload named)。
  • 更新DirectAdmin的子域名列表:在/usr/local/directadmin/data/users/admin/domains/mydomain.subdomains文件里,添加一行子域名前缀sub,这样DirectAdmin面板里才会显示这个子域名。
  • 同步DirectAdmin缓存:执行命令/usr/local/directadmin/directadmin taskq,让面板同步新的配置,避免面板显示和实际配置不一致。

手动操作的风险提醒

  • 权限问题:PHP运行的用户(通常是www-data)默认没有修改DirectAdmin配置文件的权限,你要么给PHP提权(非常危险),要么用sudo配合脚本,但这会带来安全隐患。
  • 配置覆盖:如果用户之后在DirectAdmin面板里修改主域名配置,你手动添加的内容可能被面板自动生成的配置覆盖。
  • 语法错误:如果Apache配置写错了,会导致整个Web服务崩溃,排查起来很麻烦。

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:22:41