|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #52335 fseek() on memory stream behavior different then file
Submitted: 2010-07-14 13:18 UTC Modified: 2017-10-24 07:52 UTC
Avg. Score:3.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: jbondc at openmv dot com Assigned:
Status: Open Package: Streams related
PHP Version: 5.2.14RC2 OS: FreeBSD 7.2
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2010-07-14 13:18 UTC] jbondc at openmv dot com
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:

Actual result:


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2010-10-12 17:53 UTC]
-Type: Bug +Type: Documentation Problem -Assigned To: +Assigned To: cataphract
 [2010-10-22 15:43 UTC]
-Package: Streams related +Package: Documentation problem
 [2010-11-13 16:09 UTC]
Automatic comment from SVN on behalf of cataphract
Log: - Behavior when seeking past the end of file.
  Partially addresses bug #52335.
- Expanded note on how the stream may not support seeking.
 [2010-11-13 16:10 UTC]
-Type: Documentation Problem +Type: Bug -Package: Documentation problem +Package: Streams related
 [2010-11-13 16:10 UTC]
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-22 14:55 UTC] jbondc at openmv dot com
Thanks, saw the changes in fseek.xml

What about adding streamWrapper::hasFeature(/* int */$featureId)

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'.
 [2017-10-24 07:52 UTC]
-Status: Assigned +Status: Open -Assigned To: cataphract +Assigned To:
PHP Copyright © 2001-2023 The PHP Group
All rights reserved.
Last updated: Thu Feb 02 09:05:52 2023 UTC