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] cataphr...@php.net 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] cataphr...@php.net 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