Сжатие массива PHP в памяти в файл .tar.gz (PHAR?) - PullRequest
0 голосов
/ 18 января 2012

У меня есть большой массив xml-файлов в памяти в виде строки.

Я ищу наиболее эффективный способ создания читаемого / извлекаемого файла .tar.gz из PHP (5.3).

В настоящее время я использую этот класс .

Но:

  • Не выглядит поддерживаемым
  • Требуетсяфайлы (поэтому я создаю тысячи файлов из моего массива памяти, которые бесполезны несколько мс спустя)

Так что я ищу эффективный способ обработки файла .tar.gz, большинствоважно иметь возможность легко помещать в него файлы с помощью простой команды, такой как:

$ myArchive-> putFileFromString ($ fileName, $ dataString);

Похоже, что можно настроитьPHAR с TAR & GZ, так что это может быть решением?

$p = $p->convertToExecutable(Phar::TAR, Phar::GZ);

Бонусный вопрос, я не уверен, что будет лучше создать его вживую (после каждого генерирования XML-строки), чтобы сохранитьпамяти, или просто подождите этот огромный объект и сожмите его один раз.Соотношение proc_usage / mem_usage в этом случае мне неясно.

Целевое максимальное использование - 100 КБ XML-файлов.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 02 июля 2013

Уже немного поздно, но для дальнейшего использования:

Вы можете создать архив tar.gz, используя класс PharData из расширения phar.Это немного похоже на ZipArchive, за исключением того, что вы можете добавлять контент, используя интерфейс Array:

$archive = new PharData("outfile.tar");
foreach ($xmlfiles as $name => $data) {
    $archive[$name] = $data;
}

// compress to "outfile.tar.gz
$gzipped = $archive->compress(Phar::GZ);

// delete outfile.tar
unset($archive);
unlink("outfile.tar");
0 голосов
/ 20 февраля 2012

Если вы хотите создать tgz-файлы, используйте пакет PEAR Archive_Tar . Позволяет создавать файлы tar + gz на лету из памяти:

require_once 'Archive/Tar.php';
$t = new Archive_Tar('/path/to/dest.tar.gz', 'gz');
foreach ($xmlfiles as $key => $content) {
    $t->addString($key . '.xml', $content);
}
...