2009-03-29 9 views
11

Ich habe einige ähnliche Fragen im Internet gesehen, keine mit einer Antwort.Laden einer Remote-XML-Seite mit file_get_contents()

Ich möchte die Quelle einer Remote-XML-Seite in eine Zeichenfolge zurückgeben. Die Remote-XML-Seite, für die Zwecke dieser Frage ist:

http://www.test.com/foo.xml 

In einem normalen Web-Browser, kann ich die Seite und die Quelle ist ein XML-Dokument anzuzeigen. Wenn ich jedoch file_get_contents('http://www.test.com/foo.xml') verwende, gibt es eine Zeichenfolge mit der entsprechenden URL zurück.

Gibt es die XML-Komponente abrufen? Es ist mir egal, ob es file_get_contents verwendet oder nicht, nur etwas, das funktioniert.

+0

Siehe diese Frage: http://stackoverflow.com/questions/692962/how-to-use-php-to-get-a-webpage-into-a-variable/ –

Antwort

14

Sie müssen allow_url_fopen auf Ihrem Server setzen, damit dies funktioniert.

falls Sie nicht, dann können Sie diese Funktion als Ersatz verwenden:

<?php 
function curl_get_file_contents($URL) 
    { 
     $c = curl_init(); 
     curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($c, CURLOPT_URL, $URL); 
     $contents = curl_exec($c); 
     curl_close($c); 

     if ($contents) return $contents; 
      else return FALSE; 
    } 
?> 

von here entlehnt.

+0

Es ist nicht sicher, ein Ersatz zu sein - Diese Funktionen erfordern, dass PHP mit aktiviertem cURL kompiliert wird. Wenn die Fopen-Wrapper deaktiviert sind, ist die cURL-Funktionalität wahrscheinlich ebenfalls deaktiviert. Besser, eine fsockopen() - Funktion zu verwenden, um auf der sicheren Seite zu sein. –

+1

Ich bin in viele Hostings gekommen, die fopen-wrapper deaktiviert haben, aber nicht cURL, also ist es zwar nicht wirklich ein Ersatz, aber es könnte ein guter Workaround sein. – Seb

+0

Für die Return-Anweisung bevorzuge ich einen ternären Ausdruck, wie folgt: 'return ($ contents)? $ contents: false; ' – Nolwennig

13

Das scheint seltsam. Liefert file_get_contents() gültige Daten für andere Sites (nicht nur XML)? Eine URL kann nur als Dateiname-Parameter verwendet werden, wenn the fopen-wrappers aktiviert wurde (was standardmäßig der Fall ist).

Ich schätze, dass Sie das abgerufene XML später verarbeiten werden - dann sollten Sie in der Lage sein, es in SimpleXml direkt mit dem Simplexml_load _file() zu laden.

try { 
    $xml = simplexml_load_file('http://www.test.com/foo.xml'); 
    print_r($xml); 
} ... 

Ich empfehle die Verwendung von SimpleXML zum Lesen von XML-Dateien, es ist sehr einfach zu bedienen.

Verwandte Themen