我在EC2上使用PHP SDK。当我想从s3下载大文件时。我使用以下代码:
$clif = S3Client::factory(array(
'key' => DIR_UEK,
'secret' => DIR_UESK));
$clif->registerStreamWrapper();
$context = stream_context_create(array(
's3' => array(
'seekable' => true
)));
$stream = fopen("s3://{$bucketname}/{$key}", 'r',false,$context);
fseek($stream,$byte_from);
其中$ byte_from由HTTPRANGE定义。(这是我的代码的一部分) 当我检查error.log时,我可以看到此错误:
当缓冲流仅包含0个字节时,无法寻求字节320971748
我该如何解决这个问题?
答案 0 :(得分:0)
打开可搜索流时,只能搜索读取的字节。 1
您需要先阅读$bytes_from
才能找到它。
// Read $bytes_from bytes from stream
fread($stream,$byte_from);
fseek($stream,$byte_from);
// Read $next_chunk bytes after $bytes_from
fread($stream, $next_chunk);
请记住要在磁盘上有足够的存储空间,因为对于大于2MB的大文件,流式数据将写入磁盘。