Allowed memory size of 8388608 bytes exhausted (tried to allocate 81 bytes)

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

  • Allowed memory size of 8388608 bytes exhausted (tried to allocate 81 bytes)

    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!
    PHP-Code:
    <?  
    $datum2=file("./datum2.txt");  
    ?>
    PHP-Code:
    <?  
    $count4=count($datum);  
    $monate=array();  
    for($i=0;$i<=$count4-1;$i++){  
    $teilung=explode(".",$datum[$i]);  $monate[]="$teilung[1]$teilung[2]";  
    }  ?>
    0
    Immer ausreichend Speicher
    0%
    0
    Es wird leider immer weniger
    0%
    0
    Immer schon zu wenig gewesen
    0%
    0
    Man muss sein Skript halt dementsprechend anpassen
    0%
    0
    Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null -- und das
    nennen sie
    dann ihren Standpunkt...

  • #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.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      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?!?
      Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null -- und das
      nennen sie
      dann ihren Standpunkt...

      Kommentar


      • #4
        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ß.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          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!
          Zuletzt geändert von kristobal; 26.01.2004, 19:43.
          Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null -- und das
          nennen sie
          dann ihren Standpunkt...

          Kommentar


          • #6
            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!
            TBT

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


            PHP 2 AllPatrizier II Browsergame

            Kommentar


            • #7
              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
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Ich glaub, ich bin ein kleines Depperl...
                Das ist mein Script-Anfang:
                PHP-Code:
                $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!
                Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null -- und das
                nennen sie
                dann ihren Standpunkt...

                Kommentar


                • #9
                  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.
                  ...
                  TBT

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


                  PHP 2 AllPatrizier II Browsergame

                  Kommentar

                  Lädt...
                  X