我想自给自足,因此没有DNSDynamic和DYNDNS等服务.而且我不喜欢支付我自己可以做的服务.
所以这是场景 - 我的主网站托管了托管公司.我还有一个带有音乐等的家庭服务器.但问题是我的ISP(BT)不向消费者提供静态IP地址.
我希望我的主域(指向我的主要主机)的子域指向我的家庭IP.这是通过简单的A记录完成的 - 我自己完成了.
这归结为我希望制作一个PHP脚本(由我的家庭服务器上的cron作业运行)来将cPanel中的A记录更新为我家庭服务器的当前IP.
这里有一些示例代码 - 当然缺少的是与cPanel通信的API代码,我非常感谢任何可以为我填补空白的人.
<?php
$current_ip = file_get_contents("http://mydomain.com/getip.php");
$username = "CPANEL_USERNAME";
$password = "CPANEL_PASSWORD";
$domain = "CPANEL_DOMAIN";
$request = file_get_contents("http://someapipage?username=".$username."&pw=".$password."&domain=".$domain."&ip=".$current_ip);
?>
Run Code Online (Sandbox Code Playgroud)
代码http://mydomain.com/getip.php是简单的
<?php echo $_SERVER["REMOTE_ADDR"]; ?>
Run Code Online (Sandbox Code Playgroud)
我已经掌握了如何设置一个cron作业,因为我的家庭服务器正在运行Ubuntu,而且我已经阅读了cron.php使用我的localhost目录调用我的教程wget.
我试过这个链接,但我无法理解他在做什么.提前致谢.
Sco*_*ens 12
我刚刚根据他们的文档和jordih.net链接到该文档为cPanel的JSON-API编写了这个库.它没有那么好记录,但它的要点是:
通过调用创建zone_records对象
$zones = new zone_records("cpaneluser", "pass", "website_to_login", "domain_of_records")
Run Code Online (Sandbox Code Playgroud)
请注意,如果要从要更改记录的服务器运行此网站,则要登录的网站通常为127.0.0.1.
一旦被呼叫,您就可以访问一个成员$zones->DNSrecords.它包含DNS A记录和CNAME记录的数组(两者都是DNSrecord对象).其他(TXT除外)是无关紧要的,因为如果没有额外的添加(函数),你就无法编辑它们.
每个DNSrecord都有一些成员(例如target,ttl,name,type),虽然private可以访问它们,$record->ttl因为我添加了"magic" __get方法.__set实现"魔术" 方法只是为了改变ttl和target(你不能使用这个API函数改变其他属性,如果你试图这样做,对象将引发异常).
您可以使用
$zones->addrecord($type, $target, $name, $ttl)
Run Code Online (Sandbox Code Playgroud)
添加记录,或
$zones->deleterecord($line)
Run Code Online (Sandbox Code Playgroud)
删除$line区域文件中在线的记录- 您可以通过它找到它$record->line.
如果您想在ZoneEdit模块中进行一些自己的查询,可以调用
$zones->doquery("function_from_API", array("parameters=>"here"), array("headers"=>"here"))
Run Code Online (Sandbox Code Playgroud)
它将返回cPanel响应(addrecord和deleterecord方法也是如此).最后,我建议你使用,try {...} catch (Exception $e) {...}因为我的对象会在出现问题时抛出异常(当然可以编辑它们).
此代码位于公共域中 - 您可以通过https://github.com/ShadowLNC/cpanel_dns获取它(classdns.php是主文件,dns_update.php显示示例).