Ben Weichert: Script arbeitet nach Beendigung weiter...

Hallo,

das Problem mit meinem Skript ist folgendes: Es durchsucht mittels while(preg_match(...)) einen Text nach Inhalten und schreibt diese dann in eine Datei. Seltsamerweise findet die Schleife jedoch jeden Fundort mehrmals und das in total seltsamen Mustern. Ist ein Match zum Beispiel 10 mal enthalten, findet sie erst diese 10 in der Reihenfolge von unten nach oben und dann geht's erst richtig los: es folgen noch ca. 40 weitere Funde derselben Stellen in unnachvollziehbarer Reihenfolge. (Natürlich wird der zu durchsuchende Text immer neu geschrieben und die Fundstellen verschwinden physikalisch aus dem zu durchsuchenden Text!)

Ich habe mit jedem Durchlauf der Schleife den gesamten Text wieder ausgeben lassen und dort ist alles korrekt, es kommen auch nur 10 Ausgaben, doch dann habe ich einen Counter der Schleifen-Durchläufe mit in die Datei schreiben lassen und siehe, es ist Kraut und Rüben: 0,1,2,0,1,0,1,0,1,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,7,8,9,6,7,8,9,6,8,7,9,8,9. Man könnte auch sagen: Tohuwabohu.

Aber jetzt kommt's ja erst: diese durcheinander geratenen Einträge werden erst in die Datei geschrieben, wenn ich im Browser bereits das korrekte Ergebnis sehe. Ich habe mir die Timestamps mit ausgeben lassen, und all diese Einträge geschehen zwischen 2 und 9 Sekunden, nachdem das Skript beendet ist.

Das kann ich leider nicht nachvollziehen und frage nun, ob sowas normal ist oder ob ihr wisst, was ich dagegen tun kann.
Ich würde als nächstes die komplette Struktur des Skriptes testweise verändern um zu sehen, ob es am Programm selber liegt, aber was, wenn's das auch nicht bringt...

Vielen Dank,
Ben

  1. Hi!

    Ein PHP Script macht nichts von alleine, sondern das was Du ihm sagts. Du kannst zwar Scripte abwürgen, z.B. mit exit; aber das ist es nicht was Du brauchst, Du mußt im Script klären was genau falsch läuft. Der Ansazu mit der Ausgabe von Daten in schleifendurchläufen ist schon der richtige. Lass die an vielen Stellen was ausgeben, damit Du weißt wo Du Dich befindest. Du kannst exit; auch zum debuggen hier und da einfügen, damit das Script garantiert nur bis zu dieser Stelle läuft. Kommentiere erstmal unwichtige Sachen aus und versuche das Problem einzugrenzen.

    Grüße
    Andreas

  2. Hallo,

    arbeitest du eventuell mit verschachteteln schleifen und diversen if's?

    Odium

    1. arbeitest du eventuell mit verschachteteln schleifen und diversen if's?

      verschachtelte Schleifen weniger aber dafür mit diversen Funktionen, die sich den Text hin und herreichen. Das bin ich momentan am umbauen.

      Und if's sind auch viele drin, vor allem in der while-Schleife.

      1. Hallo,

        in dieser Situation musst du sehr viel mit Ausgaben der jeweiligen Zustände und Wege die dein Script nimmt arbeiten. Anscheinend sind momentane Werte nicht so wie du es erwartest und deine schleifen und if's nehmen einen anderen Weg. Also eine Art Step-per-Step mit verschiedenen Eingabewerten...

        Odium

  3. Hi,

    [viel Text ohne eigentliche Information]
    Das kann ich leider nicht nachvollziehen und frage nun, ob sowas normal ist oder ob ihr wisst, was ich dagegen tun kann.

    In Zeile 17 Deines Scripts mußt Du $i statt $k verwenden.
    Ne, im Ernst. Erwartest Du jetzt, daß wir das Script analysieren, ohne es zu kennen?

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/
    1. Hallo Andreas,

      nee, ich wollte eben kein Skript hier reinstellen, eben weil es in seiner jetzigen Form zu unübersichtlich und umfangreich ist, aber wenn ich es überarbeitet habe und das Problem noch immer da ist, würde ich es auf jeden Fall machen.

      Mir ging es eben um die Theorie und erhoffte mir einen Gedankenanstoss und um das Problem zu beschreiben braucht es nunmal viel Text.