Ich habe also einen Kunden, dessen aktueller Host mir nicht erlaubt, tar über exec()/passthru()/ect zu verwenden, und ich muss die Website regelmäßig und programmatisch sichern, gibt es also eine Lösung?
Dies ist ein Linux-Server.
Ich habe also einen Kunden, dessen aktueller Host mir nicht erlaubt, tar über exec()/passthru()/ect zu verwenden, und ich muss die Website regelmäßig und programmatisch sichern, gibt es also eine Lösung?
Dies ist ein Linux-Server.
PHP 5.3 bietet eine viel einfachere Möglichkeit, dieses Problem zu lösen.
Siehe hier: 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');
?>
Unter http://pear.php.net/package/Archive_Tar können Sie das PEAR tar-Paket laden und es wie folgt verwenden, um das Archiv zu erstellen:
<?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
}
?>
Es gibt die Archiv_Tar Bibliothek. Wenn diese aus irgendeinem Grund nicht verwendet werden kann, wird die zip Verlängerung könnte eine weitere Option sein.
Ich benötige eine Lösung, die auf Azure-Websites (IIS) funktionieren würde, und hatte Probleme mit der Erstellung neuer Dateien auf dem Server mit Methoden aus anderen Antworten. Die Lösung, die für mich funktionierte, war die Verwendung kleiner TbsZip Bibliothek für die Komprimierung, die es nicht erforderlich macht, eine Datei irgendwo auf dem Server zu schreiben - sie wird einfach direkt über HTTP zurückgegeben.
Dieser Thread ist alt, aber dieser Ansatz könnte eine etwas allgemeinere und vollständigere Antwort sein, daher poste ich den Code als Alternative:
// 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
Und hier ist die ganze Artikel in meinem Blog .
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.