Ankündigung

Einklappen
Keine Ankündigung bisher.

Gibt es sowas wie sporadische Fehler bei php?

Einklappen

Neue Werbung 2019

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

  • Gibt es sowas wie sporadische Fehler bei php?

    Hallo Zusammen,

    meine Frage steht ja eigentlich schon in der Überschrift. Als kann Php sporadisch mal ne Zeile nicht parsen, oder sonstige Fehler machen ohne dass eine Neldung kommen würde?

    Folgender Hintergrund:

    Ich hab mit php ein Newsletter-Verwaltungstool gebaut. Eigentlich funktioniert auch alles soweit und wie ich des will, wären da nicht sporadische Fehler, die mich in den Wahnsinn treiben: z.B. Mails werden an die falsche E-Mail-Adresse geschickt, als würde er einfach eine clear-Zeile überspringen...
    Oder als letzten Fehler hatte ich in einer Mail dann 20 Zeilenümbrüche drin, wo ich mir nicht erklären kann, wo die her kommen sollen!?


    Danke schonmal für die Antworten.

    Gruß Plunty


  • #2
    Sofern kein Hardwarefehler vorliegt, schließe ich das mal aus.

    Hinweis: Bei mir schleichen sich öfters mal sporadisch Fehler in den PHP-Code ein

    Kommentar


    • #3
      Würde ich auch Bestätigen... zumindest soweit immer die gleichen Konstellationen vorliegen.

      Du kannst ja mit PHP auch mit dynamischen Werten arbeiten.
      Abhängig davon wie du es programmiert hast, kann dein Script durchaus mal auf die nase fallen, wenn ein Wert drin ist, was du nicht berücksichtigt hast.

      Man sollte auch die Servergrenzen berücksichtigen... besonders "tötlich" wenn man kein error_reporting an hat.

      Z.B. Gewisse Anbieter, haben die Abfragen z.B. für gleichzeitige SQL Abfragen reichlich arg begrenzt.

      Übertriebenes Beispiel:
      Maximale Abfragen liegen bei 20.
      Dein Script fragt nun aber 25 Felder ab... die ersten 20 Felder sind gefüllt... die restlichen 5 bleiben leer.

      Du rufst dann ne andere Seite auf, wo aber nur 19 Abfragen kommen = und alles klappt.

      Gibt es sowas wie sporadische Fehler bei php?
      Prinzipell gesat würde ich aber auch auf nein tendieren.
      PHP macht nur das, was du gesagt hast. (HDD/RAM Fehler mal generell weggelassen, da nichts mit PHP zu tun hat)

      Kommentar


      • #4
        Zitat von noop Beitrag anzeigen
        Dein Script fragt nun aber 25 Felder ab... die ersten 20 Felder sind gefüllt... die restlichen 5 bleiben leer.
        So was gibts? Kommt mir komisch vor! Die maximale Anzahl an Abfragen hat nichts mit der Anzahl der Spalten zu tun! Und nur weil die Anfragen nicht gleichzeitig abgearbeitet werden heißt es nicht, dass sie gar nicht abgearbeitet werden. Es dauert halt dann bissl länger bis eine andere fertig geworden ist.

        Kommentar


        • #5
          Schickst du die Mails mit PHPmailer oder hast du Header selbst gebaut?

          Sind das Nur-Text-Mails oder sendest du Multipart text/html? Wie sind die zu sendenden Templates gespeichert und wie werden variable Werte eingefügt? WOher sollen zusätzliche Zeilenumbrüche kommen?

          Wieviele Zeilen liest du aus deiner Usertabelle aus und wie sieht die Schleife aus?
          PHP-Code:
          if ($var != 0) {
            
          $var 0;

          Kommentar


          • #6
            Naja, ich würde versuchen wie man den Fehler immer reproduzieren kann. Dann Ausgaben im Script einbauen und schauen an welcher Zeile es liegt. So habe ich in den letzten 10 Jahren jeden Fehler gefunden.

            Wieso kommst du nicht auf so einfache Ideen?

            Kommentar


            • #7
              Sind das Nur-Text-Mails oder sendest du Multipart text/html? Wie sind die zu sendenden Templates gespeichert und wie werden variable Werte eingefügt? WOher sollen zusätzliche Zeilenumbrüche kommen?

              Wieviele Zeilen liest du aus deiner Usertabelle aus und wie sieht die Schleife aus?
              Ich verschicke die Mails mit Php- Mailer und es sind reine text- mails. Die Variablen Werte stammen aus einem Array, das vorher durch eine For-Schleife gefüllt wurde...

              Code:
              while($row2 = mysql_fetch_array($result2)){
              
              $abfr_mail = "Select * FROM `empfaenger` WHERE `e_id` = '".row2['e_id']."'";
                      $result3 = mysql_query($abfr_mail);
                      $row3 = mysql_fetch_array($result3);
                      
                      $empfaenger= $row3['e_mail'];
                      $anrede_e = $row3['anrede'];
                      $empfaengername = $row3['name'];
                      $e_id = $row3['e_id'];
                      
                       
                      //Text der EMail setzen
                      $mail->Body = "$text";    
                  
              
                      $mail->AddAddress($empfaenger);
                  
                      
                      //EMail senden und überprüfen ob sie versandt wurde
                      if(!$mail->Send()){
                          //$mail->Send() liefert FALSE zurück: Es ist ein Fehler aufgetreten
                          echo "Die Email konnte nicht gesendet werden";
                          echo "Fehler: " . $mail->ErrorInfo;
                      }
                      else{
                       
                          echo "Die Email wurde an "; echo $empfaenger; echo " von$mailcheck versendet.<br/>";
                   
                              
                          $liste[$x++] = $empfaenger;  <-- hier wird das Array gefüllt!
                      }
              
              
              
                      $mail->ClearAllRecipients();
                      //Absenderadresse der Email setzen
                      
                    
              
              }
              So wird das Array gefüllt...Falls aus irgendend einem Grund nichts in $empfännger drinstehen würde, würde ich ja eine Fehlermeldung beim versenden bekommen....

              Code:
              for($i=0;$i<$x;$i++){
                      $text= $text."\n".$liste[$i];
                  }
              Mit dieser Schleife wird das Array später ausgelesen und in eine E-Mail eingefügt. Da könnten theoretisch die Umbrüche her kommen, wenn das Array leere Felder hätte, aber das ist eigentlich nicht möglich, da ja wie oben zu sehen, dass Befüllen an das Versenden gekoppelt ist?

              Wieso kommst du nicht auf so einfache Ideen?
              Weil ich den Fehler nicht reproduzieren kann. Deswegen auch die Frage von sporadischen Fehlern.

              Danke für eure Antworten...

              Kommentar


              • #8
                So was gibts? Kommt mir komisch vor! Die maximale Anzahl an Abfragen hat nichts mit der Anzahl der Spalten zu tun! Und nur weil die Anfragen nicht gleichzeitig abgearbeitet werden heißt es nicht, dass sie gar nicht abgearbeitet werden. Es dauert halt dann bissl länger bis eine andere fertig geworden ist.
                Wenn die Daten einzeln (mit nem gefakten threading parallel) geholt werden?

                Kommentar


                • #9
                  lol ^^

                  Aber dann werden trotzdem alle Abfragen ausgeführt, wenn auch nicht gleichzeitig.

                  Kommentar


                  • #10
                    Spontan ...

                    PHP-Code:
                            $abfr_mail "Select * FROM `empfaenger` WHERE `e_id` = '".row2['e_id']."'";
                            
                    $result3 mysql_query($abfr_mail);
                            
                    $row3 mysql_fetch_array($result3); 
                    Für derlei Konstrukte gibt es Joins -> Einführung in Joins. Ich gehe einfahc mal davon aus das $row2 ebenfalls Daten aus einer MySQL Datenbank enthält.

                    Außerdem:
                    PHP-Code:
                    for($i=0;$i<$x;$i++){
                            
                    $text$text."\n".$liste[$i];

                    Welchen Wert hat $x? count($liste) oder etwas anderes?

                    z.B. Mails werden an die falsche E-Mail-Adresse geschickt, als würde er einfach eine clear-Zeile überspringen...
                    Falsche e_id in der Datenbank? Der Parser überspringt sicherlich keine Zeile.

                    PHP-Code:
                      $liste[$x++] = $empfaenger;  <-- hier wird das Array gefüllt
                    Seltsam. Deine For-Schleife erzeugt die Variable $text aus dem Array $liste aber das Array $liste wird erst in der While-Schleife erzeugt wo $text versendet werden soll?
                    "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                    Kommentar


                    • #11
                      ist das der original code ?
                      -->
                      $abfr_mail = "Select * FROM `empfaenger` WHERE `e_id` = '".row2['e_id']."'";

                      Kommentar

                      Lädt...
                      X