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;
?>