Re: fopen('.', 'r') succeedes !?

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

 



Umberto Salsi wrote:

> Discovered today: fopen() opens '.' and '..' but fread() returns nothing
> without errors nor end-of-file, so this loop:
> 
>     $f = fopen('.', 'r');
>     if( $f === FALSE ) die("fopen failed");
>     $n = 0;
>     while(($s = fread($f, 10)) !== FALSE)
>         $n += strlen($s);
>     fclose($f);
>     echo "total bytes read: $n\n";
> 
> never ends! The same happens with '..'. Tested on PHP 5.6.3 and 7.0.0
> under Slackware 14.1 32-bits. Under Vista, instead, fopen() fails as
> expected.
> 
> Bug or specific feature under Linux?

According to the manual[]1] that is a feature:

| This function *may* also succeed when filename is a directory. If you
| are unsure whether filename is a file or a directory, you may need to
| use the is_dir() function before calling fopen().

(Emphasis mine.)

[1]
<http://php.net/manual/en/function.fopen.php#refsect1-function.fopen-notes>
[2] <http://php.net/manual/en/function.fopen.php#55434>
[3] <http://php.net/manual/en/function.fopen.php#37761>

There are some user contributed notes[2][3] on the manual page which
clarify what's happening.

I'm not sure why there's an infinite loop -- have you tried feof()
instead of relying on the return value of fread().

-- 
Christoph M. Becker

-- 
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