使用file_get_contents在php中同时下载多个文件?

时间:2017-02-01 02:34:41

标签: php amazon-s3

UDDATE:这是一个S3桶问题(见答案)

我希望上传一些从S3存储桶中读取文件的代码,该存储桶使用file_get_contents命令一次下载一个文件。

开始

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://它似乎与curl一起使用。这是获取亚马逊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 ));

    }

1 个答案:

答案 0 :(得分:-1)

答案:S3保护,需要特殊URI

谢谢各位回复评论。今天早些时候,当我问这个问题的时候,我就是这样做的。

这是交易,我们使用的php版本不允许线程化。因此,要请求多个URL,您需要使用多卷曲选项。 s://以某种方式使用了我以前错过的S3类文件。因此奇怪的命名。

另外,重要的是,如果您不关心保护S3上的数据,您可以公开并且不会出现此问题。在我的情况下,数据需要受到一定程度的保护,因此需要URI中的大量内容。

您可以使用Amazon的S3类从S3上的URI和存储桶名称生成安全链接。这将返回与您的存储桶一起使用的正确URL。 S3类可以手动下载,也可以通过laravel中的composer安装。它要求您安装具有密钥的用户以在AWS控制台中访问它。

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

这将生成一个有效的URL来访问S3上的文件,该文件可以与curl等一起使用。

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