PHP ядро ZipArchive против ZipStream-PHP
Я проверяю хорошие решения для архивирования потокового контента из S3, я наткнулся на API- интерфейс ZipStream-PHP, который использовался API - интерфейсом https://github.com/jmathai/s3-bucket-stream-zip-php, однако, думаю, с помощью базового класса PHP ZipArchive и его Функция ZipArchive::addFromString позволяет добиться того же.
Мой запрос ZipStream-PHP API является лучшим решением, чем ZipArchive для архивации потокового контента из S3 ИЛИ какого-либо другого облачного сервиса?
1 ответ
Лучшее решение из моего опыта - использовать aws-sdk-php для доступа к объектам на S3 через s3client с включенной registerStreamWrapper(). Затем используйте fopen для потоковой передачи объектов из S3 и передачи этого потока непосредственно в функцию addFileFromStream() ZipStream, и пусть ZipStream возьмет его оттуда. Нет ZipArchive, нет больших затрат памяти, нет создания zip на сервере или дублирования файлов из S3 на веб-сервере для последующего использования для потоковой передачи zip.
Так:
//...
$s3Client->registerStreamWrapper(); //required
//test files on s3
$s3keys = array(
"ziptestfolder/file1.txt",
"ziptestfolder/file2.txt"
);
// Define suitable options for ZipStream Archive.
$opt = array(
'comment' => 'test zip file.',
'content_type' => 'application/octet-stream'
);
//initialise zipstream with output zip filename and options.
$zip = new ZipStream\ZipStream('test.zip', $opt);
//loop keys useful for multiple files
foreach ($s3keys as $key) {
// Get the file name in S3 key so we can save it to the zip
//file using the same name.
$fileName = basename($key);
//concatenate s3path.
$bucket = 'bucketname';
$s3path = "s3://" . $bucket . "/" . $key;
//addFileFromStream
if ($streamRead = fopen($s3path, 'r')) {
$zip->addFileFromStream($fileName, $streamRead);
} else {
die('Could not open stream for reading');
}
}
$zip->finish();
И если вы используете ZipStream в действии контроллера Symfony, посмотрите также и этот ответ: /questions/17280319/ispolzovanie-zipstream-v-symfony-potokovaya-zagruzka-zip-ne-budet-raspakovyivatsya-s-pomoschyu-archive-utility-na-mac-osx/17280337#17280337