Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I unzip a .gz file with PHP?

I'm using CodeIgniter and I can't figure out how to unzip files!

like image 555
Shamoon Avatar asked Jul 20 '10 18:07

Shamoon


People also ask

How do I open a GZ file without unzip?

Just use zcat to see content without extraction. From the manual: zcat is identical to gunzip -c . (On some systems, zcat may be installed as gzcat to preserve the original link to compress .)


4 Answers

PHP itself has a number of functions for dealing with gzip files.

If you want to create a new, uncompressed file, it would be something like this.

Note: This doesn't check if the target file exists first, doesn't delete the input file, or do any error checking. You really should fix those before using this in production code.

// This input should be from somewhere else, hard-coded in this example
$file_name = 'file.txt.gz';

// Raising this value may increase performance
$buffer_size = 4096; // read 4kb at a time
$out_file_name = str_replace('.gz', '', $file_name);

// Open our files (in binary mode)
$file = gzopen($file_name, 'rb');
$out_file = fopen($out_file_name, 'wb');

// Keep repeating until the end of the input file
while(!gzeof($file)) {
    // Read buffer-size bytes
    // Both fwrite and gzread and binary-safe
    fwrite($out_file, gzread($file, $buffer_size));
}

// Files are done, close files
fclose($out_file);
gzclose($file);

Note: This deals with gzip only. It doesn't deal with tar.

like image 174
Powerlord Avatar answered Oct 29 '22 02:10

Powerlord


gzopen is way too much work. This is more intuitive:

$zipped = file_get_contents("foo.gz");
$unzipped = gzdecode($zipped);

works on http pages when the server is spitting out gzipped data also.

like image 33
Danial Avatar answered Oct 29 '22 01:10

Danial


If you have access to system():

system("gunzip file.sql.gz");
like image 6
parts2eu Avatar answered Oct 29 '22 01:10

parts2eu


Use the functions implemented by the Zlib Compression extension.

This snippet shows how to use some of the functions made available from the extension:

// open file for reading
$zp = gzopen($filename, "r");

// read 3 char
echo gzread($zp, 3);

// output until end of the file and close it.
gzpassthru($zp);
gzclose($zp);
like image 3
apaderno Avatar answered Oct 29 '22 03:10

apaderno