Re: A problem with fgets()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Well, finally found an explanation and a solution: calling fgets()
twice. Because if there's no length limit supplied (and it's not EOF)
when calling the function, it continues reading until it finds the
first newline character. So calling fgets() again will ensure that it
will read from the _beginning_ of the *next* line:

<?php
function getCity($file)
{
   // Try to open the file
   if (!file_exists($file) || !($handle = fopen($file, "r")))
   {
       die('Could not open file for reading.');
   }

   $size = filesize($file);
   $randval = rand(0, $size);

   // Seek to a random position in the file
   fseek($handle, $randval);

   // Get random city name
   $line = trim(fgets($fp, 2048));
   $line = trim(fgets($fp, 2048));

   fclose($fp);

   // If line was empty, try again
   if(empty($line))
   {
       $line = getCity($file);
   }

   return($line);
}
?>

To clarify more, if the first call to fgets() reads the line
containing the city name 'Alexandria', it might be read as:
andria

Now calling fgets() again will definitely read the whole next line:
Dallas


>
> Yes, I agree that that note is complete hogwash, and have just deleted
> it!
>
> Cheers!
>
> Mike
>

Thanks. :)

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux