Search code examples
phpexectar

PHP Untar-gz without exec()?


How would I untar-gz a file in php without the use of exec('tar') or any other commands, using pure PHP?

My problem is as follows; I have a 26mb tar.gz file that needs to be uploaded onto my server and extracted. I have tried using net2ftp to extract it, but it doesn't support tar.gz uncompressing after upload.

I'm using a free web host, so they don't allow any exec() commands, and they don't allow access to a prompt. So how would I go about untaring this?

Does PHP have a built in command?


Solution

  • Since PHP 5.3.0 you do not need to use Archive_Tar.

    There is new class to work on tar archive: The PharData class.

    To extract an archive (using PharData::extractTo() which work like the ZipArchive::extractTo()):

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

    And if you have a tar.gz archive, just decompress it before extract (using 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');