Reputation: 1459
I am fairly new to PHP and just trying to convert something I did in C. The idiom for reading from a file in C that I was taught was:
while ((c = getchar()) != EOF) {
doSomethingWith(c);
}
I've done some reading and it would seem that the 'right' way to do this in PHP is:
while (!feof($file)) {
$c = fgetc($file);
doSomethingWith($c);
}
My question is: Is it ok to combine the two as follows (I have tried it, and its working ok on my test file), or are there situations where this could find a null before EOF?:
while (($c = fgets($f)) != null) {
doSomethingWith($c);
}
Cheers in advance
Steve
Upvotes: 0
Views: 2425
Reputation: 437554
fgets
is documented to return false
when there is no more data to read. Therefore, the technically correct solution would be
// Notice the !== [non-identical] operator below
while (($c = fgets($f)) !== false) {
doSomethingWith($c);
}
This is better because fgets
could legitimately return an empty (zero-length) string, which would compare equal to null
when using the equality operator. The operator !==
also checks the type of its operands, so this way you are covered.
Upvotes: 0
Reputation: 132011
It's ok, but the way you are doing it it's wrong (at least "not correct at all"). fgets()
returns false
, if the end of the file is reached, thus you should test against false
instead. It works for you, because you use the "simple" equality operator (==
), that will case null
to false
, when comparing against a boolean.
Returns a string of up to length - 1 bytes read from the file pointed to by handle. If there is no more data to read in the file pointer, then FALSE is returned.
If an error occurs, FALSE is returned.
This means, it have to look like
while (($c = fgets($f)) !== false) {
doSomethingWith($c);
}
Upvotes: 2