PHP comes with a nice zlib extension in its core. We’re going to use it to extract a gzip compressed file.
The steps here are pretty simple:
- Open the gzip file with gzopen
- Open the destination file with fopen
- Transfer the data from the gzip file to the normal file
- Close the open resources
Most of these are really straight forward:
<?php // open the gzip file $gz = gzopen('/path/to/file.txt.gz', 'rb'); if (!$gz) { throw new \UnexpectedValueException('Could not open gzip file'); } $dest = fopen('/path/to/file.txt', 'wb'); if (!$dest) { gzclose($gz); throw new \UnexpectedValueException('Could not open destination file'); } // transfer ... gzclose($gz); fclose($dest);
Using stream_copy_to_stream
stream_copy_to_stream does about what you’d expect: take a source stream, copy it to the destination.
<?php // open the resources, see above stream_copy_to_stream($gz, $dest); // close the resources, see above
Reading & Writing
The alternative is to use gzread
and fwrite
to stream data from the gzip file to the extracted version.
For a big file, this method tends to be a bit more memory efficient.
<?php // open the resources, see above while (!gzeof($gz)) { fwrite($dest, gzread($gz, 4096)); } // close the resources, see above