Ankündigung

Einklappen
Keine Ankündigung bisher.

Log Datei einlesen aber grosse Datei

Einklappen

Neue Werbung 2019

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

  • Log Datei einlesen aber grosse Datei

    ich möchte eine Logdatei die teilweise mehrere MB gross ist in eine mysql Datenbank importieren.
    Nur die Grösse ist natürlich nicht unbedingt sehr planbar aber ich weiss es vorher eben nicht.
    Kann ich das in einen Stream einlesen? (habe ich aber noch nicht gemacht wie?)
    oder gibt es andere Möglichkeiten das mit PHP und nicht unbedingt auf Konsole zu machen.

    Danke für Tips oder Lösungsvorschläge

  • #2
    In einen Stream einlesen? Naja... nein.
    Du "streamst" die Daten durch deine Anwendung (ein gebräuchlicher Weg um resourcenschonend mit großen bzw. unbekannten Datenmengen umzugehen). Es bedeutet, das du deine Daten nicht komplett in einen großen Puffer einliest, sondern nur Stückchen für Stückchen liest und verarbeitest, in deinem Fall böte sich zeilenweise an.
    Mit set_time_limit() kannst du den Timeout für die Scriptlaufzeit anpassen (bzw. komplett ausschalten), so daß dein Import eine ganze Weile laufen kann.

    Hast du bereits eigene Ansätze?
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Zähler incrementieren und diesen bei vollen tausendern ausgeben lasssen, damit unterbrichst du das timeout.
      [PHP]if ($var != 0) {
      $var = 0;
      }[/PHP]

      Kommentar


      • #4
        Zitat von Wolla Beitrag anzeigen
        Zähler incrementieren und diesen bei vollen tausendern ausgeben lasssen, damit unterbrichst du das timeout.
        Du könntest beispielsweise, dann einen header-redirerect machen und an der Stelle weitermachen machen...
        "My software never has bugs, it just develops random features."
        "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

        Kommentar


        • #5
          Zitat von lstegelitz Beitrag anzeigen
          In einen Stream einlesen? Naja... nein.
          Du "streamst" die Daten durch deine Anwendung (ein gebräuchlicher Weg um resourcenschonend mit großen bzw. unbekannten Datenmengen umzugehen). Es bedeutet, das du deine Daten nicht komplett in einen großen Puffer einliest, sondern nur Stückchen für Stückchen liest und verarbeitest, in deinem Fall böte sich zeilenweise an.
          Mit set_time_limit() kannst du den Timeout für die Scriptlaufzeit anpassen (bzw. komplett ausschalten), so daß dein Import eine ganze Weile laufen kann.

          Hast du bereits eigene Ansätze?
          nein ich bin noch am überlegen was am Besten wäre, stream soll ja schneller sein und eben ressourcen schonender

          Kommentar


          • #6
            Zitat von webdino Beitrag anzeigen
            nein ich bin noch am überlegen was am Besten wäre, stream soll ja schneller sein und eben ressourcen schonender
            dann benutzt doch einfach nen dateistream.
            Eine kleine Funktionsauswahl:
            [man]fopen[/man] [man]fgets[/man] [man]feof[/man] [man]fclose[/man]

            Kommentar


            • #7
              regulärer Ausdruck falsch ausgegeben - dadurch kein Ergebnis bei preg_match_all

              Mit den einfachen Dateifunktionen sollte das ganze dann tatsächlich kein Problem sein.

              Mit fssek() kannst du dann evt, noch eine bestimmte Position springen
              "My software never has bugs, it just develops random features."
              "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

              Kommentar


              • #8
                Log Datei

                Zitat von lstegelitz Beitrag anzeigen
                In einen Stream einlesen? Naja... nein.
                Du "streamst" die Daten durch deine Anwendung (ein gebräuchlicher Weg um resourcenschonend mit großen bzw. unbekannten Datenmengen umzugehen). Es bedeutet, das du deine Daten nicht komplett in einen großen Puffer einliest, sondern nur Stückchen für Stückchen liest und verarbeitest, in deinem Fall böte sich zeilenweise an.
                Hast du bereits eigene Ansätze?
                Gibt es auch die Möglichkeit, ressourcenschonend vorne etwas wieder abzuschneiden?

                Ich habe bei meiner Logdatei eine Maximalgröße wegen der Anzeige in einer textarea. Wie kann ich die ersten Zeilen am besten löschen, wenn die Datei zu groß ist ?

                Munter !
                Webstammtisch Oldenburg

                Kommentar


                • #9
                  Nein, sowas gibt es nicht. Um "vorne" etwas abzuschneiden, muss die Datei komplett neu geschrieben werden.
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    Ich würds auch per Scream machen.

                    Vor einigen Jahren hatte ich mal mit 600MB XML Datein zu tun, die ich verarbeiten musst. Okay es war eine C++ Anwendung die ich baute. Anfangs lass ich die ganze Datei auf ein mal ein und die Anwendung war mega lam. Dann las ich es als Stream ein und es war ca. 100x schneller.

                    Notfalls einfach etwas rumprobieren wenn du verschiedene Ideen hast.

                    Kommentar

                    Lädt...
                    X