2012-04-03 8 views
1

PHP用のPlesk Apiを使用したいと思います。私はParallelsのウェブサイトからサンプルをダウンロードし、私のウェブサイトに使用しようとしました。Plesk api StringをXMLとして解析できませんでした

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML

私が使用するコード::私は、私は次のエラーを取得する私のウェブサイト上でページを開くと

<?php 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 
/** 
* Reports error during API RPC request 
*/ 
class ApiRequestException extends Exception {} 

/** 
* Returns DOM object representing request for information about all available domains 
* @return DOMDocument 
*/ 

function domainsInfoRequest() 
{ 
     $xmldoc = new DomDocument('1.0', 'UTF-8'); 
     $xmldoc->formatOutput = true; 

     // <packet> 
     $packet = $xmldoc->createElement('packet'); 
     $packet->setAttribute('version', '1.4.1.2'); 
     $xmldoc->appendChild($packet); 

     // <packet/domain> 
     $domain = $xmldoc->createElement('domain'); 
     $packet->appendChild($domain); 

     // <packet/domain/get> 
     $get = $xmldoc->createElement('get'); 
     $domain->appendChild($get); 

     // <packet/domain/get/filter> 
     $filter = $xmldoc->createElement('filter'); 
     $get->appendChild($filter); 

     // <packet/domain/get/dataset> 
     $dataset = $xmldoc->createElement('dataset'); 
     $get->appendChild($dataset); 

     // dataset elements 
     $dataset->appendChild($xmldoc->createElement('limits')); 
     $dataset->appendChild($xmldoc->createElement('prefs')); 
     $dataset->appendChild($xmldoc->createElement('user')); 
     $dataset->appendChild($xmldoc->createElement('hosting')); 
     $dataset->appendChild($xmldoc->createElement('stat')); 
     $dataset->appendChild($xmldoc->createElement('gen_info')); 

     return $xmldoc; 
} 
/** 
* Prepares CURL to perform Plesk API request 
* @return resource 
*/ 
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 Plesk API request, returns raw API response text 
* 
* @return string 
* @throws ApiRequestException 
*/ 
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); 
      curl_close($curl); 
      throw new ApiRequestException($errmsg, $errcode); 
     } 
     curl_close($curl); 
     return $result; 
} 

/** 
* Looks if API responded with correct data 
* 
* @return SimpleXMLElement 
* @throws ApiRequestException 
*/ 
function parseResponse($response_string) 
{ 
     $xml = new SimpleXMLElement($response_string); 
     if (!is_a($xml, 'SimpleXMLElement')) 
      throw new ApiRequestException("Can not parse server response: {$response_string}"); 
     return $xml; 
} 
/** 
* Check data in API response 
* @return void 
* @throws ApiRequestException 
*/ 
function checkResponse(SimpleXMLElement $response) 
{ 
     $resultNode = $response->domain->get->result; 

     // check if request was successful 
     if ('error' == (string)$resultNode->status) 
      throw new ApiRequestException("Plesk API returned error: " . (string)$resultNode->result->errtext); 
} 

// 
// int main() 
// 
$host = '************'; 
$login = '************'; 
$password = '************'; 

$curl = curlInit($host, $login, $password); 

try { 

     $response = sendRequest($curl, domainsInfoRequest()->saveXML()); 
     $responseXml = parseResponse($response); 
     checkResponse($responseXml); 

} catch (ApiRequestException $e) { 
     echo $e; 
     die(); 
} 

// Explore the result 
foreach ($responseXml->xpath('/packet/domain/get/result') as $resultNode) { 
     echo "Domain id: " . (string)$resultNode->id . " "; 
     echo (string)$resultNode->data->gen_info->name . " (" . (string)$resultNode->data->gen_info->dns_ip_address . ")\n"; 
} 

?> 

を私は誰かが解決策を見つけるために私を助けることができると思います。

答えて

0

あなたのスクリプトは私のサーバーと完全に動作します(書式を復元できた限り)。 元のParallelsのドキュメントに記載されている例に基づいているようです。だから私は `Plesk integration guideの例を手に入れて、私のサーバーに適用しました。

あなたのPleskサーバの構成が誤っている可能性があります。印刷XMLリクエスト(domainsInfoRequest()->saveXML())とXMLレスポンス($response)の場合は、問題のトラブルシューティングを行う可能性があります。何らかの理由で$ responseに有効なXMLコードとは異なるものが含まれているようです。わからない場合は、ファイルにコピー/ペーストしてxmllint(XML検証ツール)を実行してください。

関連する問題