hkl: PHP4 XSLT Seg Fault

Hallo !

hab ein Problem mit den XML/XSLT Modulen unter PHP4
( PHP 4.3.10-18 ( cli ) und 4.3.11 ( cgi ) )

Mein Skript soll xsl-transformieren (xml->xhtml)
und im Ergebnisbaum einen Zweig ersetzen, also etwa
so:

<?php
$_xmldoc = domxml_open_file("simple.xml");
$xsldoc = domxml_xslt_stylesheet_file ("simple.xsl");
$xmldoc = $xsldoc->process($_xmldoc);
$nodes = $xmldoc->get_elements_by_tagname('baz');

$baz_tree = $nodes[0];

$dummy_tree = $xmldoc->create_element('dummy');

$baz_tree->replace_node($dummy_tree);

print $xmldoc->dump_mem();

?>

Das klappt wenn es wirklich sehr simple Dateien
handelt:

simple.xml

<?xml version="1.0" encoding="utf-8"?>
<foo>
 <bar>
  <baz></baz>
 </bar>
</foo>

simple.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">

<xsl:output
  method="xml"
  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
  encoding="utf-8"
  indent="no"/>

<xsl:template match="/">
  <xsl:copy-of select="." />
XSLT mit PHP4 - Seg Fault mit DOM XML
</xsl:template>

</xsl:stylesheet>

Wenn ich das aber mit einem komlexeren Sytesheet
und realen Daten ( komplexer, aber mengenmaessig
wenig - nur ca 20 zeilen ) versuche, gibt's ein Segmantation fault.

  • und zwar anscheinend wenn das Skript beendet
    wird - bis dahin klappen alle Testauschriften.

Das kenn ich sonst von MS ATL/COM - wenn man
innerhalb eines Blocks "CoUnitialize()" aufruft,
"stehen" die SmartPointer ploetlich in der Luft
und die Destruktoren greifen ins Leere.
Vieleicht ist das hier ja aehnlich gelagert ?!?

Aber :

  • warum klappt's mit kurzen Skripten ?
  • und vor allem : koennte man die Ressourcen
      denn im BLock ueberhaupt irgendwie explizit
      freigeben ?
      Bin kein PHP Experte; muss das nur machen
      um das XSL einzubinden

Fuer mich wirft das ernste systemische Fragen auf

  • dazu werde ich noch 'nen Artikel zu
    Programmiertechnik ( weiss nicht wo sonst )

Leider kann ich an der Zielplatform nun wirklich
nichts aendern ( Sourceforge.net Webservice°°)

Waere toll wenn jemand eine Tip haette !!!

Danke fuer's Lesen
und Gruss

Holger

P.S.: Geht um eine Website fuer eine freie Software
die ich bald online bringen moechte da sich sonst
kein Team zusammenfindet.

Insgesamt ist das fuer mich ein aeusserst
unangenehmer Sachverhalt; ich hab das Systemdesign
fuer's erste Release komplett ueberarbeitet.
( Oder abgemagert - die Suchfunktion faellt damit
erst mal weg. )

  1. Waere toll wenn jemand eine Tip haette !!!

    Bevor keiner antwortet...
    ;)

    Einen Tipp habe ich immer, ich empfehle immer Probleme bestmöglich zu isolieren. Ist das Problem einwandfei identifiziert, so hilft oft eine Webrecherche zusammen mit dem genauen Wortlaut der Fehlermeldung. Oft genug ist es schlichtweg ein Bug. Leider. Dann kommt der _WORKAROUND_. LOL

    Gut isolierte Probleme haben auch eine gute isolierte Chance hier schnell beantwortet zu erden.   ;)

    1. Hallo !

      Einen Tipp habe ich immer, ich empfehle immer Probleme bestmöglich zu isolieren.

      Das habe ich hier doch getan. Mehr entlasten kann ich den
      Code wohl nicht mehr, oder ?

      Gruss

      Holger

      P.S: Was war'n das ? :-)

      1. Einen Tipp habe ich immer, ich empfehle immer Probleme bestmöglich zu isolieren.

        Das habe ich hier doch getan. Mehr entlasten kann ich den
        Code wohl nicht mehr, oder ?

        Nun, Du schreibst:
        "
        Wenn ich das aber mit einem komlexeren Sytesheet
        und realen Daten ( komplexer, aber mengenmaessig
        wenig - nur ca 20 zeilen ) versuche, gibt's ein Segmantation fault.

        • und zwar anscheinend wenn das Skript beendet
          wird - bis dahin klappen alle Testauschriften.
          "

        Da wäre es ja schon Deine Aufgabe gewesen genau den Punkt zu treffen, wann die Fehlermeldung hochkommt. Ich meine zu wissen, was Du Dir vielleicht denkst, Du denkst, dass da vielleicht ein bekannter Fehlertyp vorliegt, den jemand im Forum hier mehr oder weniger zufällig benennen kann.

        Ausserdem kann ich mich nicht erinnern irgendwo den genauen Wortlaut der Fehlermeldung gelesen zu haben.

        Dann schreibst Du etwas von "realen Daten", was für mich darauf hindeutet, dass wenn Du die Testumgebung verlässt und Daten - sagen wir einfach mal Produktionsdaten - verarbeitest, dass erst dann der Fehler hochkommt. Nun, wenn es nur "20 zeilen" sind, dann könntest Du doch den genauen Punkt erwischen, oder? Liegts vielleicht an der Kodierung? Und warum nimmst Du nicht bspw. den XMLSpy (kostenfrei in der Evalu) und reproduzierst die XSLTransformation?

        Also alles in allem, ich meine es durchaus ernst, wenn ich Dir etwas schreibe, auch wenn es mal etwas verschlüsselt wirkt.

        1. Hallo !

          Da wäre es ja schon Deine Aufgabe gewesen genau den Punkt zu treffen, wann die Fehlermeldung hochkommt.

          Das war es ja gerade !

          Wenn ich in der der letzten Codezeile ( also vor dem
          "?> eine testausschrift mache, klappt die.
          Es knallte in den (impliziten) Destruktoren, nicht im sichtbaren Code. Hatte ich aber auch so beschrieben.

          Ich meine zu wissen, was Du Dir vielleicht denkst,

          Ach ja ? Potzblitz !

          Du denkst, dass da vielleicht ein bekannter Fehlertyp vorliegt, den jemand im Forum hier mehr oder weniger zufällig benennen kann.

          Genau darauf hab ich gehofft - nachdem ich tagelang Doku
          gesichtet und rumgetestet habe.

          Warum fuehrst Du das eigentlich an ?

          Dass jemand mein komplettes Stylesheet (ca 500 Zeilen ) nimmt und damit rumtestet moechte ich ganz gewiss nicht. Soviel Arbeit soll sich ein Dritter damit nicht machen !

          Ausserdem kann ich mich nicht erinnern irgendwo den genauen Wortlaut der Fehlermeldung gelesen zu haben.

          "Segmentation Fault" - mehr gab's nicht !
          Da gibt's auch selten mehr...

          Nun, wenn es nur "20 zeilen" sind, dann könntest Du doch den genauen Punkt erwischen, oder? Liegts vielleicht an der Kodierung? Und warum nimmst Du nicht bspw. den XMLSpy (kostenfrei in der Evalu) und reproduzierst die XSLTransformation?

          20 Zeilen in der xMl -Datei.
                            =

          Das Stylesheet hab ich vor dem Posting durch alle
          XSLT-Prozessoren gejagt, derer ich - unter UNIX - habhaft werden konnte - der Fehler trat nur bei
          PHP4/DOMXML auf.
          Aber gerade das ist nun mal meine Zielplatform.

          ---

          Es mag ja oft auf meine Artikel zutreffen, was du hier anfuehrst.

          Aber in diesem Falle wohl kaum.

          Gruss

          Holger

          P.S.: Desweiteren kann ich mich nicht entsinnen mich ueber mangelndes Feedback beklagt zu haben.

          1. Das Stylesheet hab ich vor dem Posting durch alle
            XSLT-Prozessoren gejagt, derer ich - unter UNIX - habhaft werden konnte - der Fehler trat nur bei
            PHP4/DOMXML auf.
            Aber gerade das ist nun mal meine Zielplatform.

            OK, das habe ich nicht gewusst. Und Du kriegst keine Fehlermeldung, die den Fehler genau benennt und die Fehlerstelle zeigt? Hmm, Du schreibst nein, OK.

            Dennoch würde ich mal XMLSpy mit seinen verschiedenen Parsern (ich glaube es sind zwei ;) darauf loslassen.

            Die Parser verhalten sich - ähnlich wie die Browser - leider alle ein wenig unterschiedlich. LibXML ist ein validierender Parser, sind andere Parser, die den Job ohne zu Meckern getan haben auch validierend?

            Naja, egal, wir kriegen den Fehler eben nicht zu packen.   ;)

            Hey, stell doch mal das XML und den Style online, ich schaus mir mal an. (Und ich meine jetzt die "20 zeilen". ;)

  2. Hatte das heute versehentlich an in einen anderen Thread dieses Forums gepostet :

    [link http://forum.de.selfhtml.org/?t=140575&m=913856@title="Hotfix PHP4.3.1x DOMXML XSLT Problem"]

    Sorry

    Holger