PHP XML Datei auf Inhalt überprüfen!

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hallo Leute

Gibt es eine Möglichkeit eine XML auf vorhandensein von Inhalt zu überprüfen? und falls leer also absolut nichts drin steht eine Ersatzdatei zu laden?

Also..

1. Es liegt eine XML auf einem fremden Server
2. Die ist leider hin und wieder komplett leer

Nun möchte ich ...

1. Wenn die XML komplett leer ist, eine Ersatzdatei von meinen Server laden.
2. Wie mache ich das?

So geht es leider nicht...
PHP:
//vorher wird natürlich auf Erreichbarkeit geprüft! 
//das hier ist jetzt nur eine stark gekürzte Fassung um mein Problem zu zeigen.
 
$xml = 'http://www.server/datei.xml';
 
 if (file_get_contents($xml) && !empty($xml)) {
   include ('mein_server/ersatz_xml_verarbeitung.inc.php');
}
else {
//fremde xml ist ok! dann geht es hier weiter
}

Danke.
 
Das Ergebnis von file_gets_contents in ne Variable laden und prüfen ob diese Leer ist oder False zurückgibt.

Das prüft aber nicht ob die XML konform ist, nur ob sie leer ist...

PHP:
$xml = 'http://www.server/datei.xml';
$content =  file_get_contents($xml);

// er lädt die failover datei nur dann wenn der inhalt der $xml leer ist 
// oder der rückgabewert von file_gets_contents false ergibt (weil die datei z.B. net gefunden wurde)
if (empty($content) || $content==false) {
   include ('mein_server/ersatz_xml_verarbeitung.inc.php');
}
else {
//fremde xml ist ok! dann geht es hier weiter
}

Habs net probiert aber so könnte es gehen...
 
Zuletzt bearbeitet:
Oder mit FileSize die Dateigröße auslesen.
Leere Dateien sind bekanntlich 0 Byte oder nur 4 Byte (je nach System) groß.

Ergänzung:
Mein Fehler: die Datei liegt ja auf einem anderen Server.
 
Geht nicht, ich bekomme jetzt derartige Meldungen auf den Schirm.

PHP:
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: 
Entity: line 2: parser error : Start tag expected, '<' not found in /home/www/test.php on line 17
 
Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]:
in /home/www/test.php on line 17
 
//die Test.php enthält jetzt halt einen XML link zu einer komplett leeren xml zum testen.
 
Ähm... das wird so nix, zeig doch mal bitte das komplette Script, das man deinen Ablauf nachvollziehen kann...

Nachtrag:
Hab das Script eben getestet, funktioniert 1a. Du musst noch nen anderen Fehler haben.
Wie gesagt, er prüft NICHT ob die File eine XML ist, nur ob sie da ist und ob sie auch nicht leer ist.

Das funktioniert mit meinem Beispiel tadellos.

PHP:
<?php

$xml = 'http://localhost/text.xml';
$content =  file_get_contents($xml);

// er lädt die failover datei nur dann wenn der inhalt der $xml leer ist 
// oder der rückgabewert von file_gets_contents false ergibt
// (weil die datei z.B. net gefunden wurde)

if (empty($content) || $content==false)
{
   echo 'Externe File leer / nicht gefunden, lade alternative';
}
else
{
   echo 'Externe File gefunden und befüllt, ab die Post';
}  

?>
 
Zuletzt bearbeitet:
Ja und der Fehler lag darin das die .xml mit BOM gespeichert war, scheiß Notepad. Danke, es funktioniert wunderbar.
Ergänzung ()

Nochwas: Ihr seid einfach Spitze, man bekommt sofort Hilfe und auch alle Leute allgemein sehr nett und freundlich, vielen Dank..das sieht woanders ganz anders aus, da muss man sich meistens Belehrungen anhören usw. da vergeht einem sofort die lust an allem, hier ist das nicht der Fall was ich wirklich sehr gut finde.
 
Kein Problem =)
 
Zurück
Oben