ホームページ  >  記事  >  バックエンド開発  >  PHPがオンラインファイル圧縮機能を実装_PHPチュートリアル

PHPがオンラインファイル圧縮機能を実装_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:05:381052ブラウズ



class ZipAllFloder
{
var
$cachelist
= array();
var
$datasec
= array( );  
var
$ctrl_dir
= array();  
var
$eof_ctrl_dir = "x50x4bx05x06x00x00x00x00"
;  
var
$old_offset = 0
;  

関数
StartWork($dir
){
$result = $this-& gt;GetList($dir
);
$this->ClearCache
();
return
$result
;
}
関数
ReadAndExport($filelist, $zipfilename
){
if (
count($filelist)>0
){
foreach(
$filelist as $ファイル名
){
if (
is_file($filename
)){
$fp = fopen ($ファイル名, "r"
);  
$content = @fread ($fp,ファイルサイズ($ファイル名)
));  
                    
fclose ($fp
);  
$ファイル名 = ベース名($ファイル名
);  
$this -> addFile($content, $filename
);  
}
}
}else{
$this -> addFile("このフォルダーには単一のファイルがありません!","nofile.log"
);

$out = $これ -> outfile
(); 
$this -> IniVars
();
$fp = fopen($zipfilename,"w"
);  
fwrite($fp,$out,strlen($out
));  
fclose($fp
);
$this -> キャッシュリスト[] = $zipファイル名

}
関数
GetList($dir
){
if (
file_exists($dir)
)){
            
$ハンドル= opendir($dir
); 
while(
$files = readdir($handle
)){
if ((
$files==".")||( $files==".."
)) 続行; 
if(
is_dir($dir."/".$files
)){
$this -> GetList($dir."/".$files
);
}else{
$filelist[] = $dir ."/".$files

}
}
closedir($handle
);
$zipファイル名 = ディレクトリ名($dir)."/[フォルダー] ".basename($dir).".zip"
;
$this -> ReadAndExport($filelist,$zipfilename
);
}
return
$zipfilename
;  
}
関数
ClearCache
(){
        if(
$num = count($this ->キャッシュリスト
)){
for(
$ i=0; $i<$num-1;$i
++){
@
リンク解除($これ-> キャッシュリスト[$i
]);
}
}
}
関数
IniVars
(){
$this -> datasec
= array();
$this -> ctrl_dir
= array();
$this -> eof_ctrl_dir = "x50x4bx05x06x00x00x00x00"
;
$this -> old_offset = 0
;
}
関数
unix2DosTime($unixtime = 0
) {
$timearray = ( $unixtime == 0) ? getdate() : getdate($unixtime
);  
if (
$timearray['year'] < 1980
) {
$timear ray[「年」] = 1980
;  
            
$timearray['mon'] = 1
;  
$timearray['今日'] = 1
;  
$timearray['時間'] = 0
;  
$timearray['分'] = 0
;  
$timearray['秒'] = 0
;  
}
return ((
$timearray['年']-1980)<<25)|( $timearray['月']<<21)|($timearray['今日']<<16)|($timearray ['時間']<<11)|($timearray['分']<<5)|( $timearray['秒']>>1
);  
}
関数
addFile($data, $name, $time = 0
){
$name = str_replace('', '/', $name
);  
        
$dtime = dechex($this->unix2DosTime($time
));  
$hexdtime = 'x' 。 $dtime[6] 。 $dtime[7
]
 
'x' 。 $dtime[4] 。 $dtime[5
]
。 
'x' 。 $dtime[2] 。 $dtime[3
]
。 
'x' 。 $dtime[0] 。 $dtime[1
];  
eval(
'$hexdtime = "' . $hexdtime . '";'
);  
$fr = "x50x4bx03x04"
;  
$fr .= "x14x00"
;
$fr
.= "
;
$fr
.= " x08x00"
;
$fr
.= $hexdtime

$unc_len
= strlen($data
);          
$crc = crc32($data);  
$zdata = gzcompress($data
);  
$c_len = strlen($zdata
);  
$zdata = substr(substr($zdata, 0, ) strlen($zdata) - 4 )、2
);
$fr .= pack('V', $crc
);
$ fr .= pack('V', $c_len
);
$fr .= パック('V' , $unc_len
);
$fr .= pack('v', strlen($name
) );
$fr .= pack('v', 0
);
$fr .= $name
;  
$fr .= $zdata
;          $fr .= pack('V', $crc);
$fr .= パック(' V', $c_len
);
$fr .= pack('V', $unc_len
);
$this -> datasec[] = $fr
;  
$new_offset = strlen(implode('', $this-&g t;datasec
));  
$cdrec = "x50x4bx01x02"
;  
$cdrec .= "x00x00"
;
$cdrec .= "x14x00"
;
$cdrec .= " x00x00"
;
$cdrec .= "x08x00"
;
$cdrec .= $hexdtime
;
$cdrec .= パック('V', $crc
);
$cdrec .= パック('V', $c_len
);
        
$cdrec .= pack('V', $unc_len
);
$cdrec .= パック(' v', strlen($name
) );
$cdrec .= pack( 'v', 0
);
$cdrec .= pack('v', 0
);
$cdrec .= パック ('v', 0
);
$cdrec .= pack('v' 0
);
$cdrec .= pack('V', 32
);
$cdrec .= パック(' V'$this -> old_offset
);
$this -> old_offset = $new_offset
;  
$cdrec .= $name
;  
$this -> ctrl_dir[] = $cdrec
;  
}
関数
outfile
(){
        
$data = implode('', $this -> datasec
);  
$ctrldir = implode('', $this -> ctrl_dir
);  
戻る
$data
。  
$ctrldir
。  
$this -> eof_ctrl_dir
。  
パック('v', sizeof($this -> ctrl_dir
) )) .
パック(' v'サイズの($this-> ctrl_dir
)) .
パック ('V'strlen ($ctrldir
)) .
pack('V', strlen($data)
)) .
"x00x00"
;
}
}

$zip = new ZipAllFloder
();
$str = $zip->仕事を始めましょう ("./baby"
);
エコー
$str
;
?>


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445086.html技術記事 ?php クラス ZipAllFloder { var $cachelist =array(); var $datasec =array(); var $ctrl_dir =array(); var $eof_ctrl_dir = x50x4bx05x06x00x00x00x00 ; var $old_offset = 0 ;関数スター...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。