2016-11-29 3 views
1

WordPress 용 클라우드 기반 POS에서 전달되는 XML 출력을 읽을 수있는 플러그인을 개발 중입니다.SimpleXML이이 하나의 URL을 구문 분석하지 않습니다.

이것은 복잡한 프로그래밍에 관한 것이 아니라 더 많은 디버그입니다.

는 XML URL은 다음과 같습니다 는 제거 :

그리고 기본, 간단한 코드이다 : 나는 모든 방법을 시도 <?php error_reporting(E_ALL); ini_set('display_errors', true); $url = '--URL to the XM--L'; $xml=simplexml_load_file($url); print_r($xml); ?>

. DOMDoc, CURL 및 SimpleXML. 모든 것이 오류를 내뱉습니다. 산출물을 만든 코더가 자신의 도메인에서 작동하도록 만들었지 만 오류가있는 위치를 찾으려면 더 디버깅해야합니다.

필자는 XML을 스크립트에 어떻게 제공하는지에 따라 상당히 많은 오류가 발생했습니다.

Fatal error: Uncaught Exception: String could not be parsed as XML in /var/www/html/test2.php:27 Stack trace: #0 /var/www/html/test2.php(27): SimpleXMLElement->__construct('http://jewelbas...', NULL, true) #1 {main} thrown in /var/www/html/test2.php on line 27

그리고 때때로 나는 그들의 호스트에서 오는 가정 것을, 이상한 지원 오류가 발생할 수 있지만, 그들은 그것들을 식별 할 수 없습니다. 이러한 지원 오류는 내가 사용하는 서버에 관계없이 발생합니다. simplexml_load_string()

Warning: simplexml_load_string(): act the webmaster. <br><br>Your support ID is: 9641638103684613562</body></html>

+0

코드에서 어떤 오류가 발생했는지 알면 도움이됩니다. – simon

+0

감사합니다 @imon, 오류를 확장하는 것을 잊었습니다 – Rick

답변

0

서버가 설정하는 사용자 에이전트를 필요로를 사용할 때 그들은 온다. PHP의 모든 표준 XML API는 libxml을 기반으로합니다. 당신은 그것을 위해 스트림 컨텍스트를 설정할 수 있습니다 : 그것은 미래 세대가 볼 수 있도록 여기에 너무

libxml_set_streams_context(
    stream_context_create(
    [ 
     'http' => [ 
     'header'=> 
      "User-Agent: Foo\r\n" 
     ] 
    ] 
) 
); 

$document = new DOMDocument(); 
$document->load($url); 
echo $document->saveXML(); 
+0

감사합니다! 비록 당신의 대답이 직접적 이진 않았지만, 그것은 나를 이끌어내는 useraget 조정에 대한 검색을 지적했다 : http://stackoverflow.com/questions/14844919/xml-feed-valid-http-header-user-agent – Rick

0

을, 여기에 지금은 좋은 형식으로 XML을 구문 분석하는 전체 코드입니다.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', true); 
$url = 'http://sample.com/yourphpxmlfile.php?variables=rule'; 
$feed = $url; 
$options = array(
'http' => array(
'method' => "GET", 
'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\r\n" // Chrome v24 
) 
); 
$context = stream_context_create($options); 
$content = new SimpleXMLElement(file_get_contents($feed, false, $context)); 
echo "<pre>"; 
print_r($content); 
echo "</pre>"; 
?>