| 
        php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
  [2014-12-01 12:42 UTC] blaesius at krumedia dot de
 Description:
------------
When using a memory stream and the read filter "convert.base64-encode" the last character is missing from the output if the base64 conversion needs padding bytes.
This doesn't happen when using a file.
Test script:
---------------
$testString = 'test';
$stream = fopen('php://memory','r+');
fwrite($stream, $testString);
rewind($stream);
$filter = stream_filter_append($stream, 'convert.base64-encode');
echo "memoryStream = " . stream_get_contents($stream).PHP_EOL;
$fileStream = fopen(__DIR__.'/base64test.txt','w+');
fwrite($fileStream , $testString);
rewind($fileStream );
$filter = stream_filter_append($fileStream , 'convert.base64-encode');
echo "fileStream = " . stream_get_contents($fileStream ).PHP_EOL;
Expected result:
----------------
memoryStream = dGVzdA==
fileStream = dGVzdA==
Actual result:
--------------
memoryStream = dGVz
fileStream = dGVzdA==
PatchesPull Requests
Pull requests: 
HistoryAllCommentsChangesGit/SVN commits             
             | 
    |||||||||||||||||||||||||||||||||
            
                 
                Copyright © 2001-2025 The PHP GroupAll rights reserved.  | 
        Last updated: Tue Nov 04 13:00:02 2025 UTC | 
Hm. It appears to work correctly on 3v41.org. Perhaps it's a bug in the debian package: echo phpversion() . "\r"; $testString = 'test'; $stream = fopen('php://memory','r+'); fwrite($stream, $testString); rewind($stream); $filter = stream_filter_append($stream, 'convert.base64-encode'); echo "memoryStream = " . stream_get_contents($stream).PHP_EOL; $fileStream = fopen('/tmp/base64test.txt','w+'); fwrite($fileStream , $testString); Results: 5.6.12-1+deb.sury.org~trusty+1 memoryStream = dGVz fileStream = dGVzdA==