我修改了 Plesk 文档中的示例脚本以远程创建 A-Name 记录,但几周前放弃了它,因为它只是让人头疼。我现在又开始着手解决这个问题,但现在面临着完全相同的问题。示例脚本充满了 try/catch 和错误异常,但无论如何,当我运行脚本时,我得到的只是一个白页。
我也尝试在文档中添加一堆回声,但除非这些不在函数范围内,否则它们也不会打印出来。我只是在做一些非常愚蠢的事情,还是 Plesk 缺少什么?
<?php
/** Reports error during API RPC request */
class ApiRequestException extends Exception {}
function DNSCreateRequest()
{
$xmldoc = new DomDocument('1.0', 'UTF-8');
$xmldoc->formatOutput = true;
// <packet>
$packet = $xmldoc->createElement('packet');
$packet->setAttribute('version', '1.6.3.0');
$xmldoc->appendChild($packet);
// <packet/dns>
$dns = $xmldoc->createElement('dns');
$packet->appendChild($dns);
// <packet/dns/add_rec>
$addrec = $xmldoc->createElement('add_rec');
$dns->appendChild($addrec);
// add_rec elements
$addrec->appendChild($xmldoc->createElement('domain_name','domain.net'));
$addrec->appendChild($xmldoc->createElement('type','A'));
$addrec->appendChild($xmldoc->createElement('host','testdns'));
$addrec->appendChild($xmldoc->createElement('value','127.0.0.1'));
return $xmldoc;
}
/** Prepares CURL to perform the Panel API request */
function curlInit($host, $login, $password)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://{$host}:8443/enterprise/control/agent.php");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array("HTTP_AUTH_LOGIN: {$login}",
"HTTP_AUTH_PASSWD: {$password}",
"HTTP_PRETTY_PRINT: TRUE",
"Content-Type: text/xml")
);
return $curl;
}
/** Performs a Panel API request, returns raw API response text */
function sendRequest($curl, $packet)
{
curl_setopt($curl, CURLOPT_POSTFIELDS, $packet);
$result = curl_exec($curl);
if (curl_errno($curl))
{
$errmsg = curl_error($curl);
$errcode = curl_errno($curl);
echo "error message: " . $errmsg;
echo "error code: " . $errcode;
curl_close($curl);
throw new ApiRequestException($errmsg, $errcode);
}
curl_close($curl);
return $result;
}
/** Looks if API responded with correct data */
function parseResponse($response_string)
{
$xml = new SimpleXMLElement($response_string);
if (!is_a($xml, 'SimpleXMLElement'))
{
echo "Cannot parse server response: " . $response_string;
throw new ApiRequestException("Cannot parse server response: {$response_string}");
}
return $xml;
}
/** Check data in API response */
function checkResponse(SimpleXMLElement $response)
{
$resultNode = $response->dns->add_rec->result;
// check if request was successful
if ('error' == (string)$resultNode->status)
{
echo "The Panel API returned an error: " . (string)$resultNode->result->errtext;
throw new ApiRequestException("The Panel API returned an error: " . (string)$resultNode->result->errtext);
}
}
// int main()
$host = 'www.hostname.com';
$login = 'admin_user';
$password = '$password$';
$curl = curlInit($host, $login, $password);
try
{
$response = sendRequest($curl, DNSCreateRequest()->saveXML());
$responseXml = parseResponse($response);
checkResponse($responseXml);
}
catch (ApiRequestException $e)
{
echo $e;
die();
}
// Explore the result
foreach ($responseXml->xpath('/packet/dns/add_rec/result') as $resultNode)
{
echo "DNS id: " . (string)$resultNode->id . " ";
//echo (string)$resultNode->data->gen_info->name . " (" . (string)$resultNode->data->gen_info->dns_ip_address . ")\n";
}
?>