Bug #68481 [Opn]: feof true on php://temp one byte early

From: Date: Tue, 06 Jan 2015 14:09:34 +0000
Subject: Bug #68481 [Opn]: feof true on php://temp one byte early
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-189685@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=68481&edit=1

 ID:                 68481
 User updated by:    tim_siebels_aurich at yahoo dot de
 Reported by:        tim_siebels_aurich at yahoo dot de
 Summary:            feof true on php://temp one byte early
 Status:             Open
 Type:               Bug
 Package:            Streams related
 Operating System:   Tested on Ubuntu
 PHP Version:        5.6.3
 Block user comment: N
 Private report:     N

 New Comment:

I am complaining that feof returns TRUE one byte early in php://temp.
When you read the description of the bug I explain how C handles it, and how I would expect it to
be.


Previous Comments:
------------------------------------------------------------------------
[2015-01-06 06:11:57] yvan dot burrie at hotmail dot com

Wait!!! This is not a bug! PHP imitates C++ feof() function from the STDIO library.

Read this: http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong

------------------------------------------------------------------------
[2015-01-03 12:48:18] yvan dot burrie at hotmail dot com

<?php

// yep, it's a bug!!!

$f = tmpfile();

fwrite($f, 'crap' ); // 4 bytes

rewind($f);

$i=1;
while( !feof($f) )
{
fread($f,1);
echo "$i\n";
$i++;
}

/*
outputs:

1
2
3
4
5

why the hell 5 bytes? should normally output 4 bytes:

1
2
3
4

*/

?>

------------------------------------------------------------------------
[2014-12-15 17:27:23] php at mcq8 dot be

I recently changed it for memory https://github.com/php/php-src/pull/936.
It would be better if all the streams behave the same way.

------------------------------------------------------------------------
[2014-12-13 18:18:40] sjaillet at gmail dot com

Maybe relevant, PHP & HHVM behave differently on feof().

When length bytes are read, feof() returns true on PHP while
HHVM still returns false. See code below:

```php
$stream = fopen('php://temp', 'r+');
fwrite($stream, "HelloWorld");
rewind($stream);
$result = fread($stream, 10);

echo $result . "\n";        // HelloWorld
var_dump(feof($stream));    // with PHP: true, with  HHVM: false
```

They both returns false after reading length + 1 bytes.

Would be great to have something consistent.

------------------------------------------------------------------------
[2014-12-13 18:07:30] tim_siebels_aurich at yahoo dot de

The test script is not correct obviously. The first fopen is supposed to open the file created in
the preceding line.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=68481


--
Edit this bug report at https://bugs.php.net/bug.php?id=68481&edit=1


Thread (9 messages)

« previous php.bugs (#189685) next »