我想给gzip压缩使用PHP我的服务器上的文件。有没有人有一个例子,会输入一个文件并输出一个压缩文件?你如何使用PHP创建一个名为.gz文件?
回答
这里的其他答案会在压缩过程中将整个文件加载到内存中,这将导致大文件上出现'内存不足'错误。下面的函数在大文件上应该更可靠,因为它以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);
+1回答自己的问题:-) – 2011-05-20 14:37:36
不幸的是这将可能将整个文件读入内存,可能打在大文件PHP的内存限制。 :-( – 2014-03-31 04:37:34
虽然w9是最高压缩率,这是最低压缩率,只是用于包装数据.gz? – AMB 2017-01-23 16:06:41
此外,您可以使用PHP的wrappers的compression ones。只需对代码进行微小的更改,您就可以在gzip,bzip2或zip之间进行切换。
$input = "test.txt";
$output = $input.".gz";
file_put_contents("compress.zlib://$output", file_get_contents($input));
变化为zip压缩compress.zlib://
到
compress.zip://
(见注释这个答案约ZIP压缩)
,或
compress.bzip2://
到的bzip2压缩。
我认为压缩不支持compress.zip://'参见http:// www。 php.net/manual/en/wrappers.compression.php – Alex 2013-02-06 08:54:26
@Alex是的,看起来你是对的,并且zip:// wrapper不支持写入,也不支持添加到已存在的文件 – 2013-02-06 11:12:06
简单的一个内胆采用gzencode():
gzencode(file_get_contents($file_name));
如果你正在寻找只是解压缩文件,这个作品,不与内存引起的问题:
$bytes = file_put_contents($destination, gzopen($gzip_path, r));
这可能很明显许多,但如果有任何程序执行功能的系统(exec
,system
,shell_exec
),你可以用它们来简体启用ly gzip
该文件。
exec("gzip ".$filename);
高管被锁定在最托管平台,并在一般的安全风险,甚至使用EXEC – Wranorn 2018-01-16 09:08:28
@Wranorn这就是为什么我指出:“如果任何的程序执行功能为e在你的系统上打个招呼,“我应该在你的主机平台上写下”而不是?至于安全性方面,如果你不把用户输入传递给这个函数,我不确定有什么风险。的[PHP文档]中唯一的警告(http://php.net/manual/en/function.exec.php)是关于使用'escapeshellarg()'或'escapeshellcmd()将'通过用户提供的数据到时功能。 – Niavlys 2018-01-16 12:46:04
- 1. 如何直接创建和输出.gz文件与PHP
- 2. 如何使用powershell创建tar gz文件
- 3. 使用PHP创建一个zip文件
- 4. 如何使用php创建php文件
- 5. 使用.pdf扩展名创建一个临时文件php tempnam
- 6. 如何使用创建文件创建tmp文件名
- 7. 如何使用变量作为文件名创建文件?
- 8. 如何使用PHP创建一个CSV文件(上传)
- 9. 你如何使用脚本#来创建一个jQuery插件?
- 10. 如何使用PHP创建PDF文件?
- 11. 如何使用FactoryGirl创建一个名为“别名”的属性?
- 12. 如何使用PHP在另一个文件夹内创建多个文件夹?
- 13. Gzipping一个JS文件创建一个存档,而不是附加gz扩展名的文件输出
- 14. 如何使用php创建'.epub'扩展名文件?
- 15. 用PHP创建一个CSV文件
- 16. 使用文件名变量创建一个文件java
- 17. 如何使用PHP解压缩.gz文件?
- 18. GZIP将多个文件合并为一个文件gz
- 19. 你如何为一个jQuery链创建一个变量?
- 20. 如何添加一个txt文件,并创建一个PHP ZIP
- 21. Angular CLI:在生成后使用基于版本的名称创建一个tar gz文件
- 22. 如何将许多.gz文件解压到同一个文件?
- 23. 使用ACL为一个用户创建一个文件夹
- 24. GZ用PHP压缩一个XML站点地图文件
- 25. 你如何创建* yml文件?
- 26. PHP如何创建一个名为“do”的函数?
- 27. 如何用不同的名称和文件夹创建多个文件? php
- 28. 如何用WinRAR创建一个ZIP文件名称为当前文件夹的名称的ZIP文件?
- 29. 你如何创建一个Perl模块?
- 30. 你如何创建一个Rakefile?
完美!正是我所需要的。 – Clox 2014-06-21 09:55:52
你的代码的最好的一个! – Fuser97381 2014-10-14 16:50:50
非常好的一点。我把上面并创造了逆解压缩的文件。该代码是相当快的。 – user3759531 2014-10-24 20:26:34