How can I unzip a .gz file with PHP?

后端 未结 6 1010
南旧
南旧 2020-12-14 11:06

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

相关标签:
6条回答
  • 2020-12-14 11:25

    Download the Unzip library and include or autoload the unzip library

    $this->load->library('unzip');
    
    0 讨论(0)
  • 2020-12-14 11:27

    Use the extractTo function from PharData.

    $source is the .gz archive file you want to unzip and $destDir the directory you want to extract them to.

    $phar = new PharData($source);
    $phar->extractTo($destDir,null,true); // extract all files, overwrites existing files
    
    0 讨论(0)
  • 2020-12-14 11:35

    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);
    
    0 讨论(0)
  • 2020-12-14 11:42

    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.

    0 讨论(0)
  • 2020-12-14 11:48

    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.

    0 讨论(0)
  • 2020-12-14 11:51

    If you have access to system():

    system("gunzip file.sql.gz");
    
    0 讨论(0)
提交回复
热议问题