2014-01-19 34 views
1

我正在使用亞馬遜S3來保存大小可以達到1GB的文件。我需要在php中的這些文件的部分流到瀏覽器。我正在使用StreamWrapper,它允許使用文件系統方法處理S3上的文件。我有兩種獲得正確零件的方法。什麼是正確的方式尋求在PHP的Amzon s3?

HTTP範圍標頭:S3的http url接受範圍標頭。我可以向S3發送一個經過驗證的捲曲請求,並帶有適當的範圍標題以獲得所需的部分。

curl --header "Range=$startbit-$endbit" $url 

FREAD()到所需要點:我還可以使用followng得到需要的部分。

$f=fopen('s3://bucket.key'); 
fread($f, $startbit); 
echo fread($f, $length); 

哪個更經濟?有沒有更好的方法來做到這一點?

回答

0

fread方法是瘋了。

  • 它浪費網絡和CPU。
  • 這肯定會引入延遲(比例如何你想遙遠的文件搜索)
  • 它可以輕易的殺死你的服務器,你已經實現的方式:做fread(..$length)意味着程序將使用的RAM $長度。如果你一次做了一堆,你的服務器可能會出去吃午飯。

通過範圍標題進行流式傳輸是完全合理的。您當前的圖書館可能不支持它,但它應該很容易添加(例如,以fopen以某種方式傳遞範圍標題)

+0

s3流包裝器不提供前向搜索,因此fseek不起作用。我沒有其他選擇,只能使用ec3中的http捲曲到s3來使用範圍標題? – cnvzmxcvmcx

相關問題