PHP entrará
$contraseña = "19820129"
$c_len = strlen($zdata);
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2 );
// Formato de contenido de archivo recién agregado:
$datastr = "\x50\x4b\x03\x04";
$datastr .= "\x14\x00"; // ver necesario para extraer
$datastr .= "\x00\x00" // indicador de bit de propósito de generación
$datastr .= "\x08\x00"; // Método de compresión
$datastr .= $hexdtime // Fecha y hora de la última modificación
$datastr .= pack( ' V', $crc); // crc32
$datastr .= pack('V', $c_len); // Tamaño del archivo comprimido
$datastr .= pack( ' V', $unc_len); // Tamaño del archivo sin comprimir
$datastr .= pack('v', strlen($name)); // Longitud del nombre del archivo
$datastr .= pack('v', 0); // Longitud de los campos adicionales
$datastr .= $name;
$datastr .= $zdata;
$datastr .= pack('V', $crc); // crc32
$datastr .= pack('V', $c_len); // Tamaño del archivo comprimido
$datastr .= pack('V', $unc_len); // Tamaño del archivo sin comprimir
fwrite($this->fp,$datastr); // Escribir nuevo contenido del archivo
$my_datastr_len = strlen($datastr);
unset($datastr);
//nueva información del directorio de archivos
$ dirstr = "\x50\x4b\x01\x02";
$dirstr .= "\x00\x00"; // versión hecha por
$dirstr = "\x14. \x00"; // versión necesaria para extraer
$dirstr .= "\x00\x00"; // indicador de bit de propósito de generación
$dirstr .= " \x08\x00 "; // Método de compresión
$dirstr .= $hexdtime; // Último mes
d hora y fecha
$dirstr .= pack('V', $crc); // crc32
$dirstr .= pack('V', $c_len); / Tamaño del archivo comprimido
$dirstr .= pack('V', $unc_len); // Tamaño del archivo sin comprimir
$dirstr .= pack('v', strlen( $ name) ); // La longitud del nombre del archivo
$dirstr .= pack('v', 0 ); // La longitud de los campos adicionales
$dirstr . = pack('v', 0 ); // Longitud del comentario del archivo
$dirstr .= pack('v', 0 ); // Inicio del número de disco
$dirstr .= pack('v', 0 ); // Propiedades del archivo interno
$dirstr .= pack('V', 32 ); // Propiedades del archivo externo - establecer el bit 'archivo'
$ dirstr .= pack('V',$this->datastr_len ); // Desplazamiento relativo del encabezado del archivo local
$dirstr .= $nombre;
$this- >dirstr .= $dirstr; // Información del directorio
$this -> file_count ++;
$this -> dirstr_len += strlen($dirstr);
$this -> datastr_len += $my_ datastr_len
}
function adddir($name){
$name = str_replace; ("\ \", "/", $nombre);
$datastr = "\x50\x4b\x03\x04\x00 x00\x00\x00\x00"; > $datastr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($nombre)
$ datastr .= paquete("V", 0 ).$nombre.paquete("V", 0).paquete("V", 0).paquete("V", 0).paquete("V" , 0) ;
fwrite($this->fp,$datastr); //escribe el contenido del nuevo archivo
$my_datastr_len = strlen($datastr); p>
unset($datastr);
$dirstr = "\x50\x4b\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00 ";
$dirstr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($nombre ) );
$dirstr .= paquete("V", 0 ).paquete("V", 0 ).paquete("V", 0 ).paquete("V", 0 );
$dirstr .= pack("V", 16 ).pack("V",$this->datastr_len).$name
$this->;
dirstr .= $dirstr; // Información del directorio
$this -> file_count ++;
$this -> dirstr_len += strlen($dirstr);
$this -> datastr_len += $my_ x00" .
pack('v', $this -> file_count) .
pack('v', $this - > file_count) .
pack('v', $this -> dirstr_len) .
pack('V', $this -> datastr_len) .
"\x00\x00";
fwrite($this -> fp,$this -> dirstr.$endstr);
fclose($this -> fp);
}
}
if(!trim ($_REQUEST[zipname])) $_REQUEST[zipname] = "shenbin.zip" else $_REQUEST[ zipname] = trim($_REQUEST[zipname]);
if(! strrchr( strtolower($_REQUEST[zipname]),'.') == '.zip') $_REQUEST[zipname] . = ".zip";
$_REQUEST[todir] = str_replace('\/','/',trim($_REQUEST[todir]));
if(! strrchr(strtolower($_REQUEST[todir]),'/')= = '/') $_REQUEST[todir] .= "/"
if($_REQUEST[todir]=="/ ") $_REQUEST[todir] = "./";
función listfiles($dir=".") {
global $faisunZIP;
$ sub_file_num = 0;
if(is_file("$dir")){
if(realpath($faisunZIP ->gzfilename)! =rutareal("$dir")){
$faisunZIP -> addfile(implode('',file("$dir")),"$dir");
Devuelve 1;
}
Devuelve 0;
}
$handle=opendir("$dir");
while ($file = readdir($handle)) {
if($file=="."||$file=="...") continuar;
if(is_dir("$dir/$archivo")){
$sub_file_num += listfiles("$dir/$archivo");
}
else {
if(realpath($ faisunZIP ->gzfilename)!=realpath("$dir/$file")){
$
faisunZIP -> addfile(implode('',file("$dir/$file")),"$dir/$file");
$sub_file_num ++;
}
}
}
closedir($handle);
if(!$sub_file_num) $faisunZIP -> addfile(" ","$dir/");
return $sub_file_num;
}
función num_bitunit($num){
$ bitunit=array(' B',' KB',' MB',' GB');
for($key=0;$key if($num>=pow(2,10*$key)-1){ /1023B se mostrará como 1 KB $num_bitunit_str=(ceil($num/pow(2 , 10*$clave)*100)/100). "$bitunit[$key]"; } } devuelve $num_bitunit_str; } if(is_array($_REQUEST[dfile])){ $faisunZIP = nuevo PHPzip; if($faisunZIP -> startfile("$_REQUEST[todir]$_REQUEST[ zipname]")){ echo "Agregando archivo zip... $filenum = 0; foreach( $_REQUEST[dfile] as $file){ if(is_file($file)){ echo "Archivo: $file<.br>"; }else{ echo "Directorio: $archivo } $filenum += listfiles($archivo); } $faisunZIP -> createfile(); echo " }else{ echo "$_REQUEST[todir]$_REQUEST[zipname] no se puede escribir, verifique si la ruta o los permisos son correctos . "; } }else{ echo "No se ha seleccionado ningún archivo o directorio.
";
";
Compresión completa,*** agregando archivos $filenum.
$_REQUEST[directorio]$_REQUEST[nombre comprimido] (".num_bitunit(filesize("$_REQUEST[directorio]$_REQUEST[nombre comprimido]")."). ") ";