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');

Таким образом, чтобы очистить что-нибудь, если были добавлены. Теперь работает нормально.

Спасибо Марку Бейкеру за вашу ценную поддержку в процессе отладки.

Другие вопросы по тегам