Dennis: File Locking, Fehlerbehandlung

Beitrag lesen

Hi Tom,

ich habe gerade mal die Scripte überflogen und mir ein paar Gedanken dabei gemacht.

Im Prinzip könnte man die Lesbarkeit des Quelltextes noch verbessern ;-)

Hm, kann man natürlich machen, wobei...

...und eine etwas bessere Aufteilung in Funktionen ist empfehlenswert.

...mir das so in Functionen unterteilt eher schwer fällt zu vestehen (wenn das Script unbekannt ist), als wenn es in einem durch geht.
Btw hatte ich diese Kommentare ja nur noch schnell für dich zum schnelleren Verstehen eingefügt.

Das soll man zwar auch nicht übertragen, weil jedes Load einer Funktion auch teuer ist, aber die Fehlerbehandlung wird dadurch vereinfacht und übersichtlicher. Bei fehler wird einfach der Funktionsblock beendet mit Fehlernummer; sonst benötigt man meistens komplizierte Bedingungs-Verschachtelungen.

Sicherlich, das hat auch seine Vorteile.

Und ein Denkfehler ist mir noch aufgefallen, der auch unbedingt in das wachsende Artikel-Konzept rein muss:

Thema File-Locking:

if($fp)
{
  for($x=0;$x<5;$x++)
  {
    if(flock($fp,LOCK_SH)) break;
    usleep(8000);

// Hier hatte ich doch schon mal angemerkt, dass laut http://www.selfphp.de/funktionsreferenz/sonstige_funktionen/usleep.php#beschreibung
      // diese Funkction unter Windows nicht läuft.
      // Warum also nicht sleep() nehmen, was funktionieren soll?

}

...

}

Die Locking-Funktion hat eine eigene eingebaute Idle-Funktion. Wenn man flock() aufruft, bleibt die Kontrolle solange in der Funktion, bis der Lockversuch Erfolg hatte, oder die maximale Script-Laufzeit erreicht ist.

Idle? Und du meinst jetzt, das oben ist falsch, da dort bei fehlerhaftem Locking einfach fortgefahren wird? Ja, stimmt.

Wenn man nun den User nicht solange warten lassen will (das sind dann bei Default 30 Sekunden), baut man eben eine eigene Schleifenkonstruktion um den Lockverssuch gherum, so wie Du das getan hast. Allerdings muss man der Funktion dann sagen, dass sie nicht mehr automatisch solange warten soll, bis es passt...


if($fp)
{
  $lock = false;        # Kontrollschalter, ob Locking klappt
  for($x=0;$x<5;$x++)
  {
    $lock = (flock($fp,LOCK_SH + LOCK_NB));
    if ($lock) break;
    usleep(8000);
  }

if ($lock)
  {
    # ...
  }
  else
  {
    # Fehlerbehandlung
  }

fclose($fp);
}


Durch das Addieren des NonBlock-Bits weiß die Funktion nun, dass sie nicht warten soll, sondern false zurückgeben soll, wenn das Handle mit LOCK_EX belegt ist. Theoretisch ist es zu diesem Moment auch möglich, dass die Datei gar nicht mehr da ist. Das bedeutet, dass man alle Operationen mit dem Handle also trotzdem unter Fehlerbehandlung stellen muss.

Achso, das meintest du mit Denkfehler. Stimmt, da wäre es natürlich blöd, wenn er 30 Sekunden warten um von alleine neu versuchen zu locken.
Ist halt besser, wenn man alles von Hand macht und weniger auf automatik setzt ;-)

Außerdem sit es wenig sinnvoll, normal weiter zu arbeiten, wenn das Locking nicht geklappt hat. Also muss man sich den Erfolg merken und nochmals abprüfen.

s.o.

Soviel zum Thema Locking und Fehlerbehandlung.
Ich bitte höflichst um Korrektur durch unsere Regulars... ;-)

Korrektur durch unsere Regulars? Du meinst ich soll das Script jetzt mal ausbessern und dir erneut zuschicken? OK, ich hab grad etwas Zeit, kann das also Problemlos machen.

Btw: Bist du schon mit deiner Blättern Funktion bei der Ausgabe weitergekommen? Zusätzlich müsste man noch die Archvierungsfunktion einbauen. Ich würde sagen, soviele News hat man nicht. Man dürfte an die 2000 News in eine Datei kriegen, somit würde eine Datei pro Jahr reichen. Also müsste man schauen, alle News deren UNIX Stempel 30 x 24 x 60 x 60 Sekunden kleiner ist als der aktuelle (30 Tage) werden in eine Textdatei geschrieben, welche date("y",$timestamp).".txt" heißt, also z.B. 2004.txt (oder .dat o.ä.). Mach ich dann jetzt mal.

Deine Kommentare in meine Script:
---------------------------------

Die Zeit würde ich einmal bestimmen und mir merken

damit sie überall gleich ist und man auch feststellen kann

welches der letzte veränderte Datensatz ist

Das macht sicherlich Sinn, am Anfang  $time = time(); zu sagen und dann immer die Zeit zu verwenden.

In der Datei haben Tags eigentlich nichts zu suchen.

Zum Speichern in Textdateien würde ich das

"\r\n", "\r", "\n" gegen ein chr(127) ersetzen (hier nicht notwendig)

und erst bei der Anzeige der Daten wieder zurückübersetzen in "\r\n",

anschließend die entities mit htmlentities() umwandeln, und dann nl2br() nutzen,

falls die Darstellung im HTML-Text steht oder auch nicht, wenn

die Darstellung in der Textarea stattfinden soll.

Also folgendes machen:
 str_replace("\r\n",chr(127));
 str_replace("\r",chr(127));
 str_replace("\n",chr(127));

Bei der Ausgabe:
 str_replace(chr(127),"\r\n");
 htmlentities($string,ENT_QUOTES);
Und um in HTML darzustellen noch ein
 nl2br();
hinterher.

--------------------

So, dann setze ich mich jetzt mal dran, und bastle da weiter dran rum.
Der Rest war doch OK im Script, oder? Und in den anderen Scripten?

MfG, Dennis.

--
Signatur 3 von 3:
Fragen zu Formularen?
http://tutorial.riehle-web.com hilft!
0 163

Zeile in Textdatei löschen - aber wie

Dennis
  • php
  1. 0
    Harry
    1. 0
      Dennis
      1. 0
        Fabian Transchel
        1. 0
          Dennis
          1. 0
            Dennis
    2. 0
      Auge
  2. 0
    Tom
    1. 0
      Harry
      1. 0
        Tom
        1. 0
          Tom
        2. 0
          Harry
          1. 0
            Tom
            1. 0
              Harry
              1. 0
                Tom
                1. 0

                  Nervende Werbung

                  Dennis
                  • meinung
                  1. 0
                    Fabian Transchel
                    1. 0
                      Dennis
                  2. 0
                    Schuer
                    1. 0
                      Tom
                      1. 0
                        Schuer
                        1. 0
                          Tom
    2. 0
      Dennis
      1. 0
        Tom
        1. 0
          Dennis
          1. 0
            Tom
            1. 0
              Dennis
              1. 0
                Tom
                1. 0
                  Dennis
                  1. 0
                    Tom
                    1. 0
                      Dennis
                      1. 0
                        Tom
                        1. 0
                          Dennis
                          1. 0
                            Tom
                            1. 0
                              Dennis
                              1. 0
                                Tom
                                1. 0
                                  Dennis
                                  1. 0

                                    safe Mode

                                    Dennis
                                  2. 0
                                    Tom
                                    1. 0
                                      Dennis
                                      1. 0

                                        Geschafft!!! Aber nun weiter...

                                        Dennis
                                        1. 0
                                          Tom
                                          1. 0

                                            Verschieben von Daten - Archivierung

                                            Dennis
                                            1. 0
                                              Tom
                                              1. 0
                                                Dennis
                                                1. 0
                                                  Tom
                                                  1. 0
                                                    Tom
                                                    1. 0
                                                      Dennis
                                                      1. 0
                                                        Dennis
                                                        1. 0

                                                          News Script

                                                          Dennis
                                                          1. 0

                                                            File Locking, Fehlerbehandlung

                                                            Tom
                                                            1. 0
                                                              Dennis
                                                              1. 0
                                                                Tom
                                                                1. 0
                                                                  Dennis
                                                                  1. 0
                                                                    Tom
                                                                    1. 0
                                                                      Tom
                                                                      1. 0
                                                                        Dennis
                                                                        1. 0
                                                                          Dennis
                                                                          1. 0
                                                                            Tom
                                                                            1. 0
                                                                              Dennis
                                                                              1. 0
                                                                                Tom
                                                                                1. 0
                                                                                  Dennis
                                                                                  1. 0
                                                                                    Tom
                                                                                    1. 0
                                                                                      Dennis
                                                                                      1. 0
                                                                                        Tom
                                                                                        1. 0
                                                                                          Dennis
                                                                                          1. 0
                                                                                            Tom
                                                                                            1. 0
                                                                                              Dennis
                                                                                              1. 0
                                                                                                Tom
                                                                                                1. 0
                                                                                                  Dennis
                                                                                                  1. 0
                                                                                                    Tom
                                                                                                    1. 0
                                                                                                      Dennis
                                                                                                      1. 0
                                                                                                        Tom
                                                                                                        1. 0

                                                                                                          Haaaalol, sieht uns jemand?

                                                                                                          Tom
                                                                                                          • zu diesem forum
                                                                                                          1. 0

                                                                                                            Haaa *lol*, hier liest keiner mehr :-(

                                                                                                            Dennis
                                                                                                            1. 0

                                                                                                              HAAAALLOOO, SIEHT UNS KEINER? Wertebereich von Schlüsseln

                                                                                                              Tom
                                                                                                              • datenbank
                                                                                                              1. 0
                                                                                                                Vinzenz
                                                                                                              2. 0
                                                                                                                Vinzenz
                                                                                                              3. 0
                                                                                                                Vinzenz
                                                                                                                1. 0
                                                                                                                  Tom
                                                                                                        2. 0

                                                                                                          Functionen, Archivierung

                                                                                                          Dennis
                                                                                                          1. 0
                                                                                                            Tom
                                                                                                            1. 0
                                                                                                              Dennis
                                                                                                              1. 0

                                                                                                                Tom?

                                                                                                                Dennis
                                                                                                                1. 0
                                                                                                                  Tom
                                                                                                                  1. 0

                                                                                                                    Projekt Flatfiles: Datensicherung

                                                                                                                    Tom
                                                                                                                  2. 0
                                                                                                                    Tom
                                                                                                                    1. 0
                                                                                                                      Dennis
                                                                                                                      1. 0
                                                                                                                        Tom
                                                                                                                        1. 0

                                                                                                                          Schnelles und speicherplatzsparendes Speichern in Flatfiles

                                                                                                                          Dennis
                                                                                                                          1. 0

                                                                                                                            Speichern in Flatfiles

                                                                                                                            Tom
                                                                                                                            1. 0
                                                                                                                              Dennis
                                                                                                                              1. 0
                                                                                                                                Tom
                                                                                                                                1. 0
                                                                                                                                  Dennis
                                                                                                                                  1. 0

                                                                                                                                    Tom?

                                                                                                                                    Dennis
                                                                                                                                    1. 0
                                                                                                                                      Dennis
                                                                                                                                      1. 0
                                                                                                                                        Arx
                                                                                                                                        1. 0

                                                                                                                                          Flatfile Funktionen

                                                                                                                                          Dennis
                                                                                                                                          1. 0
                                                                                                                                            Arx
                                                                                                                                            1. 0
                                                                                                                                              Dennis
                                                                                                                                              1. 0
                                                                                                                                                Arx
                                                                                                                                                1. 0
                                                                                                                                                  Dennis
                                                                                                                                                  1. 0
                                                                                                                                                    Arx
                                                                                                                                                    1. 0
                                                                                                                                                      Dennis
                                                                                                                                                      1. 0

                                                                                                                                                        Signatur

                                                                                                                                                        Arx
                                                                                                                                                        • zu diesem forum
                                                                                                                                                        1. 0
                                                                                                                                                          Dennis
                                                                                                                                                          1. 0
                                                                                                                                                            Arx
                                                                                                                                                            1. 0
                                                                                                                                                              Dennis
                                                                                                                                                              1. 0
                                                                                                                                                                Dennis
                                                                                                                                                                1. 0
                                                                                                                                                                  Arx
                                                                                                                                                              2. 0
                                                                                                                                                                Arx
                                                                                                                                                                1. 0
                                                                                                                                                                  Dennis
                                                                                                                                                                  1. 0
                                                                                                                                                                    Arx
                                                                                                                                                                    1. 0
                                                                                                                                                                      Arx
                                                                                                                                                                      1. 0
                                                                                                                                                                        Dennis
                                                                                                                                                                        1. 0
                                                                                                                                                                          Arx
                                                                                                                                                                          1. 0
                                                                                                                                                                            Dennis
                                                                                                                                                                            1. 0
                                                                                                                                                                              Arx
                                                                                                                                                                              1. 0
                                                                                                                                                                                Dennis
                                                                                                                                                                                1. 0
                                                                                                                                                                                  Arx
                                                                                                                                                                                  1. 0
                                                                                                                                                                                    Dennis
                                                                                                                                                                                    1. 0
                                                                                                                                                                                      Arx
                                                                                                                                                                                      1. 0
                                                                                                                                                                                        Dennis
                                                                                                                                                                                        1. 0
                                                                                                                                                                                          Arx
                                                                                                                                                                                          1. 0
                                                                                                                                                                                            Dennis
                                                                                                                                                                                            1. 0
                                                                                                                                                                                              Tom
                                                                                                                                                                                              1. 0
                                                                                                                                                                                                Dennis
                                                                                                                                                                                                1. 0
                                                                                                                                                                                                  Tom
                                                                                                                                                                                        2. 0
                                                                                                                                                                                          Thomas J.S.
                                                                                                                                                                                          1. 0
                                                                                                                                                                                            Dennis
                                                                                                                                                                                            1. 0
                                                                                                                                                                                              Thomas J.S.
                                                                                                                                                                                              1. 0
                                                                                                                                                                                                Dennis
                                                                                                                                                                    2. 0
                                                                                                                                                                      Dennis
                                                                                                                                                                      1. 0
                                                                                                                                                                        Arx
                                                                                                                                                                        1. 0

                                                                                                                                                                          Dies ist ein Test

                                                                                                                                                                          Dennis
                                                                                                                                                                          1. 0
                                                                                                                                                                            Arx
                                                                                                                                                                            1. 0
                                                                                                                                                                              Dennis
                                                                                                                                                                              1. 0
                                                                                                                                                                                Jan R.
                                                                                                                                                                                1. 0
                                                                                                                                                                                  Dennis
                                                                                                                                          2. 0
                                                                                                                                            Tom
                                                                                                                                  2. 0
                                                                                                                                    Tom
                                                                                                                                    1. 0
                                                                                                                                      Dennis
                                                                                                                                      1. 0
                                                                                                                                        Dennis
                                                                                                                                        1. 0
                                                                                                                                          Dennis
                                                                                                                                          1. 0
                                                                                                                                            Dennis
                                                                                                                                            1. 0
                                                                                                                                              Tom
                                                                                                                                              1. 0
                                                                                                                                                Dennis
                                                                                                                                                1. 0
                                                                                                                                                  Tom
                                                                                        2. 0
                                                                                          Tom
                                                                                          1. 0

                                                                                            Speichern in Flatfiles: Performance

                                                                                            Tom
                                                                        2. 0
                                                                          Tom
                2. 0

                  WER DAS HIER LIEST BITTE MELDEN

                  HILFE
                  • zur info
    3. 0
      Arx
      1. 0
        Dennis
  3. 0

    HALLO - Problem Wertebereich von Schlüsseln

    Dennis
    • datenbank
    1. 0
      Thomas J.S.
      1. 0
        Dennis
        1. 0
          Thomas J.S.
          1. 0
            Dennis
        2. 0
          Andreas Korthaus
          1. 0
            Dennis
          2. 0
            Tom
            1. 0
              Andreas Korthaus