У меня очень странная проблема с фильтром преобразования потоков PHP (base64_encode). Моя цель — прочитать файл из корзины s3, используя streamWrapper пакета AWS S3 SDK и закодировать его в 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
Есть мысли, ребята?
Большое вам спасибо за помощь мне.
Я могу разобраться с поддержкой инженеров AWS.
Решение можно найти здесь https://github.com/aws/aws-sdk-php/issues/540.
Благодарю.
Других решений пока нет …