preg_match_all - Begrenzung?

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_match_all - Begrenzung?

    Gibt es bei der Funktion preg_match_all so etwas eine Begrenzung, die zur Inputs bestimmter Länge zulässt?

    Hab nämlich in einer XML-Datei eine Art Datei-Hierarchie gespeichert, die ich auslesen lassen möchte. Sobald sie jedoch eine Bestimmte Größe hat (13892 Zeichen) gibt er einfach auf, und gibt ein leeres Array zurück.

    Das Skript wird jedoch nicht wegen einem Timeout beendet - die Dauer beträgt nur etwa 5 Sekunden!

  • #2
    hi,

    kann es sein das du speicher probleme bekommst? ich bin mir nicht sicher aber bei einer entsprechenden komplexität der regex kann ich mir das gut vorstellen.

    aber mal was anderes : wenn du schon xml hast, warum benutzt du es dann nicht auch wie vorgesehen (xpath, simplexml, sablotron...)?


    gruss
    Sike

    Kommentar


    • #3
      Speicherprobleme

      Meinst du, dass die 8 MB (Standard) verbraucht sind? Ich weiß nicht, wie er dann reagiert, aber eine Fehlermeldung kommt jedenfalls nicht.

      Die Funktionen kannte ich bis jetzt noch nicht, aber soweit ich das bis jetzt aus dem manual herauslesen konnte, sind die nicht ohne Probleme.

      Kommentar


      • #4
        Angenommen mein Dokument sieht ungefähr so aus:

        Code:
        <?xml version="1.0" encoding="iso-8859-15" ?>
        
        <bildergalerien>
        
        	<jahr>
        
        		<name>2003</name>
        
        		<galerie>
        
        			<name>galerie_1</name>
        
        			<bild src="a1" />
        
        			<bild src="a2" />
        
        			<bild src="a3" />
        
        		</galerie>
        
        		<galerie>
        
        			<name>galerie_2</name>
        
        			<bild src="b1" />
        
        			<bild src="b2" />
        
        			<bild src="b3" />
        
        		</galerie>
        
        	</jahr>
        
        	<jahr>
        
        		<name>2004</name>
        
        		<galerie>
        
        			<name>galerie_1</name>
        
        			<bild src="a1" />
        
        			<bild src="a2" />
        
        			<bild src="a3" />
        
        		</galerie>
        
        		<galerie>
        
        			<name>galerie_2</name>
        
        			<bild src="b1" />
        
        			<bild src="b2" />
        
        			<bild src="b3" />
        
        		</galerie>
        
        	</jahr>
        
        </bildergalerien>
        Wie holt man sich jetzt die Infos? Die tagnames weiß ich wie man kriegt, aber mir fehlt der Durchblick. Im Manual ist das Ganze ja auch nicht wirklich gut dokumentiert.

        Wenn ihr euch die Mühe macht und den Code für oben, oder nur zu einem kleineren Beispiel postet, wäre mir sehr geholfen!

        Kommentar


        • #5
          Wenn du php4 verwendest, kannst du die xml_ Funktionen verwenden.
          siehe http://de.php.net/manual/de/ref.xml.php

          Wenn du php5 verwendest, lohnt sich ein Blick auf SimpleXML.
          siehe http://de.php.net/manual/de/ref.xml.php
          [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
          [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
          [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

          © Harald Schmidt

          Kommentar


          • #6
            XML - Objektorientiert?

            Hab's bisher nur mit den DOM-XML-Funktionen probiert und da hab ich's net geschafft. Mit den XML-Parser-Funktionen gings fast leicht :-)


            Hab trotzdem noch ein Problem:
            Warning: xml_parse(): Unable to call handler () in /home/oliver/public_html/werkstatt/test2.php on line 35


            Das gibt er aus, wenn ich die Callback-Funktionen zusammen mit den XML-Funktionen in eine Klasse stopfe, die so aussieht (gekürzt):

            Code:
            class xml
            
            {
            
            	var $depth = array();
            
            	var $jahre;
            
            	var $bilder;
            
            	var $galerien;
            
            
            	function xml()
            
            	{
            
            		//XML-Datei einlesen und bearbeiten
            		$data = file_get_contents('galerien.xml');
            
            		$data = str_replace("\t", '', $data);
            
            		$data = str_replace("\n", '', $data);
            
            
            		//XML-Parser-Funktionen
            		$xml_parser = xml_parser_create();
            
            		xml_set_character_data_handler($xml_parser, $this->characterData);
            
            		xml_set_element_handler($xml_parser, $this->startElement, $this->endElement);
            
            		xml_parse($xml_parser, $data); //Zeile 35, hier soll der Fehler sein
            
            		xml_parser_free($xml_parser);
            
            
            		echo 'Fertig.';
            
            	}
            
            
            	function startElement($parser, $tag, $attribute)
            
            	{
            
            		//Callback-Funktion
            
            	}
            
            
            	function endElement($parser, $name)
            
            	{
            
            		//Callback-Funktion
            
            	}
            
            
            	function characterData($parser, $data)
            
            	{
            
            		//Callback-Funktion
            
            	}
            
            }
            Im Manual steht, dass man statt einem String, der dem Namen der Callback-Funktion entspricht auch ein Array verwenden kann. Mach ich das so richtig?? Oder liegt der Fehler vielleicht doch in Zeile 35? Wenn ich die xml_set_xyz-Funktionen herausnehme, gibt es keine Fehlermeldungen.

            Vielen Dank für euere Hilfe!

            Kommentar


            • #7
              Hat sich erledigt. Wusste nur nicht, dass man Callback-Funktionen in einer Klasse auf eine bestimmte Weise ausführt.

              Für obigen Code wäre das:
              Code:
              xml_set_character_data_handler($xml_parser, array(&$this, 'characterData'));
              
              xml_set_element_handler($xml_parser, array(&$this, 'startElement'), array(&$this, 'endElement'));

              Kommentar


              • #8
                und das funktioniert? bei mir haut so was nicht hin!? mein parser liefert gar nichts zurück!

                Kommentar


                • #9
                  @php-guenther: bitte diskutiere dein problem in deinem thread, und trage es nicht quer durchs ganze forum.

                  *close*
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar

                  Lädt...
                  X