我对 PHP 的流转换过滤器 ( base64_encode ) 有一个非常奇怪的问题。我的目标是使用 AWS S3 SDK 的 streamWrapper 从 s3 存储桶读取文件并对其进行 base64 编码,将其回显到响应中。为此,我使用以下代码,
@ob_flush();
@flush();
$fh = fopen(<FILE_PATH>, 'r');
stream_filter_append($fh, 'convert.base64-encode');
fpassthru($fh);
fclose($fh);
这适用于所有类型的文件,但对于文本文件,它会删除最后一个字符。当我们解码 base64 响应时,最后一个字符丢失了。
例如,
Hello, world!
编码为SGVsbG8sIHdvcmxkIQ==
但是上面的函数在编码时省略了最后一个字符,产生以下
SGVsbG8sIHdvcmxk
解码为Hello, world
有什么想法吗?
非常感谢你帮助我。