Fabian St.: Zugriff auf Fehlermeldung von DomDocument->schemaValidate()

Hi!

Ich benutze obige Methode aus der DomDocument-Klasse, um ein dynamisch erstelltes XML-Dokument gegen ein XML-Schema zu validieren.
Wenn ein Fehler bei Validierung auftritt, so wird ein »Warning« mit z.B. folgender Meldung erzeugt:

Warning: DOMDocument::schemaValidate() [function.schemaValidate]: Element 'ramsize', attribute 'unit': [facet 'enumeration'] The value 'test' is not an element of the set {'KB', 'MB', 'GB'}. in /home/fabi/public_html/praktikum/xml/php/functions.inc.php on line 90

Gibt es nun eine Möglichkeit, irgendwie auf diese Meldung zuzugreifen, d.h. z.B. in eine Variable schreiben zu lassen? Am besten wäre es, wenn darin wirklich nur der Teil ab »Element ...« enthalten wäre. Die Konfigurationsdirektive »track_errors« (--> $php_errormsg) steht auf off und ich kann diese leider auch nicht ändern.

Auch Beschreibung  im Manual hilft mir bei diesem Problem nicht recht viel weiter ...

Für Hilfe wäre ich sehr dankbar :-)

Grüße,
Fabian St.

  1. Hallo Fabian,

    Die Konfigurationsdirektive »track_errors« (--> $php_errormsg) steht auf off und ich kann diese leider auch nicht ändern.

    Warum nicht? track_errors ist in PHP_INI_ALL änderbar - kann also auch per ini_set() direkt im Script gesetzt werden.

    Grüße aus Nürnberg
    Tobias

    1. Hi Tobias!

      Die Konfigurationsdirektive »track_errors« (--> $php_errormsg) steht auf off und ich kann diese leider auch nicht ändern.
      Warum nicht? track_errors ist in PHP_INI_ALL änderbar - kann also auch per ini_set() direkt im Script gesetzt werden.

      Weil ini_set() zusammen mit einigen anderen Funktionen in »disable_functions« drinnen steht.

      Bei dem ganzen handelt es sich um eine Embedded-Anwendung, bei der auf viele schöne Sachen verzichtet werden muss.

      Weitere Hinweise sind willkommen ;-)

      Grüße,
      Fabian St.

      1. Hallo Fabian,

        Weil ini_set() zusammen mit einigen anderen Funktionen in »disable_functions« drinnen steht.

        wer mach denn sowas? :-)

        Bei dem ganzen handelt es sich um eine Embedded-Anwendung, bei der auf viele schöne Sachen verzichtet werden muss.

        wichtige Funktionen abschalten, aber Funktionen verwenden über denen im Handbuch "no version information, might be only in CVS" steht - tststs ... ;-)

        Weitere Hinweise sind willkommen ;-)

        mhh ... als sehr schmutziger Trick könntest du die Ausgabe während dem Funktionsaufruf puffern, also vor dem Aufruf der Funktion ein ob_start() und danach ein ob_get_contents() und ob_end_clean()

        Grüße aus Nürnberg
        Tobias

        1. Hi Tobias!

          Weil ini_set() zusammen mit einigen anderen Funktionen in »disable_functions« drinnen steht.
          wer mach denn sowas? :-)

          Keine Ahnung ;-) Das waren zumindest die Vorgaben, die ich im Praktikum bekommen habe. Aber egal, ich werde morgen noch mal ein ernstes Wort mit meinem Betreuer reden *g*

          Bei dem ganzen handelt es sich um eine Embedded-Anwendung, bei der auf viele schöne Sachen verzichtet werden muss.
          wichtige Funktionen abschalten, aber Funktionen verwenden über denen im Handbuch "no version information, might be only in CVS" steht - tststs ... ;-)

          Nunja, diese ganzen XML, XSLT und DOM Sachen brauche ich bei diesem Projekt am meisten und die vorhandene PHP-Version wurde auch mit kaum mehr Unterstützung kompiliert. Der »Configure Command« in der phpinfo() zeigt beinahe nur so Sachen wie '--disable-XXX' ;-)
          Auch interessant ist bei dieser Sache vielleicht, dass hier nicht der Apache sondern appWeb zum Zuge kommt.

          Weitere Hinweise sind willkommen ;-)
          mhh ... als sehr schmutziger Trick könntest du die Ausgabe während dem Funktionsaufruf puffern, also vor dem Aufruf der Funktion ein ob_start() und danach ein ob_get_contents() und ob_end_clean()

          Das wäre wirklich sehr, sehr unschön... Aber wie gesagt, wenn es sonst keine Möglichkeit gibt, werde ich morgen mit meinem Praktikums-Betreuer reden ... und bei PHP.net einen Bug einreichen: DomDocument->schemaValidate soll gefälligst eine Exception werfen! ;-)

          Grüße,
          Fabian St.