必发365游戏官方网址筛选要求的文本,php压缩文件夹最新版

windows下,项目用eclipse开发
,需要将本次修改的文件快速上传到实际生产环境中,先使用这个程序生成同样目录结构的文件夹,然后使用winrar将文件打包成zip格式,上传zip并解包,

本文实例为大家分享了php压缩文件夹的具体代码,供大家参考,具体内容如下

PHP操作ZIP压缩包文件的基本方法大家应该都知道怎么做(如不了解可在本文底部学习PHP操作ZIP的基本方法),那么如何在不解压的情况下直接读取压缩包中的文件呢,如直接在页面中显示压缩包中的图片?

[PHP]代码

优点:

下面就给大家演示一下如何在不解压的情况下直接显示压缩包中的图片文件

<?php
// dir 一定需要用单引号包围,因为目录中可能有特殊字符(如c:\file中\f)
date_default_timezone_set("Asia/Shanghai") ;
$dir = 'D:\workspace\fsflash\src\contents';

// 目标目录放在当前桌面
$target_dir = 'C:\Users\XJ\Desktop\XJ';
$target_dir = 'C:\Users\当前用户的登录名\Desktop\你想建立的文件夹名字';
// 查找多久之前的文件
$target_time = strtotime('-1 hours');

function create_dir($root, $filename, $target_time, $target_dir) {
    if (file_exists($filename)) {
        if (is_dir($filename)) {
            $remove_root = preg_quote($root);
            $new_filename = preg_replace("@$remove_root@", "", $filename);
            @mkdir($target_dir . $new_filename);
            foreach (glob("$filename/*") as $key=>$value) {
                create_dir($root, $value, $target_time, $target_dir);
            }
        } else {
            $modify_time = filemtime($filename);
            // 新增文件使用filectime
            $create_time = filectime($filename);
            if ($modify_time >= $target_time || $create_time >= $target_time) {
                $root = preg_quote($root);
                $str = file_get_contents($filename);
                $filename = preg_replace("@$root@", "", $filename);
                if (!is_file($target_dir . $filename)) {
                    file_put_contents($target_dir . $filename,$str);
                }
                echo $filename . "<br/>";
            }
        }
    } else {
        echo '参数错误';
        return false;
    }
}

// 第二参数控制是全删,还是只是删除空目录
function remove_dir($target_dir, $all_flg = false){
    foreach (glob("$target_dir/*") as $key=>$value) {
        if (is_dir($value) && count(glob("$value/*")) == 0) {
            // 删除第一层目录为空的目录
            rmdir($value);
        } else if (is_dir($value) && count(glob("$value/*")) > 0) {
            // 校验当前目录的所有子目录
            foreach(glob("$value/*") as $sub_key=>$sub_value) {
                remove_dir($sub_value, $all_flg);
            }
            // 经过上一步的处理,再回到当前目录,检验当前目录的子目录是否有空的目录
            remove_dir($value, $all_flg);
            // 如果当前目录经过上面的处理后是空目录,则删除
            if (is_dir($value) && count(glob("$value/*")) == 0) {
                rmdir($value);
            }
        }
        if ($all_flg) {
            if (is_file($value)) {
                unlink($value);
            }
        }
    }
}

// 先清空目标目录
remove_dir($target_dir, true);
// 重建目录
create_dir($dir, $dir, $target_time, $target_dir);
sleep(1);
// 筛选目录
remove_dir($target_dir);
  1. 支持压缩中文文件名
  2. 支持子目录递归压缩
    3.
    同zip文件,重复压缩会合并新增文件,覆盖原来zip中的交集部分,不删除目录下消失的文件,只增不减(自己创建一个目录,生成只有A和B文件的test.zip,然后增加C文件在目录,再压缩成同名test.zip,那么zip里面会有ABC三个文件;如果目录删除其他文件,仅保留A文件,生成test.zip不会有改变,里面还是有ABC)
$zip_path = '12.zip';//压缩包实际路径
$zip = zip_open($zip_path);//利用zip_open函数打开压缩包
while ($re = zip_read($zip)) {//读依次读取包中的文件
 if (!zip_entry_filesize($re)) break;//如果文件大小为0退出操作
 $entry_zp = zip_entry_open($zip,$re,'rb');//读取包中文件
 $ext = pathinfo(zip_entry_name ($re),PATHINFO_EXTENSION);//获取图片文件扩展名
 $buf = zip_entry_read($re,zip_entry_filesize($re));//读取文件二进制数据
 echo sprintf('<img src="data:image/%s;base64,%s">', $ext, base64_encode($buf));//利用base64_encode函数转换读取到的二进制数据并输入输出到页面中
 zip_entry_close($re);//关闭打开的压缩包中的文件
}
zip_close($zip);//关闭压缩包文件

[PHP]代码

缺点:

这段代码最主要的就是利用base64_encode把图片文件的二进制数据转换成浏览器可读的Base64图片数据

<?php
// dir 一定需要用单引号包围,因为目录中可能有特殊字符(如c:\file中\f)
date_default_timezone_set("Asia/Shanghai") ;
$dir = 'D:\workspace\fsflash\src\contents';

// 目标目录放在当前桌面
$target_dir = 'C:\Users\XJ\Desktop\XJ';
$target_dir = 'C:\Users\当前用户的登录名\Desktop\你想建立的文件夹名字';
// 查找多久之前的文件
$target_time = strtotime('-1 hours');

function create_dir($root, $filename, $target_time, $target_dir) {
    if (file_exists($filename)) {
        if (is_dir($filename)) {
            $remove_root = preg_quote($root);
            $new_filename = preg_replace("@$remove_root@", "", $filename);
            @mkdir($target_dir . $new_filename);
            foreach (glob("$filename/*") as $key=>$value) {
                create_dir($root, $value, $target_time, $target_dir);
            }
        } else {
            $modify_time = filemtime($filename);
            // 新增文件使用filectime
            $create_time = filectime($filename);
            if ($modify_time >= $target_time || $create_time >= $target_time) {
                $root = preg_quote($root);
                $str = file_get_contents($filename);
                $filename = preg_replace("@$root@", "", $filename);
                if (!is_file($target_dir . $filename)) {
                    file_put_contents($target_dir . $filename,$str);
                }
                echo $filename . "<br/>";
            }
        }
    } else {
        echo '参数错误';
        return false;
    }
}

// 第二参数控制是全删,还是只是删除空目录
function remove_dir($target_dir, $all_flg = false){
    foreach (glob("$target_dir/*") as $key=>$value) {
        if (is_dir($value) && count(glob("$value/*")) == 0) {
            // 删除第一层目录为空的目录
            rmdir($value);
        } else if (is_dir($value) && count(glob("$value/*")) > 0) {
            // 校验当前目录的所有子目录
            foreach(glob("$value/*") as $sub_key=>$sub_value) {
                remove_dir($sub_value, $all_flg);
            }
            // 经过上一步的处理,再回到当前目录,检验当前目录的子目录是否有空的目录
            remove_dir($value, $all_flg);
            // 如果当前目录经过上面的处理后是空目录,则删除
            if (is_dir($value) && count(glob("$value/*")) == 0) {
                rmdir($value);
            }
        }
        if ($all_flg) {
            if (is_file($value)) {
                unlink($value);
            }
        }
    }
}

// 先清空目标目录
remove_dir($target_dir, true);
// 重建目录
create_dir($dir, $dir, $target_time, $target_dir);
sleep(1);
// 筛选目录
remove_dir($target_dir);
  1. 单个文件不能压缩 (todo)
  2. 文件夹下,不能仅挑选数个文件进行压缩(todo)

注意:在使用PHP的ZIP
FILE系列函数时请确认你的PHP.ini文件中已开启了php_zip.dll扩展库,且在PHP安装目录中的ext文件夹中是否有php_zip.dll
(我用的是Windows系统)。如果php_zip.dll不存在可以到下面这个PHP官方PECL扩展包站上获取

[PHP]代码

/**
 * 总接口
 * @param $dir_path 需要压缩的目录地址(绝对路径)
 * @param $zipName 需要生成的zip文件名(绝对路径)
 */
function zip($dir_path,$zipName){
  $relationArr = [$dir_path=>[
    'originName'=>$dir_path,
    'is_dir' => true,
    'children'=>[]
  ]];
  modifiyFileName($dir_path,$relationArr[$dir_path]['children']);
  $zip = new ZipArchive();
  $zip->open($zipName,ZipArchive::CREATE);
  zipDir(array_keys($relationArr)[0],'',$zip,array_values($relationArr)[0]['children']);
  $zip->close();
  restoreFileName(array_keys($relationArr)[0],array_values($relationArr)[0]['children']);
}

/**
 * 递归添加文件进入zip
 * @param $real_path 在需要压缩的本地的目录
 * @param $zip_path zip里面的相对目录
 * @param $zip ZipArchive对象
 * @param $relationArr 目录的命名关系
 */
function zipDir($real_path,$zip_path,&$zip,$relationArr){
  $sub_zip_path = empty($zip_path)?'':$zip_path.'\\';
  if (is_dir($real_path)){
    foreach($relationArr as $k=>$v){
      if($v['is_dir']){ //是文件夹
        $zip->addEmptyDir($sub_zip_path.$v['originName']);
        zipDir($real_path.'\\'.$k,$sub_zip_path.$v['originName'],$zip,$v['children']);
      }else{ //不是文件夹
        $zip->addFile($real_path.'\\'.$k,$sub_zip_path.$k);
        $zip->deleteName($sub_zip_path.$v['originName']);
        $zip->renameName($sub_zip_path.$k,$sub_zip_path.$v['originName']);
      }
    }
  }
}

/**
 * 递归将目录的文件名更改为随机不重复编号,然后保存原名和编号关系
 * @param $path 本地目录地址
 * @param $relationArr 关系数组
 * @return bool
 */
function modifiyFileName($path,&$relationArr){
  if(!is_dir($path) || !is_array($relationArr)){
    return false;
  }
  if($dh = opendir($path)){
    $count = 0;
    while (($file = readdir($dh)) !== false){
      if(in_array($file,['.','..',null])) continue; //无效文件,重来
      if(is_dir($path.'\\'.$file)){
        $newName = md5(rand(0,99999).rand(0,99999).rand(0,99999).microtime().'dir'.$count);
        $relationArr[$newName] = [
          'originName' => iconv('GBK','UTF-8',$file),
          'is_dir' => true,
          'children' => []
        ];
        rename($path.'\\'.$file, $path.'\\'.$newName);
        modifiyFileName($path.'\\'.$newName,$relationArr[$newName]['children']);
        $count++;
      }
      else{
        $extension = strchr($file,'.');
        $newName = md5(rand(0,99999).rand(0,99999).rand(0,99999).microtime().'file'.$count);
        $relationArr[$newName.$extension] = [
          'originName' => iconv('GBK','UTF-8',$file),
          'is_dir' => false,
          'children' => []
        ];
        rename($path.'\\'.$file, $path.'\\'.$newName.$extension);
        $count++;
      }
    }
  }
}

/**
 * 根据关系数组,将本地目录的文件名称还原成原文件名
 * @param $path 本地目录地址
 * @param $relationArr 关系数组
 */
function restoreFileName($path,$relationArr){
  foreach($relationArr as $k=>$v){
    if(!empty($v['children'])){
      restoreFileName($path.'\\'.$k,$v['children']);
      rename($path.'\\'.$k,iconv('UTF-8','GBK',$path.'\\'.$v['originName']));
    }else{
      rename($path.'\\'.$k,iconv('UTF-8','GBK',$path.'\\'.$v['originName']));
    }
  }
}

PHP官方PECL扩展包站地址:

<?php
// dir 一定需要用单引号包围,因为目录中可能有特殊字符(如c:\file中\f)
date_default_timezone_set("Asia/Shanghai") ;
$dir = 'D:\workspace\fsflash\src\contents';

// 目标目录放在当前桌面
$target_dir = 'C:\Users\XJ\Desktop\XJ';
$target_dir = 'C:\Users\当前用户的登录名\Desktop\你想建立的文件夹名字';
// 查找多久之前的文件
$target_time = strtotime('-1 hours');

function create_dir($root, $filename, $target_time, $target_dir) {
    if (file_exists($filename)) {
        if (is_dir($filename)) {
            $remove_root = preg_quote($root);
            $new_filename = preg_replace("@$remove_root@", "", $filename);
            @mkdir($target_dir . $new_filename);
            foreach (glob("$filename/*") as $key=>$value) {
                create_dir($root, $value, $target_time, $target_dir);
            }
        } else {
            $modify_time = filemtime($filename);
            // 新增文件使用filectime
            $create_time = filectime($filename);
            if ($modify_time >= $target_time || $create_time >= $target_time) {
                $root = preg_quote($root);
                $str = file_get_contents($filename);
                $filename = preg_replace("@$root@", "", $filename);
                if (!is_file($target_dir . $filename)) {
                    file_put_contents($target_dir . $filename,$str);
                }
                echo $filename . "<br/>";
            }
        }
    } else {
        echo '参数错误';
        return false;
    }
}

// 第二参数控制是全删,还是只是删除空目录
function remove_dir($target_dir, $all_flg = false){
    foreach (glob("$target_dir/*") as $key=>$value) {
        if (is_dir($value) && count(glob("$value/*")) == 0) {
            // 删除第一层目录为空的目录
            rmdir($value);
        } else if (is_dir($value) && count(glob("$value/*")) > 0) {
            // 校验当前目录的所有子目录
            foreach(glob("$value/*") as $sub_key=>$sub_value) {
                remove_dir($sub_value, $all_flg);
            }
            // 经过上一步的处理,再回到当前目录,检验当前目录的子目录是否有空的目录
            remove_dir($value, $all_flg);
            // 如果当前目录经过上面的处理后是空目录,则删除
            if (is_dir($value) && count(glob("$value/*")) == 0) {
                rmdir($value);
            }
        }
        if ($all_flg) {
            if (is_file($value)) {
                unlink($value);
            }
        }
    }
}

// 先清空目标目录
remove_dir($target_dir, true);
// 重建目录
create_dir($dir, $dir, $target_time, $target_dir);
sleep(1);
// 筛选目录
remove_dir($target_dir);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

选择与你PHP版本相应的压缩包;
Windows下可以直接把压缩包中的php_zip.dll文件拖放至PHP安装目录中的ext文件夹中即可;
Linux系统需要编译后再修改PHP的配置文件

您可能感兴趣的文章:

  • PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
  • 将文件夹压缩成zip文件的php代码
  • PHP 压缩文件夹的类代码
  • php实现zip压缩文件解压缩代码分享(简单易懂)
  • php生成zip压缩文件的方法详解
  • PHP Zip压缩
    在线对文件进行压缩的函数
  • php启用zlib压缩文件的配置方法
  • PHP Zip解压
    文件在线解压缩的函数代码
  • php文件打包
    下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

附上PHP操作Zip File的基本函数

函数 描述 PHP
zip_close() 关闭 ZIP 文件。 4
zip_entry_close() 关闭 ZIP 文件中的一个项目。 4
zip_entry_compressedsize() 返回 ZIP 文件中的一个项目的被压缩尺寸。 4
zip_entry_compressionmethod() 返回 ZIP 文件中的一个项目的压缩方法。 4
zip_entry_filesize() 返回 ZIP 文件中的一个项目的实际文件尺寸。 4
zip_entry_name() 返回 ZIP 文件中的一个项目的名称。 4
zip_entry_open() 打开 ZIP 文件中的一个项目以供读取。 4
zip_entry_read() 读取 ZIP 文件中的一个打开的项目。 4
zip_open() 打开 ZIP 文件。 4
zip_read() 读取 ZIP 文件中的下一个项目。 4

您可能感兴趣的文章:

  • php
    解压zip压缩包内容到指定目录的实例
  • 真正的ZIP文件操作类(php)
  • PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
  • php的ZipArchive类用法实例
  • php zip文件解压类代码
  • php的zip解压缩类pclzip使用示例
  • 一个PHP的ZIP压缩类分享
  • php实现的zip文件内容比较类
  • php生成zip文件类实例
  • php中adodbzip类实例
  • PHP
    zip压缩包操作类完整实例

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website