Probleme mit preg_replace_callback

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit preg_replace_callback

    Hallo zusammen

    Ich fange gleich an:
    Mein Pattern:
    Code:
    #<!-- array (.*) -->(((?R)|(.*))*)<!-- /array -->#isU
    Mein HTML
    Code:
        	<h3>Kalender</h3>
    
        	<table cellpadding="4" cellspacing="0" border="0">
        	  <!-- array day -->
        	  <tr>
        	    <td width="50" height="50" align="center">{tag}</td>
    			<!-- array stunden -->
    			<td width="50" height="50" align="center" style="background-color:{bgcolor}; font-size:11px;"><a href="index.php?add=1&day=&hour=">klick</a></td>
    			<!-- /array -->
        	  </tr>
        	  <!-- /array -->
        	</table>
    Was passiert? Apache stürzt ohne Vorwarnung ab und restartet sich selbst, ich bekomme keine Fehlermeldung.

    Das kuriose ist, sobald der HTML Teil kürzer wird, funktionierts einwandfrei!
    Dieser funktioniert zum Beispiel:
    Code:
    <h3>Kalender</h3>
    
        	<table cellpadding="4" cellspacing="0" border="0">
        	  <!-- array day -->
        	  <tr>
        	    <td width="50" height="50" align="center">{tag}</td>
    			<!-- array stunden -->
    			<td width="50" height="50" align="center" style="background-color:{bgcolor}; font-size:11px;"></td>
    			<!-- /array -->
        	  </tr>
        	  <!-- /array -->
        	</table>
    Es stimmt also entweder etwas am Pattern nicht, oder pre_replace_callback macht irgendwas falsch. An den Funktionen liegt es aber nicht.

    Bitte um Hilfe.
    MfG Oli

    PS: In der apache Error log findet man nur, dass es einen error gab, aber nicht wieso und welcher.

  • #2
    Was passiert? Apache stürzt ohne Vorwarnung ab und restartet sich selbst, ich bekomme keine Fehlermeldung.
    krass, oder? das problem hatte ich neulich auch, auch bei der verwendung von (?R) und rekursive aufrufen ... ohne fehlermeldung stehste erst einmal da ... wie ichs damals gelöst hab,
    Das kuriose ist, sobald der HTML Teil kürzer wird, funktionierts einwandfrei!
    ich denke mal, daß sich das system irgendwie tot läuft, bzw. irgendwann kein speicher mehr da ist ... zeig mal die callback-funktion ...

    eventuell läßt sich da was optimieren, du kannst dir ja mal per memory_get_usage (oder so) die daten ausgeben lassen ... vielleicht kannst du die stelle finden, wo er aussteigt ...

    vielleicht liegts auch an etwas ganz anderen ...
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      naja, ich habe letztendlich in der callback funktion eine schleife, die beim aufruf meines Beispiels 45 mal durchläuft.

      PHP-Code:
      function replace_array($ar) {
              
      $pattern '#'.$this->createPattern('open').'(.*?)'.$this->createPattern('close').'#is';

              
      $return '';
              for(
      $i=0;$i<count($this->values[$ar[1]][($this->blockInfo[$ar[1]]['replaceCounter'])]);$i++) {
                  
      $string $ar[2];

                  if(
      preg_match($pattern$string))
                       
      $string $this->parse($string$only=1);
                  foreach(
      $this->values[$ar[1]][($this->blockInfo[$ar[1]]['replaceCounter'])][$i] AS $key => $val) {
                      
      $string str_replace($this->open.$key.$this->close,$val,$string);
                  }
                  
      $return .= $string;
              }
              
              if(
      $this->blockInfo[$ar[1]]['replaceCounter'] < ($this->blockInfo[$ar[1]]['mainCounter'])) {
                  
      $this->blockInfo[$ar[1]]['replaceCounter']++;
              }
              return 
      $return;
          } 
      Verwirrend, ist bestandteil meiner Template Klasse.
      Wie gesagt, die Schleife läuft 45 mal durch. Das ist eigentlich nicht viel, deshalb finde ich das so komisch...

      MfG Oli

      /e: Die foreach anweisung läuft nochmal ca. 3 mal pro Durchlauf.

      Kommentar


      • #4
        Hi Oli,

        wo läuft denn welcher Apache? Windows/Linux, Version? Ich hatte auf SuSE auch mal merkwürdige Abstürze des Apache - eine Update auf die neuste Version hat die Probleme beseitigt ...

        Kommentar


        • #5
          Hi Patrick_PQ,

          Ich verwende immer noch xampp unter windows 98. Ich werde mir aber jetzt mal meine oberfläche selbst zusammenstellen, zumal es inzwischen auch neue versionen von phpmyadmin, php etc. gibt.

          Mal sehen ob ichs hinkriege.

          Kommentar


          • #6
            oki, hab die neueste xampp version installiert, und siehe da, es klappt wunderbar.

            Danke für die HIlfe.

            MfG Oli

            Kommentar


            • #7
              Da bin ich wieder... Selbes Problem.

              Ich habe an meiner Klasse noch ein bisschen rumgefeilt, aber es bleibt.

              Diesmal hab ich die neueste XAMPP Version, immer noch unter win 98SE

              Das Problem ist exakt das selbe, wieder verschwindet der Fehler, sobal ich den HTML Code, der vom rekursiven Pattern gefunden wird, kürze.

              /edit: Genauere Beschreibung:
              Ich habe folgenden HTML Code:
              Code:
              <td class="table_row">{nick}</td>
              <td class="table_row" colspan="5">{date}</td>
              <td class="table_row" width="15%">{klicks}</td>
              <td class="table_row" width="15%">{geschl}</td>
              <td class="table_row" width="15%"><a href="index.php?mode=user&action=profile&id={id}">Details</a></td>
              Apache stürzt ab. Benutze ich folgendes:
              Code:
              <td class="table_row" colspan="5">{date} - {klicks} - {geschl} - {id}</td>
              Dann läufts. Es liegt also nicht an der Menge der Replacements oder sowas, sondern wirklich nur an der Menge des HTML Codes. Ich weiß nicht mehr weiter...
              Meine preg_replace_callback Funktion, wenn es wichtig ist:
              PHP-Code:
              $pattern '#'.$this->_createPattern('open').'(((?R)|(.*))*)'.$this->_createPattern('close').'#isU';
                          
              $string preg_replace_callback($pattern,array(&$this'_replace_array'),$string); 
              Zuletzt geändert von OliOli; 29.01.2005, 14:30.

              Kommentar


              • #8
                das problem ist bekannt ... zeugenaussagen zufolge soll der speicherverbrauch enorm ansteigen und der apache draufhin aussteigen. ich wollte mich demnächst mal aufmachen, eine lösung zu finden. ich sag dann bescheid

                die lösung ist entweder sehr einfach oder sehr kompliziert, mal schauen.
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  Warum tut er mir das an...
                  Finde schnell ne Lösung, ich hab ne Deadline für die Page, die die klasse verwendet...

                  Danke im Vorraus,

                  Oli

                  Kommentar

                  Lädt...
                  X