gz compression is often used with tar archives. Building tar archives is quite easy. Here is a code snipplet which can be used for building tar archives before compressing them to tar.gz.
<?php
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
// Adds file header to the tar file, it is used before adding file content.
// f: file resource (provided by eg. fopen)
// phisfn: path to file
// archfn: path to file in archive, directory names must be followed by '/'
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
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;
}
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
// Writes file content to the tar file must be called after a TarAddHeader
// f:file resource provided by fopen
// phisfn: path to file
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
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,''));
}
}
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
// Adds 1024 byte footer at the end of the tar file
// f: file resource
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
function TarAddFooter($f)
{
fwrite($f,pack('a1024',''));
}
?>gzwrite
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
gzwrite
Референца за `function.gzwrite.php` со подобрена типографија и навигација.
gzwrite
(PHP 4, PHP 5, PHP 7, PHP 8)
gzwrite — Бинарно-безбедно запишување во gz-датотека
= NULL
gzwrite() ги запишува содржините од
data во дадената gz-датотека.
Параметри
stream-
Покажувачот на gz-датотека. Мора да биде валиден и да покажува на датотека успешно отворена од gzopen().
data-
Низата за запишување.
length-
Бројот на некомпресирани бајти за запишување. Ако е даден, запишувањето ќе престане по
lengthбајти (некомпресирани) се запишани или крајот наdataсе достигне, кое и да настапи прво.
Вратени вредности
Враќа број на (некомпресирани) бајти запишани во дадениот gz-датотечен поток, или false при неуспех.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 |
length сега е null; претходно, стандардно беше
0.
|
| 7.4.0 |
Оваа функција враќа false при неуспех сега; претходно 0 .
|
Примери
Пример #1 gzwrite() example
<?php
$string = 'Some information to compress';
$gz = gzopen('somefile.gz','w9');
gzwrite($gz, $string);
gzclose($gz);
?>