2017-02-01 98 views
-1

UDDATE:這是一個S3存儲問題(見ANSWER)使用file_get_contents在php中同時下載多個文件?

我期待上傳一些代碼,從它使用的file_get_contents命令下載文件一次一個的S3存儲讀取文件。

開始

file_get_contents(s3://file1.json) 

等待,直到完成,然後開始下一個下載:

file_get_contents(s3://file2.json) 

而且我想,而不是讓他們都開始一次,以節省時間。像這樣:

開始無論是在同一時間:在同一時間

file_get_contents(s3://file1.json) 
file_get_contents(s3://file2.json) 

等待他們倆來完成。

我已經看到多捲曲請求,但沒有關於這個主題的file_get_contents,這有可能嗎?

編輯:目前我正在看的代碼使用s3://它似乎不適用於捲曲。這是獲得亞馬遜S3存儲桶的一種方式。

EDIT2:當前的代碼示例:

function get_json_file($filename = false){ 

     if(!$filename) return false; 

     // builds s3://somefile.on.amazon.com/file.json 
     $path = $this->get_json_filename($filename); 

     if(!$filename || !file_exists($path)){ 
      return false; 
     } 
     elseif(file_exists($path)) { 
      $data = file_get_contents($path); 
     } 
     else $data = false; 
     return (empty($data) ? false : json_decode($data , true)); 

    } 
+0

現在,我敢肯定,你知道每個人在心中的問題,什麼是' s3'?一個常數?因爲':'是一個變量或常量的無效命名。 – Xorifelse

+2

如果你想讓1個腳本使用'多個'線程,可以使用curl或某種異步包含。 'file_get_contents()'只是一個來自資源的GET請求。 – Xorifelse

+0

s3://由於某種原因正常工作,這是亞馬遜獲取數據的私人方式。我不能使用s3://使用它出現的curl來訪問它。 –

回答

-1

答:S3保護,需要特別的URI

謝謝你們對意見響應。今天早些時候,當我問這個問題的時候,我很喜歡這樣做。

這是交易,我們使用的php版本不允許使用線程。因此,要請求多個URL,您需要使用多捲曲選項。 s://以某種方式與我以前錯過的S3的類文件一起工作。因此怪異的命名。

此外,重要的是,如果您不關心保護S3上的數據,您可以將其公開並且不存在此問題。在我的情況下,數據需要受到某種程度的保護,因此URI中需要大量的東西。

您可以使用Amazon的S3類從S3上的URI和存儲桶名稱生成安全鏈接。這將返回適合您的存儲桶的URL。例如,S3類可以手動下載或通過laravel中的作曲者安裝。它要求您安裝具有密鑰的用戶以在AWS控制檯中訪問此密鑰。

$bucketName = "my-amazon-bucket"; 
$uri = "/somefile.txt" 
$secure_url = $s3->getObjectUrl($bucketName, $uri, '+5 minutes'); 

,這將產生一個有效的URL來訪問它可以捲曲等使用S3的文件..

https://domain.s3.amazonaws.com/bucket/filename.zip?AWSAccessKeyId=myaccesskey&Expires=1305311393&Signature=mysignature