Edit report at https://bugs.php.net/bug.php?id=65492&edit=1
ID: 65492
Comment by: bixuehujin at gmail dot com
Reported by: foo at example dot com
Summary: Seeking beyond EOF leads to inconsistent results for
key() and current()
Status: Open
Type: Bug
Package: SPL related
Operating System: any
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
Another inconsistent:
Script:
----------------
$txt = <<< TXT
foo
bar
baz
TXT;
$file = new SplTempFileObject(-1);
$file->fwrite($txt);
$file->seek(0);
var_dump($file->fgets());
$file->seek(1);
var_dump($file->fgets());
Expect result:
----------------
string(4) "foo
"
string(3) "bar
"
Actual result:
--------------
string(4) "foo
"
string(3) "baz"
BTW:
---------------
The issue also existed in SplFileObject.
Previous Comments:
------------------------------------------------------------------------
[2013-08-21 06:56:34] foo at example dot com
Sorry, the last line in the Test Script should read
var_dump( $file->key(), $file->current() );
The problem does exist for fgetcsv() though, too. It will return NULL instead
of
the data at the last line.
------------------------------------------------------------------------
[2013-08-21 06:50:48] foo at example dot com
Description:
------------
When seek()'ing beyond the end of file in an SplFileObject,
SplFileObject::key()
will return the number of the last line in the file but
SplFileObject::current()
will return false. This is inconsistent.
Either SplFileObject::current() returns the content of the last line then, too.
Or
SplFileObject::key() should return false as well. As an alternative,
SplFileObject::seek() could raise an OutOfBoundsException when trying to seek
beyond EOF.
Test script:
---------------
$txt = <<< TXT
foo
bar
baz
TXT;
$file = new SplTempFileObject(-1);
$file->fwrite($txt);
$file->seek(100);
var_dump( $file->key(), $file->fgetcsv());
Expected result:
----------------
int(2)
baz
or
false
false
or
OutOfBoundsException
Actual result:
--------------
int(2)
NULL
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=65492&edit=1