php在线文件与文件夹压缩实例代码

注明这款php教程文件压缩代码他要借助于zip.exe文件哦,所以我们要把zip.exe压缩文件给拿出来哦。

<?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 "<form name="input">n"
  . "请输入要打包的文件夹,注意,仅当前目录下的文件夹才可以下载!<p>n"
  . "<input name="dirname">n"
  . "<input type="button" value="确定" onClick="show_download_link(dirname.value);">n"
  . "</form>n" ;
 echo "<script>n"
  . "input.dirname.focus();n"
  . "function show_download_link(dir)n"
  . "{"
  . "   var top = (screen.height-200)/2 ;n"
  . "   var left = (screen.width-300)/2 ;n"
  . "   newwin=window.open('', '', 'width=300,height=200,top=' + top + ',left=' + left + ', resizable=0,scrollbars=auto');n"
  . "   url = "{$_SERVER['PHP_SELF']}" + "?dirname=" + dir ;n"
  . "   newwin.document.write('<a href=' + url + '>点击此链接下载,<br>或者右键点击此处选择"另存为"</a>');n"
  . "}"
  . "</script>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 "<h5>" . $str . "</h5>" ;
 echo HtmlFoot() ;
 exit ;
}

function HtmlHead($title)
{
 return "<html>nn<head>n"
  . "<meta http-equiv="Content-Type" content="text/html; charset=gb2312">n"
  . "<style type="text/css教程">n"
  . "body,input,td{font:12px verdana}n"
  . "</style>n"
  . "</head>nn<body>nn" ;
}

function HtmlFoot()
{
 return Copyright() . "n</body>nn</html>" ;
}

function Copyright()
{
 return "<center><font size="5" face="楷体_GB2312" color="red">使用完请立即删除本文件,以避免被其它人发现使用!</font></center>n"
  . "<br><hr color="#003388">n"
  . "<center>n"
  . "<p style="font-family:verdana; font-size:12px">Contact us: n"
  . "<a href="http://www.111cn.net/" target="_blank">http://www.111cn.net/</a></p>n"
  . "</center>n"
  . "</body>n"
  . "n"
  . "</html>" ;
}

?>

时间: 2024-09-16 03:56:56

php在线文件与文件夹压缩实例代码的相关文章

Android中文件的压缩和解压缩实例代码

使用场景 当我们在应用的Assets目录中需要加入文件时,可以直接将源文件放入,但这样会造成打包后的apk整体过大,此时就需要将放入的文件进行压缩.又如当我们需要从服务器中下载文件时,如果下载源文件耗时又消耗流量,较大文件需要压缩,可以使得传输效率大大提高.下面我们就学习下基本的文件压缩和解压缩.Java中提供了压缩和解压缩的输入输出流 public static void zip(String src,String dest) throwsIOException { //定义压缩输出流 Zip

php导出csv文件,可导出前导0实例代码_php实例

实例一:可导出前导0 //导出csv格式文件 $data数据 $title_arr标题 $file_name文件名 function exportCsv($data,$title_arr,$file_name=''){ ini_set("max_execution_time", "3600"); $csv_data = ''; /** 标题 */ $nums = count($title_arr); for ($i = 0; $i < $nums - 1; +

php导出csv文件,可导出前导0实例代码

实例一:可导出前导0 //导出csv格式文件 $data数据 $title_arr标题 $file_name文件名 function exportCsv($data,$title_arr,$file_name=''){ ini_set("max_execution_time", "3600"); $csv_data = ''; /** 标题 */ $nums = count($title_arr); for ($i = 0; $i < $nums - 1; +

Android Uri和文件路径互相转换的实例代码

在项目中需要用到将Uri转换为绝对路径,在网上找到一个方法,做个笔记 网上有不少方法,但是有的对4.4后的版本无效,这里的方法可以在4.4之后的版本将Uri转换为绝对路径 public class GetPathFromUri { /** * 专为Android4.4设计的从Uri获取文件绝对路径 */ public static String getPath(final Context context, final Uri uri) { final boolean isKitKat = Bui

Android 文件选择器详解及实例代码_Android

     本文给大家讲解下Android文件选择器的使用.实际上就是获取用户在SD卡中选择的文件或文件夹的路径,这很像C#中的OpenFileDialog控件.        此实例的实现过程很简单,这样可以让大家快速的熟悉Android文件选择器,提高开发效率.        网上曾经见到过一个关于文件选择器的实例,很多人都看过,本实例是根据它修改而成的,但更容易理解,效率也更高,另外,本实例有自己的特点:        1.监听了用户按下Back键的事件,使其返回上一层目录.       

asp.net javascript 文件无刷新上传实例代码第1/2页_实用技巧

在新增数据项的时候,用ajax实现无刷新提交,但上传文件的时候,由于数据类型原因,不能将页面的<asp:FileUpload>中以字符串值的方式传到js里调用.我一共找到了两个方法予以解决,实现无刷新上传. 第一种方法:利用js的ADODB.Stream,将文件先转换成流,再通过js上传到服务器,这样有个好处就是可以上传超大文件,并且由于是数据流,可以支持断点续传.方便显示上传进度等人性化功能.唯一的缺点是要客户端浏览器需要设置安全级别,或者安装相关ActiveX控件(这个控件自己做的,加载到

Python 文件操作技巧(File operation) 实例代码分析_python

常用的module是 os ,os.path 和shutil,所以要先引入他们. python遍历文件夹和文件 这个也许是最常用的功能,如下: 复制代码 代码如下: import os  import os.path  rootdir = "D:\\programmer\\training"  for parent, dirnames, filenames in os.walk(rootdir):      #case 1:      for dirname in dirnames: 

java实现大文件分割与合并的实例代码_java

复制代码 代码如下: package com.test;  import java.io.BufferedReader;  import java.io.BufferedWriter;  import java.io.FileNotFoundException;  import java.io.FileReader;  import java.io.FileWriter;  import java.io.IOException;  import java.util.Collections;  i

php上传文件,创建递归目录的实例代码_php实例

复制代码 代码如下: <?php $uid=$_REQUEST['uid']; $avatar = 'D:/avic/discuz/uc_server/data/avatar/'.get_avatar($uid, $size, $type);$dir=dirname($avatar); //创建目录成功后移动临时文件if(mkdirs($dir)){ if($_FILES["pic"]["error"] >= 0){ if(move_uploaded_f