2011-03-07 15 views
0

HTTP POST要求でXML入力を受け取り、それを処理してからXML応答を返すPHPスクリプトを作成する必要があります。私はこれを自分自身で試している間にかなりの時間を費やしてきました。ここに私がこれまで持っていたものがあります。PHPを使用してXMLデータを受信し、処理して返す最良の方法は何ですか?

私は最初に、ユーザーがXMLデータを文字列、文字列としてのXML URI、またはPHPスクリプトへのXML URIとして提出できるHTMLフォームをまとめました。このフォームはテスト用です。私はこのスクリプトを作成するだけです。私のPHPスクリプトで

私はその後、XMLデータが何であるかに基づいて、いくつかのものを行う

// Checks that some XML input has been given 
if (!(isset($_POST['xmlinput']))) { 
    handleErrors("No XML Input Given"); 
} 

// Creates a new DOM Document 
$domdoc = new DomDocument; 

// Sets the URL of the XML Schema 
$xmlschema = "xmlschema.xsd"; 

// If XML input is a file, tries to load it 
if (file_exists($_POST['xmlinput'])) { 
    if (!$domdoc->load($_POST['xmlinput'])) { 
     handleErrors("Error in XML File"); 
    } 
} 
// If XML input is not a file, tries to load it as a string 
else { 
    if (!$domdoc->loadXML($_POST['xmlinput'])) { 
     handleErrors("Error in XML Document"); 
    } 
} 

// Validates the XML against the schema 
if (!($domdoc->schemaValidate($xmlschema))) { 
    handleErrors("XML Does Not Conform To Schema"); 
} 

...いくつかの入力が取り扱い行い、その後、私はXMLレスポンスを生成します。 DOMやSimpleXMLでXMLを作成することはかなり可能ですが、元のページに戻す方法は分かりません。また、これはPHPでXML入力を処理する最善の方法ですか?私はphp://入力や$ HTTP_RAW_POST_DATAに関する記事をたくさん見てきましたが、これらは私が使っている方法よりも優れているようには思えません。あなたが私に与えることができる情報は大きな助けになるでしょう。それ以上明確にすることができれば、私に知らせてください。

答えて

0

あなたはWebサービスへのXMLデータをポストする必要がある場合は非常に簡単に、あなたは、単に

echo $xml->asXML();

そして、SimpleXmlを使用して

をXMLドキュメントを作成するには、以下を使用することができますそれを達成するためのコード。

$dom = new DOMDocument; 
$dom->loadXML($source, LIBXML_NOERROR); 

代替libxml_use_internal_errorsを使用することです:

function do_post_request($url, $data, $optional_headers = null) 
{ 
    $params = array('http' => array(
       'method' => 'POST', 
       'content' => $data 
      )); 
    if ($optional_headers !== null) { 
    $params['http']['header'] = $optional_headers; 
    } 
    $ctx = stream_context_create($params); 
    $fp = @fopen($url, 'rb', false, $ctx); 
    if (!$fp) { 
    throw new Exception("Problem with $url, $php_errormsg"); 
    } 
    $response = @stream_get_contents($fp); 
    if ($response === false) { 
    throw new Exception("Problem reading data from $url, $php_errormsg"); 
    } 
    return $response; 
} 
0

あなたはエラー抑制演算子を使用したいが、そのための適切なOptionを追加していけません。

レスポンスは、基本的にウェブサーバーがリクエストしているクライアントに返信するので、XMLレスポンスを送信するためにXMLヘッダーでXMLをエコーし​​ます。

header ("Content-Type:text/xml; charset=utf-8"); 
echo $xml->asXML(); 
+0

私はすでにエラー処理にlibxml_use_interal_errorsを使用していますが、ありがとうございます。フィードバックいただきありがとうございます。 – OpticalDelusion

関連する問題