Pregunta

Entonces, tengo un cliente cuyo host actual no me permite usar tar a través de exec () / passthru () / ect y necesito hacer una copia de seguridad del sitio de forma periódica y programática, ¿hay alguna solución?

Este es un servidor Linux.

¿Fue útil?

Solución 2

En http://pear.php.net/package/Archive_Tar puede descargar el Paquete PEAR tar y úsalo de esta manera para crear el archivo:

<?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
 }
?>

Otros consejos

PHP 5.3 ofrece una forma mucho más fácil de resolver este problema.

Mire aquí: 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');
?>

Existe la Archive_Tar . Si eso no se puede usar por alguna razón, la extensión zip podría ser otra opción.

Necesito una solución que funcione en los sitios web de Azure (IIS) y tuve problemas para crear nuevos archivos en el servidor usando métodos de otras respuestas. La solución que funcionó para mí fue usar una pequeña biblioteca TbsZip para compresión, que no requiere escribir el archivo en ninguna parte del servidor, solo se devuelve directamente a través de HTTP.

Este hilo es antiguo, pero este enfoque podría ser un poco más genérico y una respuesta completa, por lo que publico el código como 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

Y aquí está el artículo completo en mi blog .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top