Announcement

Collapse
No announcement yet.

PHP Skript verursacht Segmentation Fault

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP Skript verursacht Segmentation Fault

    Hallo Leute,

    folgender PHP Code verursacht oft einen "Segmentation Fault" auf unserem Apache Server:

    PHP Code:
                    $xml = new DOMDocument;
                    
    $xml->formatOutput true;
                    
    $xml->load("xml/$hostname.log.xml");
                    
    $elements $xml->getElementsByTagName("*");
                    foreach(
    $elements as $element)
                    {
                        
    $type $element->getAttribute('type');
                        
    $title $element->getAttribute('title');
                        if(
    $type == 'comment' or $title == 'Installed Packages')
                        {
                            foreach(
    $element->childNodes as $item)
                            {
                                if(
    $item->nodeType == 4// XML_CDATA_SECTION_NODE
                                
    {
                                    
    $cdataWrapper $xml->createElement("wrapper"$item->nodeValue);
                                    
    $element->parentNode->appendChild($cdataWrapper);
                                }
                            }
                        }
                    }
                    
    $xsl = new DOMDocument;
                    
    $xsl->load("xml/wrapper.xsl");
                    
    $proc = new XSLTProcessor;
                    
    $proc->importStyleSheet($xsl);
                    print(
    trim($proc->transformToXML($xml))); // --> Might cause a segmentation fault 
    Oft bedeuted hier, dass ich die PHP-Seite drei- bis viermal ohne Probleme laden kann, danach tritt aber der "Segmentation Fault" auf und der sich anschließende HTML-Code (ein HTML-Button) wird nicht mehr geladen, d.h. nach der print-Zeile ist Schluss.

    Ich habe schon einige Varianten probiert, z.B. statt mit "print", habe ich das Ergebnis mit "echo" ohne "trim" ausgegeben. Oder ich habe "usleeps" eingebaut, weil ich ein zeitkritisches Problem vermutete. Das hat aber alles nichts gebracht...

    Ich bin dankbar für jede Idee!

    PS: Das Schleifenkonstrukt dient der nachträglichen Verarbeitung von CDATA-Blöcken, welche ich nicht separat adressieren konnte und daher in Wrapper-Tags eingeschlossen habe.

  • #2
    Zur Info: Habe mittlerweile einen Workaround gefunden, der den Segmentation Fault umgeht:

    PHP Code:
                    $xml = new DOMDocument;
                    
    $xml->formatOutput true;
                    
    $xml->load("xml/$hostname.log.xml");
                    
    $elements $xml->getElementsByTagName("*");
                    foreach(
    $elements as $element)
                    {
                        
    $type $element->getAttribute('type');
                        
    $title $element->getAttribute('title');
                        if(
    $type == 'comment' or $title == 'Installed Packages')
                        {
                            foreach(
    $element->childNodes as $item)
                            {
                                if(
    $item->nodeType == 4// XML_CDATA_SECTION_NODE
                                
    {
                                    
    $cdataWrapper $xml->createElement("wrapper"$item->nodeValue);
                                    
    $element->parentNode->appendChild($cdataWrapper);
                                }
                            }
                        }
                    }
                    
    // WA for segmentation fault starts here ...
                    
    $xml->save("xml/$hostname.wrapper.xml");
                    
    $xml = new DOMDocument;
                    
    $xml->formatOutput true;
                    
    $xml->load("xml/$hostname.wrapper.xml");
                    
    // WA for segmentation fault ends here ...
                    
    $xsl = new DOMDocument;
                    
    $xsl->load("xml/wrapper.xsl");
                    
    $proc = new XSLTProcessor;
                    
    $proc->importStyleSheet($xsl);
                    print(
    trim($proc->transformToXML($xml))); // --> Might cause a segmentation fault 
    Ich greife jetzt nicht mehr direkt auf die veränderte XML-Datei bzw. das veränderte XML-Objekt zurück, sondern speichere das XML unter anderem Namen. Danach lege ich ein neues XML-Objekt an und transformiere es. Es scheint fast so, als ob der Zugriff auf das veränderte XML-Objekte den Speicher korumpiert hat.

    PS: Im W3Schools Forum hat man mir zum Update der PHP- und der XML-Bibliothek geraten, da dieser Fehler ein typischer C-Fehler ist, welcher sich nur schwer debuggen lässt.

    Comment

    Working...
    X