Klaus: wie memory-limit erhöhen?

Hallo,

ich habe ein Script, das regelmäßig in einem Routine-Job eine Text-Datei (Log-Datei) einliest, verarbeitet und die Auswwertung in einer MySQL-Tabelle speichert.

Das Script hat zum Einlesen bisher die Funktion file() verwendet:

$fcontents = file ($datei);

Das lief bisher auch tadellos, aber seit dem neuen Server erhalte ich des öfteren die Fehlermeldung:

allowed memory size of 33554432 exhausted ...

Ok, dachte ich. Die Log-Datei kann schonmal etwas größer werden (~20MB) und scheinbar sind in der php.ini nur 32MB erlaubt.
Ich habe den Wert memory-limit in der php.ini also mal auf 64M erhöht.
Aber dennoch, das Script bricht mir immer mit der selben Meldung weg, egal ob ich 64M, 128M oder 1024M eingebe und den Webserver neustarte.

Ich habe XAMP installiert. PHP in Version 5.2.1.

Ist PHP eventuell fest mit einem Memory-Limit-Wert kompiliert worden?
Oder muss ich diesen Wert doch irgendwo anders einstellen?

Klaus

  1. Hat sich doch schon erledigt. Hab mal wieder in der falschen php.ini geschaut. :-((

    Die php.ini im Apache/bin-Verzeichnis ist natürlich die richtige.

    Klaus

    1. echo $begrüßung;

      Die php.ini im Apache/bin-Verzeichnis ist natürlich die richtige.

      Das kann man so pauschal nicht sagen. Es ist aber diejenige die richtige, die von phpinfo() im ersten Block angezeigt wird.

      echo "$verabschiedung $name";

  2. Warum liest du die Datei überhaupt ein. Reicht es bei einem Log nicht aus an dessen Ende zu schreiben?

    1. Hallo

      Warum liest du die Datei überhaupt ein. Reicht es bei einem Log nicht aus an dessen Ende zu schreiben?

      Weil "lesen" und "schreiben" zwei verschiedene Tätigkeiten sind? Ziel ist es, ein bestehendes Serverlog einzulesen und Angaben daraus in einer DB-Tabelle zu speichern. Also "lesen".

      Tschö, Auge

      --
      Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
      (Victor Hugo)
      <dingdong /><dingdong /><toc /><toc /><toc /><shout>Florence!</shout>
      Veranstaltungsdatenbank Vdb 0.1
      1. hi,

        Ziel ist es, ein bestehendes Serverlog einzulesen und Angaben daraus in einer DB-Tabelle zu speichern. Also "lesen".

        Trotzdem muss "Lesen" ja nicht "alles auf einmal Lesen" bedeuten.
        Es gibt ggf. geeignetere Möglichkeiten des Einlesens, als file().

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hallo

          Ziel ist es, ein bestehendes Serverlog einzulesen und Angaben daraus in einer DB-Tabelle zu speichern. Also "lesen".

          Trotzdem muss "Lesen" ja nicht "alles auf einmal Lesen" bedeuten.
          Es gibt ggf. geeignetere Möglichkeiten des Einlesens, als file().

          Das ist wohl wahr. Bei entsprechendem Traffic auf einem Shared-Hosting-Angebot, auf dem sowohl das Zeit- als auch das Speicherlimit recht eng gesetzt ist, passiert es recht schnell, dass das Skript eines der Limits erreicht und somit seine Verarbeitung abgebrochen wird.

          Tschö, Auge

          --
          Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
          (Victor Hugo)
          <dingdong /><dingdong /><toc /><toc /><toc /><shout>Florence!</shout>
          Veranstaltungsdatenbank Vdb 0.1
  3. Hallo,

    ich hatte vor kurzem ein ähnliches Problem. Ich habe die Datei (noch ein wenig größer als deine) dann zeilenweise eingelesen (Beispiel als dem PHP Manual):

      
    <?php  
    $handle = fopen("/tmp/inputfile.txt", "r");  
    if ($handle) {  
        while (!feof($handle)) {  
            $buffer = fgets($handle, 4096);  
            /* Verarbeitung */;  
        }  
        fclose($handle);  
    }  
    ?>  
    
    

    Dadurch ist das ganze bezüglich der Speichernutzung weniger effizienter.

    Du könntest, sofern deine Konfiguration es erlaubt, auch nur für diese Skript das Memorylimit raufsetzen. Der Befehl dazu heißt ini_set.

    Gruß

    Stareagle