Amazon S3 StreamWrapper Fread Проблема в PHP
Я использую API Amazon 3 и настраиваю клиента для чтения в виде потока. Для меня вполне нормально использовать file_get_contents("s3://{bucket}/{key}"), который считывает полные данные для файла (я использую видеофайл и тестирую в моей локальной системе). Однако я пытаюсь оптимизировать память, используемую сценарием, и, таким образом, пытаюсь читать и возвращать данные по чанкам, как показано ниже:
$stream = @fopen("s3://{bucket}/{key}", 'r');
$buffer = 1024;
while(!feof($stream)) {
echo @fread($stream, $buffer);
flush();
}
Это не работает в моей локальной системе. Мне просто интересно, в чем может быть проблема с использованием этой техники. Поиском я обнаружил, что это также очень широко используемый метод. Так что, если кто-нибудь может дать какие-либо предположения о том, что здесь может быть не так, или о любом другом подходе, я должен попробовать, это будет очень полезно. Благодарю.
1 ответ
ОК, наконец-то есть решение. Каким-то образом, некоторые другие выходные данные добавляются в буфер. Я должен был поставить:
ob_get_clean();
header('Content-Type: video/quicktime');
Таким образом, чтобы очистить что-нибудь, если были добавлены. Теперь работает нормально.
Спасибо Марку Бейкеру за вашу ценную поддержку в процессе отладки.