2017-02-01 134 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