Issue with "while ($c=fgetc($f))" Loop in PHP

Q

What's Wrong with "while ($c=fgetc($f)) {}" in PHP?

✍: FYIcenter.com

A

If you are using "while ($c=fgetc($f)) {}" to loop through each character in a file, the loop may end in the middle of the file when there is a "0" character, because PHP treats "0" as Boolean false. To properly loop to the end of the file, you should use "while ( ($c=fgetc($f)) !== false ) {}". Here is a PHP script example on incorrect testing of fgetc():

<?php 
$file = fopen("/temp/cgi.log", "w");
fwrite($file,"Remote host: 64.233.179.104.\r\n");
fwrite($file,"Query string: cate=102&order=down&lang=en.\r\n");
fclose($file); 

$file = fopen("/temp/cgi.log", "r");
while ( ($char=fgetc($file)) ) {
  print($char);
}
fclose($file); 
?>

This script will print:

Remote host: 64.233.179.1

As you can see the loop indeed stopped at character "0".

 

Reading and Writing Files in PHP

⇒⇒PHP Tutorials

2016-11-27, 393👍, 0💬