mabuhay: Mode einer geöffneten Datei überprüfen

Hi,

Gibt es eine Möglichkeit, den mode einer geöffneten Datei (r, w, a, usw) nachträglich zu überprüfen? Also um sicherzustellen dass die Datei mit dem richtigen mode-Parameter geöffnet wurde?

mfg
mabuhay

--
www.mytinyarchive.ch.vu
  1. Ich grüsse den Cosmos,

    Also um sicherzustellen dass die Datei mit dem richtigen mode-Parameter geöffnet wurde?

    Das stellt PHP sicher, wenn du den richtigen Parameter angibst. Ich versteh den Sinn nicht wirklich, den Interpreter zu kontrollieren, ob der das, was man ihm sagt, richtig macht. (Zumindest in diesem Fall)

    Möge das "Self" mit euch sein

    --
    Fragt ein Atom das andere: Hast du mein Elektron gesehen? Ich bin heute so positiv.
    ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
    1. Hi,

      Wollte mir ein paar Funktionen zusammenstellen, z.B. Datei öffnen oder eine Zeile zu einer geöffneten Datei hinzufügen usw. mit validation aller parameter usw., da wollte ich testen ob die Datei auch zum Anhängen geöffnet worden ist damit ich sie möglichst flexibel verwenden kann...
      Löse es jetzt aber einfach so dass die öffnen Funktion die Datei halt einfach mit dem "a" mode öffnet oder so ähnlich, falls es da wirklich nichts gibt.

      mfg
      mabuhay

      --
      www.mytinyarchive.ch.vu
      1. Hello,

        Wollte mir ein paar Funktionen zusammenstellen, z.B. Datei öffnen oder eine Zeile zu einer geöffneten Datei hinzufügen usw. mit validation aller parameter usw., da wollte ich testen ob die Datei auch zum Anhängen geöffnet worden ist damit ich sie möglichst flexibel verwenden kann...
        Löse es jetzt aber einfach so dass die öffnen Funktion die Datei halt einfach mit dem "a" mode öffnet oder so ähnlich, falls es da wirklich nichts gibt.

        Der Append-Modus ist nun auch in PHP schon eine Weile repariert.
        Da kannst Du wirklich nur am Ende etwas anhängen und den Satzzeiger (für das Schreiben) nicht bewegen. Der tut nur so, als würde er parieren ;-))

        Wenn Du den a+ Modus nimmst, kannst Du aber in der Datei lesen.

        http://de3.php.net/manual/de/function.fopen.php

        Eine universelle Öffnungsprozedur für eine Datei habe ich neulich hier beschrieben.
        Ich weiß aber nicht mehr, in welchem Thread, deshalb poste ich sie einfach nochmal:

        Datei zerstörungsfrei öffen oder anlegen, wenn
        sie noch nicht vorhanden war:

        $fh1 = fopen($dateiname, 'a');              ## Datei erzeugen, falls nicht vorhanden
          flock ($fh1, LOCK_SH);                      ## Datei mit Sperre gegen Schreibsperre belegen
          $fh2 = fopen($dateiname, 'r+');             ## Datei zum Lesen und Schreiben öffnen
          flock ($fh2, LOCK_SH);                      ## Ebenfalls Sperre gegen Schreibsperre setzen
          fclose($fh1);                               ## ggf. neu erzeugte Datei frei geben (schließen)
          flock ($fh2, LOCK_EX);                      ## Sperre auf Schreibsperre 'upgraden'
          clearstatcache;                             ## eventuell alte Metadaten entfernen
          $fsize = filesize($dateiname);              ## Dateigröße holen
          $stream = fread($fh2, $fsize);              ## Datei auslesen
          $_schmeckt = unserialize($stream);          ## Stream in Array zurückverwandeln
          ### Manipulationen am Array durchführen     ## Hier das Array verändern
          $stream = serialize($_schmeckt);            ## Array wieder in Stream umwandeln
          fseek($fh2, 0, SEEK_SET);                   ## Datensatzzeiger zurück auf Anfang
          fwrite($fh2,$stream);                       ## verändertes Array wegschreiben
          ftruncate($fh, strlen($strem));             ## Dateilänge anpassen auf veränderten Inhalt
          fclose($fh);                                ## Datei schließen und freigeben.

        In diesem Besipiel lag in der Datei, wenn sie vorhanden war, ein serialisiertes Array.
        Dieses sollte verändert werden.

        Es ist der einzige Weg, wie Applikationen vorgehen müssen, wenn die Daten Applikationsübergreifens genutzt werden sollen. Sogenannte "Dummyfiles" sind da zum Schutz nicht geeignet, weil die andere Applikation zwar dasselebe OS benutzt, also die Lockmethoden zur Verfügung hat, aber nicht wissem kann, wie das Dummyfile heißt.

        Die Dateien werden hier nicht wirklich gesperrt, sondern es wird für sie im OS eine Informationstabelle geführt. Alle Applikationen können darauf zugreifen und sollten es auch tun.
        Das nennt sich dann Advisory Locking, im Gegensatz zu Mandatory Locking, wo das Betriebssystem nicht nur die Informationstabelle führt, siondern auch die Überwachung betreibt.

        Das Beispiel berücksichtigt noch nicht die Fehlerauswertung, die aber unbedingt berückscihtigt werden muss. Hier sollte nur der notwendige zeitliche Verlauf des Vorganges dargestellt werden.
        Man zerlegt den Ablauf zweckmäßigerweise in mehrere Funktionen. Dann wird es mit den Fehlervarianten nicht zu unübersichtlich.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. Hello,

    Gibt es eine Möglichkeit, den mode einer geöffneten Datei (r, w, a, usw) nachträglich zu überprüfen? Also um sicherzustellen dass die Datei mit dem richtigen mode-Parameter geöffnet wurde?

    Gegen Alzheimer hilft hier nur Fleiß:

    Auf das vorhandene Handle ein Lock_sh legen
     ein neues Handle besorgen mit dem gewünschten Mode
     auf das neue Handle ein Lock_sh legen
     den Satzzeiger des alten Handles abfragen
     das alten handle freigeben
     den Satzzeiger für das neue Handle wieder positionieren
     auf lock_ex upgraden, falls notwendig
     Daten lesen
     Datenn verändern
     Daten schreiben
     Datei schließen und Tschüss

    An den Speicherblock des Handles wird dich das OS vermutlich nicht einmal zum Auslesen heranlassen und mit Standardmitteln von PHP schon gar nicht.

    Sollte mich jedenfalls wundern.
    Außerdem ginge das in eine Schicht, in der Anwendungsprogrammierer nicht zu suchen haben.

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)