2008-12-02 13 views
9

Así que tengo un cliente cuyo host actual no me permite usar tar vía exec()/passthru()/ect y necesito hacer una copia de seguridad del sitio periódicamente y programáticamente hay alguna solucion?Crear archivo Tar desde el directorio en PHP sin exec/passthru

Este es un servidor Linux.

+0

Parece una limitación extraña. –

+0

Pero no del todo en común, muchos hosts simplemente bloquean el uso por completo en lugar de molestar a los usuarios. – UnkwnTech

+0

Correcto, pero es una tontería, dado el poder de PHP para interactuar con el sistema de archivos. –

Respuesta

8

En http://pear.php.net/package/Archive_Tar puede donload el paquete PEAR de alquitrán y utilizar 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 
} 
?> 
4

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

+0

Publicaste mientras escribía pero mantendré el mío aquí porque tiene el código. – UnkwnTech

0

Necesito una solución que funcionaría en los sitios web Azure (IIS) y tenía problemas con la creación de nuevos archivos en el servidor usando métodos de otras respuestas. La solución que funcionó para mí fue usar la pequeña biblioteca TbsZip para compresión, que no requiere escribir archivos en ningún lugar del servidor; simplemente se devuelve directamente a través de HTTP.

Este hilo es viejo, pero este enfoque podría ser un poco más genérico y respuesta completa, por lo que publicar 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á toda la article on my blog.

Cuestiones relacionadas