manuel: Mehrere modi für fopen

Hallo,

folgendes Prob:

Habe eine Datei - soll so was wie ein Zähler werden. Zuerst wird das erste Zeichen (ist auch das einzigste) mit fgets in einer Variable eingelesen, dann in die selbe Datei per fputs($DATEI,++$ZAHL); geschrieben - ich brauche also r UND w als zweiten parameter in fopen, oder?
Also so:
fopen($DATEI,"r" "w");

doch das gibt einen fehler aus. Wie funktioniert es dann?

  1. Hallo manuel.

    fopen($DATEI,"r" "w");
    doch das gibt einen fehler aus. Wie funktioniert es dann?

    Siehe PHP Manual: fopen().

    Freundschaft!
    Siechfred

    --
    Hinweis an alle Karnevalsmuffel: Aschermittwoch ist alles vorbei.
    1. Ich bin heute ein bisschen schwer von Begriff: Wo steht da wie man zwei Parameter angeben kann?

      1. Moin manuel,

        »» Ich bin heute ein bisschen schwer von Begriff: Wo steht da wie man zwei Parameter angeben kann?

        eben.... gar nicht. Es gibt nur einen.

        regds
        Mike©

        --
        Freunde kommen und gehen. Feinde sammeln sich an.
      2. Hallo manuel.

        Ich bin heute ein bisschen schwer von Begriff: Wo steht da wie man zwei Parameter angeben kann?

        Du kannst keine zwei Parameter angeben, du musst dir aus der Tabelle der möglichen Modi den für deine Zwecke passenden heraussuchen. Der dürfte wohl "r+" sein.

        Freundschaft!
        Siechfred

        --
        Hinweis an alle Karnevalsmuffel: Aschermittwoch ist alles vorbei.
        1. Du kannst keine zwei Parameter angeben, du musst dir aus der Tabelle der möglichen Modi den für deine Zwecke passenden heraussuchen. Der dürfte wohl "r+" sein.

          Aber mit r+ kann ich nur lesen - ich muss zuerst lesen, und dann reinschreiben. r+ kommt dafür nicht infrage, würde ich sagen.

          1. hi,

            Aber mit r+ kann ich nur lesen

            langsam bekomme ich zweifel, ob _du_ überhaupt lesen kannst, sorry.

            • ich muss zuerst lesen, und dann reinschreiben. r+ kommt dafür nicht infrage, würde ich sagen.

            was steht denn auf der von Siechfred verlinkten seite bezüglich des parameters 'r+'?

            'r+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
            1. 'r+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.

              ich wusste, dass jemand schneller ist...maan

              Gruß,
              Benne

          2. Moin manuel,

            Du kannst keine zwei Parameter angeben, du musst dir aus der Tabelle der möglichen Modi den für deine Zwecke passenden heraussuchen. Der dürfte wohl "r+" sein.

            wenn du nicht mit Satzzeigern arbeiten möchtest, dann:

            Datei lesen "r"
            Datei schließen.

            Datei neu öffnen "w"
            Wert schreiben
            Und Datei wieder schließen

            Thats it

            regds
            Mike©

            --
            Freunde kommen und gehen. Feinde sammeln sich an.
          3. Aber mit r+ kann ich nur lesen - ich muss zuerst lesen, und dann reinschreiben. r+ kommt dafür nicht infrage, würde ich sagen.

            aus http://de.php.net/fopen:

            r+ - Öffnet die Datei zum Lesen *und* Schreiben und setzt den Dateizeiger auf den Anfang der Datei.

            Gruß,
            Benne

      3. hi,

        Ich bin heute ein bisschen schwer von Begriff: Wo steht da wie man zwei Parameter angeben kann?

        gar nicht, weil das nicht geht.

        da steht aber sehr wohl, welche parameter außer r und w es noch gibt ...

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. ähm ...

    meines Wissens heißt es "mehrere modus" (was aber wie "moduhhhhs" gesprochen werden müßte). Ein bißchen Erinnerung an den gewiß lange vergangenen Latein-Unterricht schadet ja nicht ;-)

    Grüße aus Berlin

    Christoph S.

    1. Hallo Christoph.

      meines Wissens heißt es "mehrere modus" (was aber wie "moduhhhhs" gesprochen werden müßte). Ein bißchen Erinnerung an den gewiß lange vergangenen Latein-Unterricht schadet ja nicht ;-)

      Ich dachte immer, "modata" wäre korrekt ...

      Freundschaft!
      Siech*scnr*fred

      --
      Hinweis an alle Karnevalsmuffel: Aschermittwoch ist alles vorbei.
      1. also Siechfred,

        Ich dachte immer, "modata" wäre korrekt ...

        Sowas _kannst_ du doch jetzt Toni Ott nicht antun, seitdem er im August in gesegnetem Alter entschlafen ist. Ein bißchen mehr Respekt vor unseren Lehrern erwarte ich doch von dir, selbst wenn sie nun in Ehren dahinscheiden (bloß Paule Engel vergeht einfach nicht und wird im kommenden Jahr gewiß wieder an unserer 30-Jahre-Abitur-Feier teilnehmen und zum 43. mal erzählen, wie ihm die ersten grauen Haare gewachsen sind, als ich, bis dahin immerhin sein Vorzeigemathematiker, plötzlich in der mündlichen Matheprüfung zu versagen drohte)

        Grüße aus Berlin

        Christoph S.

        1. Hallo Christoph.

          Sowas _kannst_ du doch jetzt Toni Ott nicht antun, seitdem er im August in gesegnetem Alter entschlafen ist.

          Oh, das wusste ich nicht bzw. es war mir entfallen.

          Ein bißchen mehr Respekt vor unseren Lehrern erwarte ich doch von dir

          Na, du weißt doch, mir waren die Altsprachen nicht vergönnt ...

          bloß Paule Engel vergeht einfach nicht

          Mein Gott, Paule muss doch schon stramm auf die 80 zugehen, wenn er sie nicht sogar schon überschritten hat.

          Freundschaft!
          Siechfred

          --
          Hinweis an alle Karnevalsmuffel: Aschermittwoch ist alles vorbei.
          1. hallo Torsten,

            Mein Gott, Paule muss doch schon stramm auf die 80 zugehen, wenn er sie nicht sogar schon überschritten hat.

            Er hat sie bereits deutlich überschritten. Aber er hat auch die Möglichkeit entdeckt, sich jetzt von Jahr zu Jahr bei irgendwelchen Abiturfeiern seiner ehemaligen "Schäfchen" herumreichen zu lassen, und nimmt das offensichtlich mit Vergnügen wahr. Ich weiß das von mehreren Klassenstufen unserer Penne, und sie alle finden das gut, weil Paule der "Engel" geblieben ist, der er auch als Lehrer schon war. Ein paar liebenwürdige Schwächen gibts natürlich. Das macht aber nix. Paule Engel war und ist immer noch der Mann, der aus seinem Familiennamen ein Programm machen konnte  -  freilich ohne zu verstehen, was er damit für seine Schüler anrichtete.

            Grüße aus Berlin

            Christoph S.

            1. Hallo Christoph.

              Er hat sie bereits deutlich überschritten [...]

              Naja, ich bekomme regelmäßig Infos über Paule, da meine Eltern bei seinem Sohn in Behandlung sind :) Aber dass er die 80 schon überschritten hat, wusste ich noch nicht, irgendwie sieht er bei jedem Klassentreffen immer noch so aus wie anno 1989/90.

              Freundschaft!
              Siechfred

              --
              Hinweis an alle Karnevalsmuffel: Aschermittwoch ist alles vorbei.
    2. ähm ...

      Ebenfalls: äähm...

      meines Wissens heißt es "mehrere modus" (was aber wie "moduhhhhs" gesprochen werden müßte). Ein bißchen Erinnerung an den gewiß lange vergangenen Latein-Unterricht schadet ja nicht ;-)

      Soweit ich weiß ist es modi!? Hatte nie latein, nur englisch und französisch - realschule halt

      1. hallo manuel,

        Soweit ich weiß ist es modi!? Hatte nie latein, nur englisch und französisch - realschule halt

        Dann misch dich hier mal nicht ein, ja!

        Kusch!

        Lerne Latein!

        In die Ecke stellen und mindestens dreizehn Kniebeugen machen!

        Grüße aus Berlin

        Christoph S.

    3. Hallo Christoph,

      meines Wissens heißt es "mehrere modus" (was aber wie "moduhhhhs"
      gesprochen werden müßte). Ein bißchen Erinnerung an den gewiß lange
      vergangenen Latein-Unterricht schadet ja nicht ;-)

      Mein Stowasser sagt »modus, -i (m) - Art und Weise«. Also Modi.

      Grüße,
       CK

      --
      Die Wirklichkeit hat weder ein Inneres, noch ein Äußeres, noch ein Zentrum.
      http://wwwtech.de/
      1. hallo CK,

        Mein Stowasser sagt »modus, -i (m) - Art und Weise«. Also Modi.

        Hundertwasser war ein Ästhet, aber kein Lateinkundiger *gg*

        Mein Taschenheinichen sagt:
        modus, u (m)  -  Maß (urv.), Maßstab; Größe; Grenze; Mäßigung; Vorschrift; Art, Form, Melodie

        Und mein Benseler (Ausgabe immerhin von 1897, aber als Lehrbuch bei uns 1966 bis 1970 zugelassen) behauptet dasselbe.

        In diesem Fall stelle ich ausnahmsweise mal die These auf, daß der, der sich auf die älteren Quellen stützt, recht hat ;-)

        Grüße aus Berlin

        Christoph S.

        1. Hallo Christoph,

          Mein Stowasser sagt »modus, -i (m) - Art und Weise«. Also Modi.

          Hundertwasser war ein Ästhet, aber kein Lateinkundiger *gg*

          Der Stowasser ist das Standard-Woerterbuch der deutschen Schueler- und
          Studentenschaft fuer Latein, vergleiche auch

          http://www.amazon.de/exec/obidos/ASIN/3209014957/

          Mein Taschenheinichen sagt:
          modus, u (m)  -  Maß (urv.), Maßstab; Größe; Grenze; Mäßigung;
          Vorschrift; Art, Form, Melodie

          Falsches Wort. modus mit der Bedeutung »Art und Weise« ist eindeutig
          o-Deklination, bisher hab ich das noch nicht anders gesehen. Wohl aber habe
          ich modus in der u-Deklination auch schon gesehen.

          Grüße,
           CK

          --
          Der Verstand steht ueber allem. Was durch die Vorstellungskraft nicht geschaffen werden kann, existiert nicht.
          http://wwwtech.de/
          1. hallo CK,

            Der Stowasser ist das Standard-Woerterbuch der deutschen Schueler- und
            Studentenschaft fuer Latein, vergleiche auch http://www.amazon.de/exec/obidos/ASIN/3209014957/

            Weiß ich doch  -  wir hatten das übrigens schonmal, wenn du dich im Archiv umschaust.

            Mein Taschenheinichen sagt:
            modus, u (m)  -  Maß (urv.), Maßstab; Größe; Grenze; Mäßigung;
            Vorschrift; Art, Form, Melodie
            Falsches Wort.

            Aaaahhh - ja, das ist möglich. Aber um das jetzt auseinanderzuklamüsern, müßte ich meinen Holunderwein für den Rest des Abends wegschließen, und _das_ willst du mir doch nicht antun, oder?

            Wohl aber habe ich modus in der u-Deklination auch schon gesehen.

            Na bitte. Man müßte das einen außergerichtlichen Vergleich nennen. Den habe ich natürlich gewonnen, weil ich mehr Holunderwein im Haus habe als du ;-)

            Grüße aus Berlin

            Christoph S.

            PS: welche Bedeutung hat der elfteelfte in diesem Zusammenhang?

            1. Moin moin

              Na bitte. Man müßte das einen außergerichtlichen Vergleich nennen. Den habe ich natürlich gewonnen, weil ich mehr Holunderwein im Haus habe als du ;-)

              PS: welche Bedeutung hat der elfteelfte in diesem Zusammenhang?

              1.) Holunderwein kann man nur runterwürgen, wenn man besoffen ist.
              2.) Karneval wirft seinen Schatten unter die Augen...

              Und Du hast über Kölsch geschimpft... tststs :)

              Gruß,
              Marc.

              --
              Und immer schön
              trinken
              1. Hi,

                Und Du hast über Kölsch geschimpft... tststs :)

                Hat Kölsch noch einen anderen Existenzgrund?

                cu,
                Andreas

                --
                Warum nennt sich Andreas hier MudGuard?
                Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    4. Hallo du da draußen,

      meines Wissens heißt es "mehrere modus" (was aber wie "moduhhhhs" gesprochen werden müßte). Ein bißchen Erinnerung an den gewiß lange vergangenen Latein-Unterricht schadet ja nicht ;-)

      Das war vielleicht bei »Kasus« so, nicht aber bei »Modus«. Aber ich musste auch nachschlagen; die Lateiner sind da ja ziemlich komisch mit ihren Deklinationen:
      Kasus -- Kasus
      Modus -- Modi
      Tempus -- Tempora

      Und da soll noch einer durchblicken... ;-)

      Grüße von hier drinnen, aus Biberach an der Riss,
      Candid Dauth (Dogfish)

      --
      »Bismarck biss Mark, bis Mark Bismarck biss!«
      http://cdauth.net.tc/
      ie:{ fl:( br: va:} ls:[ fo:| rl:( n4:( ss:) de:> js:( ch:| sh:( mo:) zu:|
    5. Hi,

      meines Wissens heißt es "mehrere modus" (was aber wie "moduhhhhs" gesprochen werden müßte). Ein bißchen Erinnerung an den gewiß lange vergangenen Latein-Unterricht schadet ja nicht ;-)

      Meines Wissens gehört modus zur zweiten Deklination (o-Deklination), womit der Plural modi korrekt ist.

      Zur 4. Deklination (u-Deklination) gehört neben dem bereits erwähnten casus auch folgende auf us endende Worte:
      status, manus, domus, tribus
      Und natürlich die auf u endenden Worte wie cornu.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. hi retour,

        Zur 4. Deklination (u-Deklination) gehört neben dem bereits erwähnten casus auch folgende auf us endende Worte:
        status, manus, domus, tribus
        Und natürlich die auf u endenden Worte wie cornu.

        CUM CORNU MEO AUFSPIESSU TEO

        Womit wir deutlich in die Nähe des 11.11. rücken ...

        ;-)

        freundlichen Abend noch

        Christoph S.

  3. Hello,

    Du braucht vor allem eine Locking-Strategie. Die íst in Deinem Fall aber noch ganz einfach.

    Benutze einfach die Funktion:

    #------------------------------------------------------------------------------

    Funktion softlock()

    #------------------------------------------------------------------------------

    Datei im Lock Modus $lockmode öffnen und Handle zurückgeben

    W, WRITE  = Lock Exclusive und (rb+)

    R, READ   = Lock Shared    und (rb)

    C, Create = Try to Create and lock exclusive (xb+)

    function softlock( $lockfile_name,             ## Qualifizierter Dateiname
                       $mode,                      ## Öffnungs- und Sperranforderung wie oben
                       &$lastwrite,                ## Letztes Aktualisierungsdatum
                       &$error_no                  ## Duchgeschleifter Fehler
                     )
    {
      $php_errormsg ='';                           ## ist nicht angelegt, solange
                                                   ## kein Fehler auftrat
      $lastwrite = false;                          ## kein Modifikationsdatum vorhanden

    if ($error_no > 0) return false;             ## Bei Vorfehler abbrechen

    ## Lockmode feststellen
      $lockmode = strtoupper($mode);

    if ($mode == 'W')
      {
        $openmode = 'rb+';
        $lockmode = LOCK_EX;
      }
      elseif ($mode == 'C')
      {
        $openmode = 'xb+';
        $error_no = 8;                               ## Datei wurde angelegt
        $lockmode = LOCK_EX;
      }
      elseif($mode == 'R')
      {
        $openmode = 'rb';
        $lockmode = LOCK_SH;
      }
      else
      {
        $error_no = 100;                             ## falsche Funktionsnutzung
        return false;
      }

    ## Dateihandle beschaffen

    for ($x=0;$x<5;$x++)                           ## Schleife 5 mal durchlaufen
      {
        clearstatcache();
        $php_errormsg = '';

    if($lh = @fopen($lockfile_name,$openmode))
        {
          $error_no = 0;
          break;                                     ## oder bei Erfolg abbrechen
        }
        else
        {
          $errormsg = strtolower($php_errormsg);

    if(strpos($errormsg,'invalid argument')!==false)
          {
            $error_no = 101;                         ## hier könnte man auch überlegen
            $openmode = 'a+';                        ## es doch mit rb+ zu versuchen

    if ($fh1 = fopen($lockfile_name,$openmode))
            {
              $openmode = 'rb+';                     ## es doch mit rb+ zu versuchen
              fclose($fh1);                          ## Hilfshandle wieder abgeben
              $error_no = 8;
            }
            else
            return false;
          }
          elseif(strpos($errormsg,'illegal operation argument')!==false)
          {
            $error_no = 101;
            $openmode = 'a+';                        ## Datei hilfsweise mit a+ anlegen

    if ($fh1 = fopen($lockfile_name,$openmode))
            {
              $openmode = 'rb+';                     ## es doch mit rb+ zu versuchen
              fclose($fh1);                          ## Hilfshandle wieder abgeben
              $error_no = 8;
            }
            else
            return false;
          }
          elseif(strpos($errormsg,'no such file or directory')!==false)
          {
            $error_no = 2;
            return false;
          }
          elseif(strpos($errormsg,'permission denied')!==false and $error_no == 8)
          {
            return false;              ## damit Fehler 8 überhaupt nach draußen kommt
          }
          elseif(strpos($errormsg,'permission denied')!==false)
          {
            $error_no = 5;
            return false;
          }
          elseif(strpos($errormsg,'file exists')!==false)
          {
            $openmode = 'rb+';
          }
        }
        ## zur Zeit sind fopen() und dio_open() noch nicht aufeinander abgestimmt
        ## Eine Verzögerung beim Öffen ist daher noch nicht sinnvoll

    #usleep(8000);                               ## 8ms warten bis zum nächsten
      }                                              ## Öffnungsversuch

    if (!$lh)
      {
        $error_no = 5;                               ## konnte Datei nicht öffnen
        return false;                                ## bei Misserfolg Funktionsende
      }

    # Lockversuch
      for ($x=0;$x<5;$x++)
      {
        if (@flock($lh,$lockmode + LOCK_NB))
        {
          $lastwrite = filemtime($lockfile_name);    ## letzes Modifikationsdatum
          return $lh;
        }
        usleep(8000);  ## 8ms warten bis zum nächsten Versuch
      }

    $error_no = 6;                                 ## konnte Datei nicht sperren
      fclose($lh);
      return false;
    }

    Wenn die ein Handle zurückliefert, kannst Du arbeiten, wenn nicht, musast Du halt den Fehler auswerten. Ich habe zum Thema "Dateiöffnung " und "Locking" immer noch einen dreiviertelfertige Artikel hier rumfliegen. Ich komme einfach nicht dazu, dafür mal die Grafiken anzufertigen zum Thema "Zeitverhalten".

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau