Archiv verlassen und diese Seite im Standarddesign anzeigen : Allowed memory size of 8388608 bytes exhausted (tried to allocate 81 bytes)
kristobal 26-01-2004, 19:46 Ich habe den "kristobals Tageszaehler" hier zum herunterladen, und seit Beginn funktionierte er bei allen Anwendern klaglos. Nun habe ich aber in den letzten paar Tagen ein paar Mails bekommen mit der Fehlermeldung
" Allowed memory size of 8388608 bytes exhausted (tried to allocate 81 bytes) in /xxxxxxx/tageszaehler/systemliste.php on line 22"
oder ähnliche. Die Textdatei, die dabei verarbeitet wird, hat bei diesem Beispiel 171 kb, sie wird dabei mit folgendem text verarbeitet:
<?
$datum2=file("./datum2.txt");
?>
Der gleiche Fehler tritt auch bei den anderen Seiten auf, bei denen auch Textdateien zwischen 100 und 300 kb mit "explode" bearbeitet werden, z.B:
<?
$count4=count($datum);
$monate=array();
for($i=0;$i<=$count4-1;$i++){
$teilung=explode(".",$datum[$i]);
$monate[]="$teilung[1]$teilung[2]";
}
?>
Da der Tageszähler aber bei den meisten funktioniert, bin ich ein bisschen ratlos, was ich dagegen tun kann.
Kann mir hier jemand bitte helfen?
danke im Voraus!<?
$datum2=file("./datum2.txt");
?>
<?
$count4=count($datum);
$monate=array();
for($i=0;$i<=$count4-1;$i++){
$teilung=explode(".",$datum[$i]); $monate[]="$teilung[1]$teilung[2]";
} ?>
so ne sinnlose umfrage brauchen wir nicht. *DEACTIVATE*
und dann sieht mir die meldung nach ner endlosschleife aus.
gesucht im forum hast du danach wohl auch nicht.
und deinen php-code lese ich auch nicht. ohne die php-tags des forums erkennt man nichts. und da du ne umfrage starten konntest, kannst du auch die php-tags selber rein machen.
kristobal 26-01-2004, 20:14 Naja, im Forum habe ich zwei Beiträge gefunden, die mir aber auch nicht weitergeholfen haben. In einem davon war die Rede wegen des Speichers, darum die Umfrage.
Und wegen der Endlosschleife:
Warum funktioniert das Ding bei fast allen, und bei ein paar nicht? Dann wärs ja bei allen funktionsuntüchtig! Das ist es ja, was mich stutzig macht. Und das Problem gibts ja auch erst seit ein paar Tagen (ZB. Ein Mail eines Benützers:
"Hi, ich nutze Dein Tool schon einige Zeit und war bisher immer
zufrieden.
Doch jetzt kommt es beim Aufruf der "Monatshits" zu folgender
Fehlermeldung:
Fatal error: Allowed memory size of 31457280 bytes exhausted (tried to
allocate 35 bytes) in /home/www/web2/html/tageszaehler/monatsliste.php
on
line 32
"
Also kann ich das eigentlich nicht glauben?!?
da du ja imme in die textdatei schreibst, und dann immer file() zum auslesen nimmst, musste das ja mal kommen.
die daten sind einfach zu groß.
kristobal 26-01-2004, 20:27 Wenn die Textdatei kanpp 150 kilobyte hat, wie kann dann der Speicher mit 35 Megabyte überschritten werden?
Und es geht mir jetzt um noch ein Problem:
Ich weiss, dass ich die Daten anders abspeichern muss, da sonst mit jedem Besucher die Textdatei größer wird. Bisher wurde einfach mit jedem Besucher ein neuer Eintrag in die Textdatei geschrieben, ich will das sowieso ändern, so dass dann zum Beispiel nur jeder Monat dort steht, und dann die Anzahl der Besuche. Nur mache ich das rein hobbymässig, und bis ich das hinkrieg, vergeht doch einige Zeit. (Ich muss auch mal Geld verdienen...) Und bis dahin wäre es schön, wenn ich eine Zwischenlösung hätte, die die Benützer meines Tageszählers verwenden können!
Wie wäre es damit innerhalb des Scriptes mal auf ein paar nicht mehr
benötigte Variablen ein unset() zu machen?
Das soll ja Wunder wirken, besonders bei Arrays und Objekten!
Eine Datei kann man im übrigen auch sequentiell auslesen, man muß
nicht immer alles auf einmal nehmen!
Ich persöinlich handle damit sogar 500MB Dateien!
mrhappiness 26-01-2004, 21:17 interessnt wäre zu wissen, wieviel speicher denn wo verbruacht wird, wenn php ab 4.3.2 läuft, gibt's die funktion memory_get_usage dafür
kristobal 26-01-2004, 21:30 Ich glaub, ich bin ein kleines Depperl...
Das ist mein Script-Anfang:
$datum=file("./datum.txt");
$zeit=file("./zeit.txt");
$seite=file("./seite.txt");
$ip=file("./ip.txt");
$von=file("./von.txt");
$browser=file("./browser.txt");
$system=file("./system.txt");
$host=file("./host.txt");
//$datum2=file("./datum2.txt");
$ident=file("./ident.txt");
$count1=count($datum);
$count2=array_count_values($datum);
$count3=count($count2);
$count4=count($datum);
$monate=array();
for($i=0;$i<=$count4-1;$i++){
$teilung=explode(".",$datum[$i]); $monate[]="$teilung[1]$teilung[2]";
}
$count5=array_count_values($monate);
$count6=count($count5);
$monat=array_keys($count5);
$besuche=array_values($count5);
, und von den ganzen Arrays brauch ich pro Seite höchstens zwei! Wenn ich die anderen Arrays gar nicht einlese, müsste es ja dann wieder funktionieren? Die beiden Arrays selbst brauch ich dann allerdings schon und kann sie nicht mit unset löschen.
Leider weiss ich nicht, welche PHP die User meines Scripts verwenden, weil er einfach so zu herunterladen ist und sie ihn selbst in ihre Seiten einbauen.
Aber dass ich 9 Arrays einlese und sie nicht brauche ist naja... ääähhh...
Ich werde das mal ändern!
sowas ist immer ein guter Ansatz, nichts machen was nicht wirklich
benötigt wird.
Schau auch mal, ob du eventuell Operationen innerhalb von Schleifen
hast, die du genauso gut außerhalb der Schleife machen kannst.
...
|
-
- |