我有一个包含文件的Amazon S3存储桶,并希望在Amazon EC2上生成强制下载zip文件(使用Amazon Linux,类似于CentOS / Redhat Linux)。
我已经在(post)数组中签名了所有网址,现在我正在使用此代码。
<?php
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
ini_set('memory_limit', '8192M');
$imageNumber = 0;
# create new zip opbject
$zip = new ZipArchive();
# create a temp file & open it
$tmp_file = tempnam('.','');
$zip->open($tmp_file, ZipArchive::CREATE);
foreach ($_POST['text'] as $key => $value) {
//Get extension
$ext = pathinfo(parse_url($value, PHP_URL_PATH), PATHINFO_EXTENSION);
# download file
$download_file = file_get_contents($value);
#add it to the zip
$zip->addFromString(basename($imageNumber.'-image.'.$ext),$download_file);
$imageNumber++;
}
# close zip
$zip->close();
# send the file to the browser as a download
header('Content-disposition: attachment; filename=download.zip');
header('Content-type: application/zip');
readfile($tmp_file);
?>
我的目标是尽可能降低EC2的成本,现在我的实例只有4GB。正如你所看到的,我已经增加了内存限制,问题是我有50-100个文件,每个大约5 MB,这是每个Zip文件几百MB,如果有几个人生成一个zip文件当然是个问题同时。
是否有更好的解决方案(更少的内存使用和EC2上的低成本)?