Как я могу создавать файлы и архивировать их без записи файлов на диск?

Я хочу создать 5 разных файлов, в которых хранятся данные из моей базы данных. Я хочу заархивировать 5 файлов, и эта функция вернет zip.

Могу ли я создать 5 файлов, не записывая их на диск? Данные, которые я получаю из базы данных, представляют собой только строки, поэтому каждый файл будет длинной строкой.

Я просто хочу сделать это:

function getZippedFiles()
 // Create 1..5 files
 // Zip them up
 // Return zip
end

main()
// $zip_file = getZippedFiles();
end

Любая информация о том, как это сделать, очень ценится, спасибо!


person unwise guy    schedule 18.01.2013    source источник


Ответы (1)


Конечно, можно, с помощью ZipArchive

// What the array structure should look like [filename => file contents].
$files = array('one.txt' => 'contents of one.txt', ...);

// Instantiate a new zip archive.
$zip_file = new ZipArchive;

// Create a new zip. This method returns false if the creation fails.
if(!$zip_file->open('directory/to/save.zip', ZipArchive::CREATE)) {
    die('Error creating zip!');
}

// Iterate through all of our files and add them to our zip stream.
foreach($files as $file => $contents) {
    $zip_file->addFromString($file, $contents);
}

// Close our stream.
$zip_file->close();
person Austin Brunkhorst    schedule 18.01.2013
comment
здорово, даст, что выстрел. Спасибо. - person unwise guy; 18.01.2013
comment
можно ли просто вернуть $zip_file вместо сохранения на диск? - person unwise guy; 18.01.2013
comment
Что вы планируете с ним делать? - person Austin Brunkhorst; 18.01.2013
comment
Я передам zip другому сценарию, который затем разархивирует и запишет его на диск. Сценарий, который создает zip, находится на другом сервере, поэтому я хочу передать его как zip, чтобы сделать его быстрее. - person unwise guy; 18.01.2013
comment
Я не думаю, что это лучший способ приблизиться к тому, что вы пытаетесь сделать. Почему бы не опубликовать данные базы данных в скрипте? А еще лучше, если можно, совместить скрипты? - person Austin Brunkhorst; 18.01.2013
comment
Я запрашиваю zip-файл через http, поэтому объединение скрипта невозможно. Хм - person unwise guy; 18.01.2013