2012-02-23 18 views
23

¿Cómo puedo untar-gz un archivo en php sin el uso de exec('tar') o cualquier otro comando, usando PHP puro?PHP Untar-gz sin exec()?

Mi problema es el siguiente; Tengo un archivo tar.gz de 26 mb que debe cargarse en mi servidor y extraerse. He intentado usar net2ftp para extraerlo, pero no admite tar.gz descomprimir después de la carga.

Estoy usando un host web gratuito, por lo que no permiten ningún comando exec(), y no permiten el acceso a un aviso. Entonces, ¿cómo voy a desatar esto?

¿Tiene PHP incorporado un comando?

Respuesta

37

Desde PHP 5.3.0 no es necesario utilizar Archive_Tar.

Hay una nueva clase para trabajar en el archivo tar: The PharData class.

Para extraer un archivo (usando PharData::extractTo() el cual funciona como el ZipArchive::extractTo()):

try { 
    $phar = new PharData('myphar.tar'); 
    $phar->extractTo('/full/path'); // extract all files 
} catch (Exception $e) { 
    // handle errors 
} 

Y si tiene un archivo tar.gz, justo antes de descomprimirlo extracto (usando PharData::decompress()):

// decompress from gz 
$p = new PharData('/path/to/my.tar.gz'); 
$p->decompress(); // creates /path/to/my.tar 

// unarchive from the tar 
$phar = new PharData('/path/to/my.tar'); 
$phar->extractTo('/full/path'); 
+1

Por alguna razón, PharData :: extractTo no funciona en PHP 5.4.0 en Windows. No puedo entender por qué – TinyGrasshopper

+0

Vi [su pregunta] (http://stackoverflow.com/q/13870800/569101) pero no tengo un Windows con 5.4.0 para probarlo, lo siento. – j0k

+0

También, contrariamente a la documentación, no parece tomar directorios como el segundo argumento. –

3

PEAR proporciona el Archive_Tar class, que admite las compresiones Gzip y BZ2, siempre que tenga las extensiones zlib y bz2 cargadas, respectivamente.