Hi Tom,
Wäre nett, wenn Du nochmals rückmelden könntest, ob "ab+" auch Windows funktioniert.
ich hatte die Datei bereits binär geöffnet (das war eine Ungenauigkeit in meinem vorigen Posting). Ich hab jetzt mal ein wenig getestet - es funktioniert bei mir definitiv nicht. Die Daten werden nach dem Öffnen im append mode _immer_ an das Ende der Datei gehängt, unabhängig von der Position des Dateizeigers, z.B.:
<?php
$fh = fopen('./test.txt', 'wb');
fwrite($fh, '123');
fclose($fh);
$fh = fopen('./test.txt', 'a+b');
fseek($fh, 0, SEEK_SET);
echo ftell($fh) . '<br>'; // Ausgabe: 0
fwrite($fh, '456');
fclose($fh);
$fh = fopen('./test.txt', 'rb');
echo fread($fh, filesize('./test.txt')); // Ausgabe: 123456
fclose($fh);
?>
Unter bugs.php.net bin ich außerdem auf zwei Kommentare eines PHP-Supporters gestoßen:
- "'a' mode forces the kernel to always write at the end of the file.
ftell() will give undefined results for append-only streams, as will
seeking. Writing to such a file should always be appended, regardless of the results from ftell()." (http://bugs.php.net/bug.php?id=24071) - "using fseek() and fwrite() on a file opened in append mode will lead to undefined results." (http://bugs.php.net/bug.php?id=29503)
Für mich hört sich das beschriebene Verhalten daher völlig normal an.
Gruß,
Andreas.