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 ));
}
答案 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