Показать сообщение отдельно

  #6  
Старый 06.05.2008, 23:18
ShAnKaR
Постоянный
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме:
4646474

Репутация: 1424


Отправить сообщение для ShAnKaR с помощью ICQ
По умолчанию

под себя переделвал php class tar
PHP код:
<?
function Ch($b) {
$u=0;
for(
$i=0;$i<512;$i++)
$u+=ord($b[$i]);
for(
$i=0;$i<8;$i++)
$u-=ord($b[148+$i]);
$u+=ord(" ")*8;
return 
$u;
}

$arrfw=array('./');
$arrfile=array();
$ife=0;
while(++
$ife<=count($arrfw)){
$pathfw=$arrfw[$ife-1];
if(
is_readable($pathfw)){
if(
$hfw=opendir($pathfw)){
while(
false!==($ffw=readdir($hfw))){
$ffw=$pathfw.$ffw;
if(!
preg_match('/\/\.+$/',$ffw)){
if(
is_dir($ffw) && !preg_match('!/log$!',$ffw)){array_push($arrfw,$ffw.'/');print $ffw.'<br>';}
else 
array_push($arrfile,$ffw);
}}
closedir($hfw);}}}

$fpp=fopen('x.tar',"wb");


$pq=preg_quote($arrfw[0]);
array_shift($arrfw);
foreach(
$arrfw as $dn){
$in=@stat($dn);
$dn=preg_replace("!^$pq!",'',$dn);
$hr=str_pad($dn,100,"\0").str_pad(decoct($in["mode"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["uid"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["gid"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct(0),11,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["ctime"]),11,"0",STR_PAD_LEFT)."\0".str_repeat(" ",8)."5".str_repeat("\0",100).str_pad("ustar",6," ")." "."\0".str_pad("",32,"\0").str_pad("",32,"\0").str_repeat("\0",8).str_repeat("\0",8).str_repeat("\0",155).str_repeat("\0",12);
$cm=str_pad(decoct(Ch($hr)),6,"0",STR_PAD_LEFT);
for(
$i=0;$i<6;$i++){$hr[(148+$i)]=substr($cm,$i,1);}
$hr[154]="\0";
$hr[155]=" ";
fwrite($fpp,$hr);
}

foreach(
$arrfile as $fl){
if(
filesize($fl)>31457280)break;
$in=@stat($fl);
$fp=@fopen($fl,"rb");
$fi=@fread($fp,filesize($fl));
@
fclose($fp);
$fl=preg_replace("!^$pq!",'',$fl);
$he=str_pad($fl,100,"\0").str_pad(decoct($in["mode"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["uid"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["gid"]),7,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["size"]),11,"0",STR_PAD_LEFT)."\0".str_pad(decoct($in["ctime"]),11,"0",STR_PAD_LEFT)."\0".str_repeat(" ",8)."0".str_repeat("\0",100).str_pad("ustar",6," ")." \0".str_pad("",32,"\0").str_pad("",32,"\0").str_repeat("\0",183);
$cm=str_pad(decoct(Ch($he)),6,"0",STR_PAD_LEFT);
for(
$i=0;$i<6;$i++){$he[(148+$i)]=substr($cm,$i,1);}
$he[154]="\0";
$he[155]=" ";
$fi=str_pad($fi,(ceil($in["size"]/512)*512),"\0");
fwrite($fpp,$he.$fi);
}

fwrite($fpp,str_repeat("\0",512));
fclose($fpp);
после тара можно в gzip или bzip запихнуть это не проблема.

Последний раз редактировалось ShAnKaR; 06.05.2008 в 23:21..
 
Ответить с цитированием