Fabienne: In Datei schreiben

Hi zusammen,

habe ein Problem auf einer Windows-Maschine:

Ich möchte in eine Datei (Pfad passt) etwas hineinschreiben:

$data = fopen($path_to_files."log.txt","w+");
flock($data,LOCK_SH);
$search_log="Bla";
fwrite($data, $search_log);
flock($data,LOCK_UN);
fclose($data);

Jedoch die Datei wird jedesmal nur geleert (also Inhalt gelöscht, = w+). Neuer Inhalt wird nicht geschrieben.

Wo liegt mein Fehler?

Viele Grüße
Fabienne

  1. Moin!

    <?php
    $data = fopen("test3.txt","w+");
    flock($data,LOCK_SH);
    $search_log="Bla";
    fwrite($data, $search_log);
    flock($data,LOCK_UN);
    fclose($data);
    ?>

    Hat es bei mir getan...

    $data = fopen($path_to_files."log.txt","w+");
    Wo liegt mein Fehler?

    Was steht in "$path_to_files?"

    teste mit:

    <?php
    $datei='test3.txt';
    if (! is_file($datei)) {
       die ("$datei keine Datei.\n");
    }
    if (! is_readable($datei)) {
       die ("$datei ist Datei, aber nicht lesbar.\n");
    }
    if (! is_writable($datei)) {
       die ("$datei ist lesbare Datei, aber nicht schreibbar.\n");
    }
    $data = fopen($datei,"w+") or die("Konnte $datei nicht öffnen.\n");
    flock($data,LOCK_SH) or die ("Konnte Lock nicht setzen.\n");
    #flock($data,LOCK_SH);
    $search_log="Bla";
    fwrite($data, $search_log) or die ("Schreiben ging nicht\n");
    flock($data,LOCK_UN);
    fclose($data);
    ?>

    Möglicherweise solltest Du in der php.ini die Ausgabe der Notizen nicht unterdrücken.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
  2. Hellihello Fabienne,

    habe ein Problem auf einer Windows-Maschine:

    Ich möchte in eine Datei (Pfad passt) etwas hineinschreiben:

    $data = fopen($path_to_files."log.txt","w+");
    flock($data,LOCK_SH);
    $search_log="Bla";
    fwrite($data, $search_log);
    flock($data,LOCK_UN);
    fclose($data);

    Jedoch die Datei wird jedesmal nur geleert (also Inhalt gelöscht, = w+). Neuer Inhalt wird nicht geschrieben.

    Wo liegt mein Fehler?

    hat es einen Grund, dass Du nicht file_get_contents() und file_put_contents() benutzen willst?

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Hi,

      hat es einen Grund, dass Du nicht file_get_contents() und file_put_contents() benutzen willst?

      Da im Script flock auftaucht, ist vermutlich das der Grund. File Locking funktioniert in PHP ueber Dateihandles - die du bei file_get/put_contents aber nicht zur Verfuegung hast.

      MfG ChrisB

  3. (Hallo|Hi(ho)|Tag) Fabienne,

    habe ein Problem auf einer Windows-Maschine:

    Ich möchte in eine Datei (Pfad passt) etwas hineinschreiben:

    $data = fopen($path_to_files."log.txt","w+");
    flock($data,LOCK_SH);
    $search_log="Bla";
    fwrite($data, $search_log);
    flock($data,LOCK_UN);
    fclose($data);

    Jedoch die Datei wird jedesmal nur geleert (also Inhalt gelöscht, = w+). Neuer Inhalt wird nicht geschrieben.

    Der Inhalt von $search_log lässt sich mit var_dump() ausgeben. Diese
    Variable könnte bspw. die Werte FALSE, NULL oder '' enthalten oder gar
    nicht definiert sein (Tippfehler).

    Außerdem lohnt es sich, den Rückgabewert von fwrite() mit var_dump() zu überprüfen.
    Der enthält im Erfolgsfall die Zahl der geschriebenen Bytes, im Fehlerfall ist er FALSE.

    An den Anfang des Scripts gehört ein
    error_reporting(E_ALL);
    Das zeigt Warnungen, die sonst möglicherweise unterdrückt worden sind.

    Wenn du in die Datei schreiben willst, solltest du flock() mit LOCK_EX ("exclusive" == "ausschließlich") benutzen.
    Wenn du LOCK_SH ("shared" == "gemeinsam genutzt") nimmst, könnte jede Instanz dieses Scripts in die Datei schreiben. Das gäbe ein ziemliches Durcheinander.

    MffG
    EisFuX

    1. Hi EisFux,

      Wenn du in die Datei schreiben willst, solltest du flock() mit LOCK_EX ("exclusive" == "ausschließlich") benutzen.

      Das war der Fehler. Mit LOCK_EX klappts.

      Vielen Dank Fabienne