Externe XML-Datei auf eigenen Server speichern

Xhizors

Grünschnabel
Hallo,

ich habe aktuell folgendes Problem – für ein Projekt möchte ich einen Preis in diverse Währungen umrechnen lassen & das an Hand der Wechselkurse der ECB (http://www.ecb.int/stats/exchange/eurofxref/html/index.en.html) … hier gibt es bereits einen Tab »For Developer« um das XML-File mit den Wechselkursen von deren Server zu parsen.

Bei mehreren hundert Preisen, welche umgerechnet werden sollen, geht dies aber ziemlich auf die Ladezeit der Website, daher war meine Idee das XML-File einmal in der Nacht per Cronjob auf unseren Server zu speichern und das parsen der Datei für die Umrechnung direkt von unserem Server zu machen, was durchschnittlich eine Optimierung von ca. 50% ausmacht.

Leider funktioniert mein bisheriges Script gar nicht – egal wie oft ich die Datei aufrufe, die »test.xml« bleibt immer leer. Die benötigten Dateirechte für den Pfad & die Datei selbst sind entsprechend angepasst. Als beiläufige Info, der Server selbst läuft noch auf PHP4 bei 1&1.

Das Script um die Datei auszulesen und auf unseren Server zu speichern sieht bis dato wie folgt aus:
PHP:
ob_start();
    	
$datei = fopen ('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml', 'rb');
fpassthru($fp);
fclose($fp);
    	
$file = ob_get_contents();
ob_end_clean();
    	
$fp = fopen('http://www.domain.de/lib/text.xml', "wb+");
fwrite($fp, $file); 
fclose($fp);

Wäre nett, wenn mir jemand helfen könnte.
 
PHP:
$datei = fopen ('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml', 'rb');
fpassthru($fp);
Nur mal als Frage.. was ist $fp? Sollte das nicht $datei sein?
 
Nur mal als Frage.. was ist $fp? Sollte das nicht $datei sein?
Tatsächlich – war mein Fehler, danke für den Hinweis. Hab es jetzt noch einmal entsprechend angepasst, die »test.xml« bleibt aber leider weiterhin leer wenn ich das Script aufrufe :(

Hast du schon nachgeschaut, ob allow_url_fopen = on eingestellt ist?
Sorry, habe ich im ersten Beitrag vergessen zu erwähnen, aber allow_url_fopen ist laut phpinfo() auf »on« eingestellt.
 
Wenn du PHP >= 4.3 hast könntest du direkt file_get_contents() verwenden und den ob_* vergessen
 
Danke für den Hinweis – dadurch werde ich meinen Code sicherlich noch etwas optimieren können – ich hab in der Zwischenzeit folgendes gefunden, was soweit auch funktioniert:

PHP:
downloadFile ('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml', 'charges.xml');

function downloadFile($url,$path)
{
	$newfname = $path;
	$file = fopen($url,'rb');

	if($file){
		$newf = fopen($newfname,'wb');

		if($newf){
			while(!feof($file)){
				fwrite($newf,fread($file, 1024 * 8 ), 1024 * 8 );
			}
		}
	}

	if($file){
		fclose($file);
	}

	if($newf){
		fclose($newf);
	}
}
 

Neue Beiträge

Zurück