0

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";
}

?>
4

1 に答える 1

0

rdoのコメントのおかげで、「domain_name」を受け入れず、代わりに「site-id」が必要であると判断できました。これを使用すると、私のスクリプトは問題なく機能しました。

于 2012-08-14T19:13:51.497 に答える