Crea il file Tar dalla directory in PHP senza exec / passthru
Domanda
Quindi ho un client il cui host attuale non mi consente di usare tar tramite exec () / passthru () / ect e ho bisogno di eseguire il backup periodico e programmatico del sito, quindi esiste una soluzione?
Questo è un server Linux.
Soluzione 2
A http://pear.php.net/package/Archive_Tar puoi scaricare il Pacchetto tar PEAR e usalo in questo modo per creare l'archivio:
<?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
}
?>
Altri suggerimenti
PHP 5.3 offre un modo molto più semplice per risolvere questo problema.
Guarda qui: 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');
?>
Esiste la libreria Archive_Tar . Se questo non può essere utilizzato per qualche motivo, l'estensione zip potrebbe essere un'altra opzione.
Ho bisogno di una soluzione che funzioni sui siti Web di Azure (IIS) e abbia avuto problemi con la creazione di nuovi file sul server usando metodi da altre risposte. La soluzione che ha funzionato per me è stata quella di utilizzare la piccola TbsZip per compressione, che non richiede la scrittura di file in nessun punto del server: è appena restituito direttamente tramite HTTP.
Questo thread è vecchio, ma questo approccio potrebbe essere una risposta un po 'più generica e completa, quindi inserisco il codice come alternativa:
// 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
Ed ecco l'intero articolo sul mio blog .