update page now

Voting

: eight plus zero?
(Example: nine)

The Note You're Voting On

ironoxid at libero dot it
19 years ago
I really thought that the feof() was TRUE when the logical file pointer is a EOF.
but no ! 
we need to read and get an empty record before the eof() reports TRUE.
So
$fp = fopen('test.bin','rb');
while(!feof($fp)) {
 $c = fgetc($fp);
 // ... do something with $c 
 echo ftell($fp), ",";
}
echo 'EOF!';
prints for two time the last byte position.
If our file length is 5 byte this code prints 
0,1,2,3,4,5,5,EOF!
Because of this, you have to do another check to verify if fgetc really reads another byte (to prevent error on "do something with $c" ^_^).
To prevent errors you have to use this code
$fp = fopen('test.bin','rb');
while(!feof($fp)) {
 $c = fgetc($fp);
 if($c === false) break;
 // ... do something with $c 
}
but this is the same of
$fp = fopen('test.bin','rb');
while(($c = fgetc($fp))!==false) {
 // ... do something with $c 
}
Consequently feof() is simply useless.
Before write this note I want to submit this as a php bug but one php developer said that this does not imply a bug in PHP itself (http://bugs.php.net/bug.php?id=35136&edit=2).
If this is not a bug I think that this need at least to be noticed.
Sorry for my bad english.
Bye ;)

<< Back to user notes page

AltStyle によって変換されたページ (->オリジナル) /