Internal Server Error wegen Skript?

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

  • Internal Server Error wegen Skript?

    Guten Tag!

    Ich habe festgestellt, dass seit ich meine BBCodes mit der switch-funktion umwandle, erhalte ich bei längeren Zitaten online einen Internal Server Error.

    Hier der Code:
    Code:
    function replacy($string)
    {
          while($old_string != $string)
        {
            $old_string = $string;
            $string = preg_replace_callback('{\[(\w+)((=)(.+)|())\]((.|\n)*)\[/\1\]}U', 
    'bbcode_callback', $string);
        }
        return $string;
    }
    
    function bbcode_callback($matches)
    {
        $tag = strtoupper(trim($matches[1]));
        $inner_string = $matches[6];
        $argument = $matches[4];
    
        switch($tag)
        {
            case 'ZITAT':
                $zitater = $argument ? $argument : $inner_string;
                if ($zitater!=$inner_string) {
                   $replacement = '<div class="quotetop">' . $zitater . '</div>
    <div class="quotemain">' . $inner_string . '</div>';
                } else {
                   $replacement = '<div class="quotetop">Zitat</div>
    <div class="quotemain">' . $inner_string . '</div>';
                }
            break;
        }
    
      return $replacement;
    }
    Lokal auf meinem Rechner funktioniert alles einwandfrei.

    Hat jemand eine Idee, wieso es auf dem Server nicht klappt?
    Der Server ist von dynamic-net.ch

    Vielen Dank für eure Hilfe!
    samic
    Blog: busyboy.ch
    Portfolio: flinkthink.ch

  • #2
    weil wahrscheinlich die Laufzeit begrenzt ist und Dein Script
    etwas länger braucht...
    Bei Risiken und Nebenwirkungen fragen Sie Dr.Alban

    Comment


    • #3
      Hi Arni!

      vielen dank für deine rasche Antwort!

      Kann ich die Laufzeit selber verändern oder müsste das der Hoster für mich machen?
      Blog: busyboy.ch
      Portfolio: flinkthink.ch

      Comment


      • #4
        Die max Execution time kannst du so verändern: set_time_limit(120) --> dein Script würde dann 2 min laufen ehe eine Fehlemeldung geworfen wird.
        Aber ich denke, dass hilft dir nicht weiter, denn ein interner Serverfehler ist was anderes und sollte mit der max Execution time nichts zu tun haben. Denn das ist kein PHP Fehler sondern ein Apache resp IIS Fehler (oder was auch immer du als Server verwendest)

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Comment


        • #5
          Japp. Beiner Überschreitung der Laufzeit müßte eigentlich eine entsprechende PHP-Meldung kommen und kein 500.

          Schau Dir mal die Server-Logs durch. Die müßten Aufklärung bringen.

          Comment


          • #6
            häufiger Fehler für den 500'er ist eine zu tiefe Rekursion !
            TBT

            Die zwei wichtigsten Regeln für eine berufliche Karriere:
            1. Verrate niemals alles was du weißt!


            PHP 2 AllPatrizier II Browsergame

            Comment


            • #7
              Hallo,

              du hast hier nur deine Funktion gepostet aber nicht den Teil wo sie aufgerufen wird, ich vermute dass du in einer Schleife ein Array oder eine Variable immer weiter füllst (vielleicht sogar immer mit sich selbst, dadurch explodiert sowas erst recht) und irgendwann dadurch zuviel Speicher verbrauchst. Das wäre zumindest ein Grund für einen 500er.

              Gruss
              Quetschi
              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
              Schön - etwas Geschichte kann ja nicht schaden.
              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

              Comment


              • #8
                Original geschrieben von Quetschi
                Hallo,

                du hast hier nur deine Funktion gepostet aber nicht den Teil wo sie aufgerufen wird, ich vermute dass du in einer Schleife ein Array oder eine Variable immer weiter füllst (vielleicht sogar immer mit sich selbst, dadurch explodiert sowas erst recht) und irgendwann dadurch zuviel Speicher verbrauchst. Das wäre zumindest ein Grund für einen 500er.

                Gruss
                Quetschi
                Hallo,

                ich tu das mysql_query via Funktion "fetchen". Also:
                Code:
                $result = mysql_query("SELECT * FROM forum_answers WHERE fid=".$_GET['fid']." AND tid=".$_GET['tid']." ORDER BY created ASC");
                   show_answer($result, $land_gif, $chat_wait_time);
                und show_answer:
                Code:
                function show_answer($sqlstr, $land_gif, $chat_wait_time) {
                   while($myrow = mysql_fetch_array($sqlstr)) {
                   echo "<font class=\"normal\">".replacy(smileize(nl2br($myrow['text'])))."</font>";
                  }
                
                }
                Es wurden Code-Zeilen entfernt, der Übersicht halber.

                Komischerweise lief die Funktion replacy so also ich es noch mit preg_replace machte, nur mit switch geht es nicht mehr :-/
                Blog: busyboy.ch
                Portfolio: flinkthink.ch

                Comment


                • #9
                  Eventuell weil die Default Anweisung beim Switch fehlt
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Comment


                  • #10
                    Und die wäre?

                    Ich hab natürlich noch ein:
                    Code:
                            default:    // unknown tag => reconstruct and return original expression
                                $replacement = '[' . $tag . ']' . $inner_string . '[/' . $tag .']';
                                break;
                        }
                    Blog: busyboy.ch
                    Portfolio: flinkthink.ch

                    Comment


                    • #11
                      Genau die meinte ich. Also kann der Fehler auch nicht daran liegen. Momentan weiss ich aber auch nichts weiter...
                      Gruss

                      tobi
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Comment


                      • #12
                        Original geschrieben von jahlives
                        Genau die meinte ich. Also kann der Fehler auch nicht daran liegen. Momentan weiss ich aber auch nichts weiter...
                        Gruss

                        tobi
                        natürlich liegt es daran!
                        Code:
                        default:    // unknown tag => reconstruct and return original expression
                                    $replacement = '[' . $tag . ']' . $inner_string . '[/' . $tag .']';
                                    break;
                            }
                        er ersetzt oben doch so lange, wie es kein match mehr gibt
                        Code:
                        while($old_string != $string)
                        {
                                $old_string = $string;
                                $string = preg_replace_callback('{\[(\w+)((=)(.+)|())\]((.|\n)*)\[/\1\]}U', 'bbcode_callback', $string);
                        }
                        was passiert wohl, wenn er einen falschen Tag immer wieder herstellt?
                        Er hat immer wieder einen Treffer durch das preg_match, verläßt also nie das while
                        TBT

                        Die zwei wichtigsten Regeln für eine berufliche Karriere:
                        1. Verrate niemals alles was du weißt!


                        PHP 2 AllPatrizier II Browsergame

                        Comment


                        • #13
                          hmm...

                          Stimmt! Aber wie ändere ich das jetzt am Besten?

                          Die Unbekannten Tags einfach entfernen, also so?
                          PHP Code:
                          default:    // unknown tag => reconstruct and return original expression
                                      
                          $replacement '. $inner_string . ';
                                      break;
                              } 
                          oder wie würdest du das machen?!
                          Blog: busyboy.ch
                          Portfolio: flinkthink.ch

                          Comment


                          • #14
                            Habs ürigens gerade so geändert und funktioniert auch nicht
                            Blog: busyboy.ch
                            Portfolio: flinkthink.ch

                            Comment


                            • #15
                              Zur Not speichere den "ungültigen" bbCode in einem Array und ersetze [gibtsnicht] und [/gibtsnicht] durch *&/()ID des "ungültigen" bbCodes im Array*&/() bzw. )(/&*ID des "ungültigen" bbCodes im Array)(/&*

                              Nach der Schleife mascht du die Ersetzungen wieder rückgängig
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Comment

                              Working...
                              X