Создайте файл Tar из каталога на PHP без exec / passthru - PullRequest
9 голосов
/ 02 декабря 2008

Итак, у меня есть клиент, у которого текущий хост не позволяет мне использовать tar через exec () / passthru () / ect, и мне нужно периодически и программно выполнять резервное копирование сайта, поэтому есть ли решение?

Это сервер Linux.

Ответы [ 4 ]

18 голосов
/ 06 июля 2011

PHP 5.3 предлагает гораздо более простой способ решения этой проблемы.

Смотрите здесь: http://www.php.net/manual/en/phardata.buildfromdirectory.php

<?php
$phar = new PharData('project.tar');
// add all files in the project
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
?>
8 голосов
/ 02 декабря 2008

На http://pear.php.net/package/Archive_Tar вы можете загрузить пакет tar PEAR и использовать его для создания архива:

<?php
require 'Archive/Tar.php';
$obj = new Archive_Tar('archive.tar');
$path = '/path/to/folder/';
$handle=opendir($path); 
$files = array();
while(false!==($file = readdir($handle)))
 {
    $files[] = $path . $file;
 }

if ($obj->create($files))
 {
    //Sucess
 }
else
 {
    //Fail
 }
?>
4 голосов
/ 02 декабря 2008

Есть библиотека Archive_Tar . Если это не может быть использовано по какой-либо причине, расширение zip может быть другим вариантом.

0 голосов
/ 23 апреля 2013

Мне нужно решение, которое работало бы на веб-сайтах Azure (IIS) и имело проблемы с созданием новых файлов на сервере с использованием методов из других ответов. Решение, которое работало для меня, состояло в том, чтобы использовать небольшую библиотеку TbsZip для сжатия, которая не требует записи файла в любом месте сервера - она ​​просто возвращается напрямую через HTTP.

Эта ветка старая, но такой подход может быть немного более общим и полным, поэтому я выкладываю код в качестве альтернативы:

// Compress all files in current directory and return via HTTP as a ZIP file
// by buli, 2013 (http://buli.waw.pl)
// requires TbsZip library from http://www.tinybutstrong.com

include_once('tbszip.php'); // load the TbsZip library
$zip = new clsTbsZip(); // instantiate the class
$zip->CreateNew(); // create a virtual new zip archive

// iterate through files, skipping directories
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'));
foreach($objects as $name => $object)
{ 
    $n = str_replace("/", "\\", substr($name, 2)); // path format
    $zip->FileAdd($n, $n, TBSZIP_FILE); // add fileto zip archive
}

$archiveName = "backup_".date('m-d-Y H:i:s').".zip"; // name of the returned file 
$zip->Flush(TBSZIP_DOWNLOAD, $archiveName); // flush the result as an HTTP download

А вот и вся статья в моем блоге .

...