|   | php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
| 
  [2003-03-13 11:41 UTC] fbeyer at clickhand dot de
 I have found this bug in 4.3.0, searched matching bug reports and they said the bug is fixed in the latest stable CVS snap. I have downloaded and installed today's latest version, the fix is mentioned in the news.txt, but the bug is still there.
Here are my test files for a short reproducing script:
file test.txt:
(saved in dos format, ie. newlines are CRLF/\r\n):
------------------------------
This is a test file
in win32 / dos format
ie. lines end with CRLF
resp. \r\n
------------------------------
file test.php
------------------------------
<?php
$fp = fopen('test.txt', 'r');
$contents = fread($fp, 30);
fseek($fp, ftell($fp));
$contents .= fread($fp, 30);
echo $contents;
echo "\n\n";
var_dump(strpos($contents, "\r"));
?>
------------------------------
Output:
------------------------------
This is a test file
in win32 // dos format
ie. lines end wit
bool(false)
------------------------------
It can be seen that fseek() or ftell() don't work as expected: the '/' character is read twice.
Furthermore, fread() doesn't return \r characters. I also have tested this for fgetc() - \r is not read.
A strange thing is that this bug doesn't occurr in the newest php5/ze2 snapshot.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             | |||||||||||||||||||||||||||||||||||||
|  Copyright © 2001-2025 The PHP Group All rights reserved. | Last updated: Fri Oct 31 08:00:01 2025 UTC | 
I still have a related bug on Windows XP using PHP 4.3.4. Sample: <? header("Content-type: text/plain"); ini_set("auto_detect_line_endings", true); // Doesn't matter $file=fopen(__FILE__,"rt"); // "t" doesn't matter too $linenumber=0; while ($file && $line=fgets($file, 65536)) { echo ("$linenumber: ".$line."\n"); fseek($file, ftell($file), SEEK_SET); $linenumber++; } fclose($file); ?> fseek() should not do anything but it _shifts_ the file pointer (as many bytes back as many "\r" are in the last read input) if I the __FILE__ has DOS encoded line breaks. As the result every line is followed by a blank line in the sample output.