Edit report at http://bugs.php.net/bug.php?id=52335&edit=1
ID: 52335
User updated by: jbondc at openmv dot com
Reported by: jbondc at openmv dot com
Summary: fseek() on memory stream behavior different then
file
Status: Assigned
Type: Bug
Package: Streams related
Operating System: FreeBSD 7.2
PHP Version: 5.2.14RC2
Assigned To: cataphract
Block user comment: N
Private report: N
New Comment:
Thanks, saw the changes in fseek.xml
What about adding streamWrapper::hasFeature(/* int */$featureId)
const STREAM_FEAT_FWDSEEK = 1;
const STREAM_FEAT_OTHER = 2;
//...
$stream = new File_Stream('/tmp/foo');
$stream->isSupported(STREAM_FEAT_FWDSEEK); // true
fseek($stream, 1024); // NULL bytes added
$stream = new Memory_Stream('/tmp/foo');
$stream->isSupported(STREAM_FEAT_FWDSEEK); // false
fseek($stream, 1024); // false
The goal is to have a consistent api to write to a binary stream.
I can give it some more thought, other stream 'features'.
Previous Comments:
------------------------------------------------------------------------
[2010-11-13 16:10:48] [email protected]
I've fixed the doc part, but on a closer inspection the behavior of the
memory stream on past-the-end-of-file seeks could be improved.
------------------------------------------------------------------------
[2010-11-13 16:09:54] [email protected]
Automatic comment from SVN on behalf of cataphract
Revision: http://svn.php.net/viewvc/?view=revision&revision=305317
Log: - Behavior when seeking past the end of file.
Partially addresses bug #52335.
- Expanded note on how the stream may not support seeking.
------------------------------------------------------------------------
[2010-07-14 13:18:10] jbondc at openmv dot com
Description:
------------
May not be a bug but a documentation issue
With a file, fseek() to an offset that doesn't exist results in NULL
bytes added.
Using a memory stream, fseek() just fails.
Which one is the expected behavior? Also for
streamWrapper::stream_seek()
Test script:
---------------
$sp = fopen("php://memory", 'w+');
fseek($sp, 1024); // fails why?
echo fwrite($sp, "abc"); // 3
fseek($sp, 1024); //
echo fread($sp, 3); // NULL..
$sp = fopen("/tmp/foo", 'w+');
fseek($sp, 1024);
echo fwrite($sp, "abc"); // 3
fseek($sp, 1024);
echo fread($sp, 3); // abc
Expected result:
----------------
3abc3abc
Actual result:
--------------
33abc
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=52335&edit=1