05.09.2008, 09:35
[MyBB 1.4]
Hi Leutz,
stehe grad vor einem Problem, und habe entweder einen Denkfehler drin, oder seh den Fehler vor lauter Code nicht
Grundidee:
Ich möchte nen Script erstellen, dass es bestimmten Usern aus meinem Forum erlaubt, spezielle Dateien hochzuladen. Diese Dateien besitzen einen XML-Header, den ich auslesen und auswerten will. Soweit so gut.
Aktueller Code:
Das Problem:
Wenn ich nun eine Datei mit fehlerhaften XML-Header hochlade (syntaktisch nicht korrekt, oder gar nicht vorhanden), so wirft "new SimpleXMLElement($header)" ja einen Fehler (logischerweise). Dieser wird von dem Catch allerdings nicht abgefangen, sondern wird am Ende von MyBB formatiert ausgegeben.
Kann mir jemand sagen, wie ich erfolgreich die Fehler des SimpleXMLElements abfangen kann, one dass mir MyBB dazwischen pfuscht?
(Als ich das Script noch nicht direkt mit MyBB verbunden hatte, wurde der Fehler abgefangen, seitdem ich das aber jetzt in das MyBB integriert habe, funktioniert das Ding nicht mehr )
MfG Zwoetzen
EDIT:
Was ich gerade festgestellt habe:
Obwohl vom MyBB den Fehler abzufangen scheint und die Meldungen formatiert ausgibt, scheint trotzdem meine Fehlerbehandlung durchzulaufen, denn das Script reagiert so, wie es reagieren soll:
Datei wird gelöscht,
Meine eigene Fehlermeldung wird erfolgreich für den User ausgegeben.
Hi Leutz,
stehe grad vor einem Problem, und habe entweder einen Denkfehler drin, oder seh den Fehler vor lauter Code nicht
Grundidee:
Ich möchte nen Script erstellen, dass es bestimmten Usern aus meinem Forum erlaubt, spezielle Dateien hochzuladen. Diese Dateien besitzen einen XML-Header, den ich auslesen und auswerten will. Soweit so gut.
Aktueller Code:
PHP-Code:
function upload_track($file) {
/* Zu Beginn wird die Datei auf dem Webspace gespeichert und grundlegende Dinge überprüft. Soll hier aber nicht interessieren.
$upload ist das Array, was von upload_file() [inc/functions_upload.php] zurückgegeben wird */
// Dateiinhalt auslesen
$handle = fopen($upload['path'].'/'.$upload['filename'], 'r');
$content = fread($handle, $upload['size']);
fclose($handle);
// XML-Header der Streckendatei extrahieren
$start = strpos($content, "<header");
$ende = strpos($content, "</header>") + 9;
$header = substr($content, $start, $ende - $start);
// Hier wird dann alles reingeschrieben
$track = array()
// Ausgelesene Daten auswerten
try {
$xml = new SimpleXMLElement($header);
/* Hier lese ich nun die XML-Header-Daten aus und überprüfe diese.
Dabei werfe ich selbst Fehler, wenn etwas nicht stimmen sollte und die Datei somit nicht angenommen werden kann.
Nachfolgend einfach ein Beispiel, wie diese Überprüfungen aussehen */
if ((string) $xml['type'] != "challenge") {
throw new Exception($lang->error_gbxtype, 6);
}
/* [...] */
return $track;
} catch (Exception $e) {
// Irgendwas hat einen Fehler ausgelöst, also löschen wir die ungültige Datei wieder
unlink($upload['path'].'/'.$upload['filename']);
// Fehler zurückgeben
return array(
'error' => $e->getMessage(),
'errorcode' => $e->getCode()
);
}
Das Problem:
Wenn ich nun eine Datei mit fehlerhaften XML-Header hochlade (syntaktisch nicht korrekt, oder gar nicht vorhanden), so wirft "new SimpleXMLElement($header)" ja einen Fehler (logischerweise). Dieser wird von dem Catch allerdings nicht abgefangen, sondern wird am Ende von MyBB formatiert ausgegeben.
Kann mir jemand sagen, wie ich erfolgreich die Fehler des SimpleXMLElements abfangen kann, one dass mir MyBB dazwischen pfuscht?
(Als ich das Script noch nicht direkt mit MyBB verbunden hatte, wurde der Fehler abgefangen, seitdem ich das aber jetzt in das MyBB integriert habe, funktioniert das Ding nicht mehr )
MfG Zwoetzen
EDIT:
Was ich gerade festgestellt habe:
Obwohl vom MyBB den Fehler abzufangen scheint und die Meldungen formatiert ausgibt, scheint trotzdem meine Fehlerbehandlung durchzulaufen, denn das Script reagiert so, wie es reagieren soll:
Datei wird gelöscht,
Meine eigene Fehlermeldung wird erfolgreich für den User ausgegeben.