From: blacklight at samtelecom dot ru Operating system: unix PHP version: 4.3.7 PHP Bug Type: Filesystem function related Bug description: fseek & fwrite error
Description: ------------ multiple calls of fwrite() do not store data in the file, except last call, when opened large files (about 16mb) with fopen(filename, 'a+b') This error does not appear when files opened with fopen(filename, 'r+b'); Reproduce code: --------------- define(BUFFER_SIZE, 65536); function fCut($f, $pos, $size) { $fst = fstat($f); $fs = $fst["size"]; if (($pos < 0) || ($pos >= $fs) || ($size <= 0)) return false; $ps = $pos; $sz = $fs - $ps - $size; while ($sz > 0) { $s = $sz; if ($s > BUFFER_SIZE) { $s = BUFFER_SIZE; } fseek($f, $ps + $size); $buf = fread($f, $s); fseek($f, $ps); $l = fwrite($f, $buf); $sz -= $s; $ps += $s; } ftruncate($f, max($fs - $size, $pos)); return true; } // fCut - cutting $size bites in $f, from $pos $f = fopen(filename, 'a+b'); flock($f, 2); fcut($f, 0, 123456); flock($f, 3); fclose($f); Expected result: ---------------- 123456 bites of file 'filename' must be deleted from position 0; Actual result: -------------- all data still the same, except block that transfered with last calls of fread/fwrite. Note: this bug appears only in 'a+b' mode, but in 'r+b' all works fine. -- Edit bug report at http://bugs.php.net/?id=29503&edit=1 -- Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=29503&r=trysnapshot4 Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=29503&r=trysnapshot5 Fixed in CVS: http://bugs.php.net/fix.php?id=29503&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=29503&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=29503&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=29503&r=needscript Try newer version: http://bugs.php.net/fix.php?id=29503&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=29503&r=support Expected behavior: http://bugs.php.net/fix.php?id=29503&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=29503&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=29503&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=29503&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=29503&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=29503&r=dst IIS Stability: http://bugs.php.net/fix.php?id=29503&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=29503&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=29503&r=float