Fatal error: Allowed memory size ...
Patrick
- php
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
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
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
hi,
So sieht das script aus: [...]
ja und?
gruss,
wahsaga
Hallo
ja und?
was könnte da diese Fehlermeldung verursachen?
Mit freundlichen Grüssen,
Patrick
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
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
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
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
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
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