Hallo,

Afgelopen weken ben ik bezig geweest met een socket server in PHP en een client in flash, waarbij er telkens XML wordt verstuurd van de client naar de server en omgekeerd. Het werkt erg goed, alleen af en toe crasht de server omdat er corrupte XML gestuurd wordt vanuit de client. Ik krijg hierdoor een Fatal error:

PHP Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in *****\socket.php:42
Stack trace:
#0 *****\socket.php(42): SimpleXMLElement->__construct('<xml')
#1 *****\socket.php(211): calculate_data(Array, Resource id #10, '<xml')
#2 {main}
thrown in *****\socket.php on line 42

Line 42 is:
<?php
$xml = new SimpleXMLElement($xmldata);
?>

De oorzaak van de corrupte XML is mij niet duidelijk, maar ik weet wel dat de error komt door de SimpleXMLElement()-functie. Groot gelijk heeft deze functie dan, want de XML is niet compleet.

Nu is mijn vraag: Weet iemand toevallig of er een functie bestaat die aan kan tonen of XML corrupt is of niet, zodat de server niet hoeft te crashen?

Met vriendelijke groet,

Nick
Het aanmaken mislukt omdat de XML niet goed is. Jij kunt toch controleren of het aanmaken lukt? Een simpele try-catch is voldoende, bij mislukken komt er namelijk een exeption, zie de handleiding.

Edit:
<?php
try {
$xml = new SimpleXMLElement($xmldata);
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
?>
Och, dat ik hier nog niet aan gedacht had. Ik zit al 2 dagen moeilijk te doen om iets te fixen! Erg bedankt voor deze simpele oplossing :P!

mvg

Nick

Edit:
Wow! Als ik errors krijg, krijg ik ze in vlagen! Er is dus echt ergens nog iets mis, maar dat is nu nog niet van belang. Mijn server crasht in ieder geval niet meer! Nogmaals bedankt
Tja, het is allemaal zo simpel, je moet alleen wel heel simpel blijven denken. Zodra je moeilijk gaat doen, weet je dat je fout bezig bent.

KISS: Keep It Short and Simple.

Reageren