你如何使用PHP创build一个.gz文件?

我想用PHP压缩我的服务器上的一个文件。 有没有人有一个例子,将input一个文件,并输出一个压缩文件?

这里的其他答案在压缩过程中将整个文件加载到内存中,这将导致大文件出现“ 内存不足 ”错误。 下面的函数在大文件上应该更可靠,因为它以512kb的块读写文件。

/** * GZIPs a file on disk (appending .gz to the name) * * From http://stackoverflow.com/questions/6073397/how-do-you-create-a-gz-file-using-php * Based on function by Kioob at: * http://www.php.net/manual/en/function.gzwrite.php#34955 * * @param string $source Path to file that should be compressed * @param integer $level GZIP compression level (default: 9) * @return string New filename (with .gz appended) if success, or false if operation fails */ function gzCompressFile($source, $level = 9){ $dest = $source . '.gz'; $mode = 'wb' . $level; $error = false; if ($fp_out = gzopen($dest, $mode)) { if ($fp_in = fopen($source,'rb')) { while (!feof($fp_in)) gzwrite($fp_out, fread($fp_in, 1024 * 512)); fclose($fp_in); } else { $error = true; } gzclose($fp_out); } else { $error = true; } if ($error) return false; else return $dest; } 

这段代码的窍门

 // Name of the file we're compressing $file = "test.txt"; // Name of the gz file we're creating $gzfile = "test.gz"; // Open the gz file (w9 is the highest compression) $fp = gzopen ($gzfile, 'w9'); // Compress the file gzwrite ($fp, file_get_contents($file)); // Close the gz file and we're done gzclose($fp); 

此外,你可以使用PHP的包装 , 压缩的 。 在代码中只需稍作更改即可在gzip,bzip2或zip之间切换。

 $input = "test.txt"; $output = $input.".gz"; file_put_contents("compress.zlib://$output", file_get_contents($input)); 

更改compress.zlib:// compress.zip:// .zip compress.zlib:// compress.zip:// zip压缩 (请参阅关于zip压缩的解答的注释) ,或将compress.bzip2://压缩到bzip2。

简单的与gzencode()的一个class轮:

 gzencode(file_get_contents($file_name)); 

如果你正在寻找只是解压缩文件,这个工程,并不会导致内存问题:

 $bytes = file_put_contents($destination, gzopen($gzip_path, r)); 

这很可能是很明显的,但是如果系统上启用了任何程序执行function( execsystemshell_exec ),则可以使用它们来简单地gzip文件。

 exec("gzip ".$filename);