2012-02-23 20 views
23

Come faccio a decomprimere un file in php senza utilizzare exec('tar') o altri comandi, utilizzando puro PHP?PHP Untar-gz senza exec()?

Il mio problema è il seguente; Ho un file tar.gz da 26mb che deve essere caricato sul mio server ed estratto. Ho provato a usare net2ftp per estrarlo, ma non supporta tar.gz decompressione dopo il caricamento.

Sto utilizzando un host Web gratuito, quindi non consentono alcun comando exec() e non consentono l'accesso a un prompt. Quindi, come potrei fare per rimuoverlo?

PHP ha un comando integrato?

risposta

37

Dal PHP 5.3.0 non è necessario utilizzare Archive_Tar.

C'è una nuova classe su cui lavorare nell'archivio tar: The PharData class.

Per estrarre un archivio (utilizzando PharData::extractTo() che funzionano come il ZipArchive::extractTo()):

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

E se si dispone di un archivio tar.gz, basta decomprimerlo prima di estratto (utilizzando 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

Per qualche motivo PharData :: extractTo non funziona in PHP 5.4.0 su Windows. Non riesco a capire perché – TinyGrasshopper

+0

ho visto [la tua domanda] (http://stackoverflow.com/q/13870800/569101) ma non ho un Windows con 5.4.0 per testarlo, mi dispiace. – j0k

+0

Inoltre, contrariamente alla documentazione, non sembra prendere le directory come secondo argomento. –

3

PEAR fornisce Archive_Tar class, che supporta entrambe le compressioni Gzip e BZ2, a condizione che siano caricate le estensioni zlib e bz2, rispettivamente.