php压缩当前目录文件与文件夹,php在线文件与文件夹压缩实例代码

if ( !IsSet($_GET['dirname']) )

{

show_input_form() ;

}

else

{

// check if empty

if ( empty($_GET['dirname']) )

{

hg_exit("请输入文件夹名!") ;

}

// check valid dirname

if ( FALSE !== strpos($_GET['dirname'], "/") )

{

hg_exit(""/" 是非法的文件夹名!") ;

}

if ( FALSE !== strstr($_GET['dirname'], "..") )

{

hg_exit("".." 是非法的文件夹名!") ;

}

// check valid dir

if ( !is_dir($_GET['dirname']) )

{

hg_exit(""{$_GET['dirname']}" 不是一个有效的文件夹!") ;

}

$szData = "" ;

$szInfo = "" ;

$file_count = @ZipDir($_GET['dirname'], &$szData, &$szInfo) ;

$info_size_16byte = @sprintf("%016d", @strlen($szInfo)) ;

$szData = @sprintf("%016d",$file_count) . $info_size_16byte . $szInfo . $szData ;

$filename = $_GET['dirname'] . ".dat" ;

if ( function_exists(gzencode) )

{

$szData = gzencode($szData) ;

$filename .= ".gz" ;

}

Header("Content-type: application/octet-stream");

Header("Accept-Ranges: bytes");

Header("Accept-Length: " . strlen($szData));

Header("Content-Disposition: attachment; filename=$filename");

echo $szData ;

}

function show_input_form()

{

echo HtmlHead("文件打包") ;

echo "n"

. "请输入要打包的文件夹,注意,仅当前目录下的文件夹才可以下载!

n"

. "n"

. "n"

. "n" ;

echo "n" ;

echo HtmlFoot() ;

}

function ZipDir($szDirName, &$szData, &$szInfo)

{

// write dir header

$szInfo .= "$szDirName|[dir]n" ;

$file_count = 0 ;

$hDir = OpenDir($szDirName) ;

while ( $file = ReadDir($hDir) )

{

if ( $file=="." || $file==".." ) continue ;

$szCurFile = "$szDirName/$file" ;

if ( Is_Dir($szCurFile) )

{

$file_count += ZipDir($szCurFile, &$szData, &$szInfo) ;

}

else if ( Is_File($szCurFile) )

{

$hCurFile = fopen($szCurFile, "rb") ;

$size = filesize($szCurFile) ;

$szStream = fread( $hCurFile, $size ) ;

fclose($hCurFile) ;

$file_count++ ;

// write info

$szInfo .= "$szCurFile|$sizen" ;

// write data

$szData .= $szStream ;

}

}

// write dir footer

$szInfo .= "$szDirName|[/dir]n" ;

return $file_count ;

}

function hg_exit($str)

{

echo HtmlHead("Error, exit!") ;

echo "

" . $str . "" ;

echo HtmlFoot() ;

exit ;

}

function HtmlHead($title)

{

return "nnn"

. "n"

. "n"

. "nnnn" ;

}

function HtmlFoot()

{

return Copyright() . "nnn" ;

}

function Copyright()

{

return "使用完请立即删除本文件,以避免被其它人发现使用!n"

. "

n"

. "n"

. "n"

. "

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值