Patrick: Fatal error: Allowed memory size ...

Hallo

Habe einen Login, der aufeinmal die Fehlermeldung "Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 11520 bytes)" zurück gibt. Woran liegt das und was kann ich tun?

Mit freundlichen Grüssen,
Patrick

  1. hi,

    Habe einen Login, der aufeinmal die Fehlermeldung "Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 11520 bytes)" zurück gibt.

    Woran liegt das

    daran, dass - wie die meldung schon sagte - dein script mehr als die erlaubten 8MB speicher (RAM) braucht.

    und was kann ich tun?

    dein script so umschreiben, dass es weniger speicher belegt.
    z.b. ergebnisse von grossen datenbankabfragen verkleinern/früher wieder freigeben, speicherintensive funktionalitäten wie berechnen von bildern abspecken, etc.

    gruss,
    wahsaga

    1. Hallo

      Hab schon einiges versucht aber funktioniert nichts. So sieht das script aus:
      <?
      /* ########## Login ########## */
      if ($_GET['side'] == "login") {
       if ($_POST['user'] != '' || $_POST['passwort'] != '') { // Benutzername und Passwort wurden eingegeben
        $ergebnis = mysql_query("SELECT * FROM ".$tabelle['models']." WHERE user = '".strtolower($_POST['user'])."'");
        $reihen = mysql_num_rows($ergebnis); // gefundene Datensaetze zaehlen
        // pruefen ob Benutzername existiert
        if ($reihen <= 0) $nachricht = "Benutzername existiert nicht!"; // wenn nicht, diese Nachricht anzeigen
        else { // Benutzername existiert
         $pass = strtolower($_POST['passwort']);
         if (strlen($passwort) <= 31) $passwort_new = md5($pass); else $passwort_new = $pass; // prüfen ob Passwort als MD5-Hash eigegeben wurde
         $login_data = mysql_fetch_array($ergebnis);
         if ($login_data['password'] == $passwort_new) { // Passwort mit DB-Eintrag prüfen
          $_SESSION['userID'] = $login_data['geschlecht'].$login_data['model_id'];
          $_SESSION['user'] = $login_data['user'];
          $_SESSION['logged_in'] = 1;
          if (isset($_SESSION['redirect'])) { // Redirect
           echo side_includes($_SESSION['redirect']); // Weiterleiten
           unset($_SESSION['redirect']); // Session-Variable löschen
          } else echo side_includes("my_mp"); // "My Models-Planet" anzeigen
         } else $nachricht = "Passwort nicht korrekt!"; // Passwort passt nicht zum Benutzernamen
        }
       } else $nachricht = "Bitte gebe deinen Benutzernamen und Passwort an!"; // Formular (teilweise) leer
       break;
      /* ########## Logout ########## */
      } elseif ($_GET['side'] == "logout") {
       unset($_SESSION['userID']);
       unset($_SESSION['user']);
       $_SESSION['logged_in'] = 0;
       $nachricht = "Du hast dich erfolgreich ausgeloggt!";
       $erfolg = "_erfolg";
      }
      /* ########## Nachricht ########## */
      if ($nachricht != '') {
      ?>
      <center>
       <span class="ue_schrift"><? if ($_GET['side'] == "login") echo "Login"; else echo "Logout"; ?></span>
       <br><br><br><br><br>
       <span class="sc_nachricht<?=$erfolg?>"><?=$nachricht?></span>
      </center>
      <? } ?>
      Mit freundlichen Grüssen,
      Patrick

      1. hi,

        So sieht das script aus: [...]

        ja und?

        gruss,
        wahsaga

        1. Hallo

          ja und?

          was könnte da diese Fehlermeldung verursachen?

          Mit freundlichen Grüssen,
          Patrick

          1. Hello,

            was könnte da diese Fehlermeldung verursachen?

            Der Spaghetticode.
            Räum as Script mal auf, benutze Funktionen, füge im Quellcode Absätze und Kommentare ein. Dann siehst Du vielleicht, wo der Speicherverbrauch stattfindet.

            Außerdem müsste Dir doch auch eine Zeile angegeben worden sein, in der der Speicherfresser sitzt, oder?

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Hallo

              Außerdem müsste Dir doch auch eine Zeile angegeben worden sein, in der der Speicherfresser sitzt, oder?

              ja line 13. da steht "if ($login_data['password'] == $passwort_new) { // Passwort mit DB-Eintrag prüfen"

              Mit freundlichen Grüssen,
              Patrick

              1. Hello,

                ja line 13. da steht "if ($login_data['password'] == $passwort_new) { // Passwort mit DB-Eintrag prüfen"

                Wahrscheinlich wird der Fehler schon eine Zeile drüber "vorbereitet".

                Dein "Login" ist sowieso Genickschusstechnik. Hast Du verhindert, dass in Deine DB aus versehen ein leerer Datensatz hineinrutscht?

                Warum fragst Du nicht in einem Durchgang auf Übereinstimmung von Username und Passwort ab?

                $pass = mysql_escape_string(stripslashes($_POST['passwort']));
                $user = mysql_escape_string(stripslashes($_POST['username']));

                $sql = "select ID, Nickname from logindatei ".
                       "where passwort = '$pass' and username = '$user'";

                $res = mysql_query($sql,$con);
                if ($res and (mysql_num_rows($res)==1))
                {
                  # login erfolgreich
                }
                else
                {
                  # böser Bube!
                }

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                1. Hallo

                  hab den login jetzt so:
                  if ($_GET['side'] == "login") {
                   $pass = mysql_escape_string(strtolower(md5($_POST['passwort'])));
                   $user = mysql_escape_string(strtolower($_POST['user']));

                  $ergebnis = mysql_query("SELECT model_id,user,geschlecht FROM ".$tabelle['models']." WHERE user = '".$user."' AND password = '".$pass."'");
                   if ($ergebnis && (mysql_num_rows($ergebnis) == 1)) {
                    $login_data = mysql_fetch_array($ergebnis);
                    $_SESSION['userID'] = $login_data['geschlecht'].$login_data['model_id'];
                    $_SESSION['user'] = $login_data['user'];
                    $_SESSION['logged_in'] = 1;
                    if (isset($_SESSION['redirect'])) { // Redirect
                     echo side_includes($_SESSION['redirect']); // Weiterleiten
                     unset($_SESSION['redirect']); // Session-Variable löschen
                    } else echo side_includes("my_mp"); // "My Models-Planet" anzeigen
                   } else $nachricht = "Benutzername und/oder Passwort falsch!";
                  funktioniert aber immer noch nicht der fehler liegt jetzt hier. lin 12 "$_SESSION['logged_in'] = 1;"

                  Mit freundlichen Grüssen,
                  Patrick

                  1. hi,

                    funktioniert aber immer noch nicht der fehler liegt jetzt hier. lin 12 "$_SESSION['logged_in'] = 1;"

                    nein, das löst vermutlich nur die fehlermeldung aus:
                    durch diese zuweisung wird versucht, weiteren platz für eine neue variable zu reservieren, aber es ist innerhalb des limits von 8MB nichts mehr übrig - also lediglich der sprichwörtliche "tropfen, der das faß zum überlaufen bringt".

                    gruss,
                    wahsaga

                    1. Hallo

                      Werde jetzt den Webspace wechseln. Habe jetzt auch probleme mit meinem forum. die haben auf dem server SuPHP installiert. funzt jetzt nix mehr.

                      Trotzdem danke für die hilfe!

                      Mit freundlichen Grüssen,
                      Patrick