gzwrite

(PHP 4, PHP 5, PHP 7, PHP 8)

gzwrite二进制安全的 gz-文件写入

描述

gzwrite(资源 $stream, 字符串 $data, ?整数 $length = null): 整数|false

gzwrite()data 的内容写入给定的 gz-文件。

参数

stream

gz-文件指针。它必须有效,并且必须指向由 gzopen() 成功打开的文件。

data

要写入的字符串。

length

要写入的未压缩字节数。如果提供,写入将在写入 length(未压缩)字节或到达 data 的末尾时停止,以先发生者为准。

返回值

返回写入给定 gz-文件流的(未压缩)字节数,或者在失败时返回 false

变更日志

版本 描述
8.0.0 length 现在可以为空;以前,默认值为 0
7.4.0 此函数现在在失败时返回 false;以前返回 0

示例

示例 #1 gzwrite() 示例

<?php
$string
= 'Some information to compress';
$gz = gzopen('somefile.gz','w9');
gzwrite($gz, $string);
gzclose($gz);
?>

参见

添加注释

用户贡献的注释 6 个注释

calmarius at nospam dot atw dot hu
15 年前
gz 压缩通常与 tar 档案一起使用。构建 tar 档案非常容易。以下是一个代码片段,它可以在将 tar 档案压缩到 tar.gz 之前用于构建 tar 档案。

<?php

//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
// 在添加文件内容之前,为 tar 文件添加文件头,用于添加文件内容之前。
// f: 文件资源(例如,由 fopen 提供)
// phisfn: 文件路径
// archfn: 存档中的文件路径,目录名称必须以 '/' 结尾
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
function TarAddHeader($f,$phisfn,$archfn)
{
$info=stat($phisfn);
$ouid=sprintf("%6s ", decoct($info[4]));
$ogid=sprintf("%6s ", decoct($info[5]));
$omode=sprintf("%6s ", decoct(fileperms($phisfn)));
$omtime=sprintf("%11s", decoct(filemtime($phisfn)));
if (@
is_dir($phisfn))
{
$type="5";
$osize=sprintf("%11s ", decoct(0));
}
else
{
$type='';
$osize=sprintf("%11s ", decoct(filesize($phisfn)));
clearstatcache();
}
$dmajor = '';
$dminor = '';
$gname = '';
$linkname = '';
$magic = '';
$prefix = '';
$uname = '';
$version = '';
$chunkbeforeCS=pack("a100a8a8a8a12A12",$archfn, $omode, $ouid, $ogid, $osize, $omtime);
$chunkafterCS=pack("a1a100a6a2a32a32a8a8a155a12", $type, $linkname, $magic, $version, $uname, $gname, $dmajor, $dminor ,$prefix,'');

$checksum = 0;
for (
$i=0; $i<148; $i++) $checksum+=ord(substr($chunkbeforeCS,$i,1));
for (
$i=148; $i<156; $i++) $checksum+=ord(' ');
for (
$i=156, $j=0; $i<512; $i++, $j++) $checksum+=ord(substr($chunkafterCS,$j,1));

fwrite($f,$chunkbeforeCS,148);
$checksum=sprintf("%6s ",decoct($checksum));
$bdchecksum=pack("a8", $checksum);
fwrite($f,$bdchecksum,8);
fwrite($f,$chunkafterCS,356);
return
true;
}
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
// 将文件内容写入 tar 文件,必须在 TarAddHeader 后调用
// f: 由 fopen 提供的文件资源
// phisfn: 文件路径
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
function TarWriteContents($f,$phisfn)
{
if (@
is_dir($phisfn))
{
return;
}
else
{
$size=filesize($phisfn);
$padding=$size % 512 ? 512-$size%512 : 0;
$f2=fopen($phisfn,"rb");
while (!
feof($f2)) fwrite($f,fread($f2,1024*1024));
$pstr=sprintf("a%d",$padding);
fwrite($f,pack($pstr,''));
}
}
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
// 在 tar 文件末尾添加 1024 字节的页脚
// f: 文件资源
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
function TarAddFooter($f)
{
fwrite($f,pack('a1024',''));
}

?>
Kioob
21 年前
这是一个关于 gzwrite 函数的简短使用示例。
<?php
function gzcompressfile($source,$level=false){
$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;
}
?>

gzcompressfile() 函数将文件 'data.csv' 压缩为 'data.csv.gz'。如果出现错误,该函数返回 false,如果成功,则返回新文件名。
匿名
16 年前
katzlbtjunk 的方法确实更短,但它除了小文件以外无法用于任何其他用途。它会尝试将整个文件加载到内存中,然后创建一个完整的压缩副本,最后再将其写入磁盘。下面给出的另一种方法不会像那样耗尽内存。
Take Heed
13 年前
仔细阅读 gzwrite() 的描述。如果未指定 'length' 选项,则在启用 magic quotes 的系统上,输入数据将删除斜杠。在压缩文件时,了解此信息非常重要。

<?php
$data
= fread($fp, 5000);
gzwrite($fp2, $data, strlen($data));
?>

避免魔术引号问题,正确的方法是。
lamaresh dot net 上的代码库
15 年前
该函数向 .gz 压缩文件添加一行

<?php
function AppendLineGz($file,$string) {
if (
file_exists($file)) {
$lines = gzfile($file);
$lines[count($lines)] = "$string\r\n";
$input=implode($lines);
} else {
$input="$string\r\n";}
$gz = gzopen($file,'w9');
gzwrite($gz, $input);
gzclose($gz);
}
?>
katzlbtjunk at hotmail dot com
16 年前
试试这个:
$s = file_get_contents('file.tar');
file_put_contents('file.tar.gz',gzencode($s,9));
To Top