我的编程空间,编程开发者的网络收藏夹
学习永远不晚

php读取zip文件(删除文件,提取文件,增加文件)实例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

php读取zip文件(删除文件,提取文件,增加文件)实例

      下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。     

从zip压缩文件中提取文件

 代码如下复制代码
open('jQuery五屏上下滚动焦点图代码.zip')===TRUE) {//中文文件名要使用ANSI编码的文件格式 $zip->extractTo('foldername');//提取全部文件 //$zip->extractTo('/my/destination/dir/', array('pear_item.gif', 'testfromfile.php'));//提取部分文件 $zip->close(); echo 'ok'; } else { echo 'failed'; } ?>

从一个zip压缩文件中删除文件

 代码如下复制代码
open('ajaxupload.zip')===TRUE) { $zip->deleteName('file.txt');//删除文件 $zip->deleteName('testDir/');//删除文件夹 $zip->close(); echo 'ok'; } else { echo 'failed'; } ?>

添加一个文件到zip压缩文件中

 代码如下复制代码
open('ajaxupload.zip')===TRUE) {//ajaxupload.zip 是已经存在的zip文件,注意中文文件名要注意编码问题 $zip->addFile('33.xml');//添加新的文件 $zip->close(); echo 'ok'; } else { echo 'failed'; } ?>
      php ZipArchive可以说是php自带的一个函数了,他可对对文件进行压缩与解压缩处理,但是使用此类之前我们必须在php.ini中把extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个类库。     

ziparchive 可选参数

ZipArchive::addEmptyDir

添加一个新的文件目录

ZipArchive::addFile

将文件添加到指定zip压缩包中。

ZipArchive::addFromString

添加的文件同时将内容添加进去

ZipArchive::close

关闭ziparchive

ZipArchive::extractTo

将压缩包解压

ZipArchive::open

打开一个zip压缩包

ZipArchive::getStatusString

返回压缩时的状态内容,包括错误信息,压缩信息等等

ZipArchive::deleteIndex

删除压缩包中的某一个文件,如:deleteIndex(0)删除第一个文件

ZipArchive::deleteName

删除压缩包中的某一个文件名称,同时也将文件删除。

*/

实例

一、解压缩zip文件

 代码如下复制代码    $zip=new ZipArchive;//新建一个ZipArchive的对象

if ($zip->open(‘test.zip’)===TRUE)

{

$zip->extractTo(‘images’);//假设解压缩到在当前路径下images文件夹的子文件夹php

$zip->close();//关闭处理的zip文件

}

二、将文件压缩成zip文件

 代码如下复制代码    $zip=new ZipArchive;

if ($zip->open(‘test.zip’, ZipArchive::OVERWRITE)===TRUE)

{

$zip->addFile(‘image.txt’);//假设加入的文件名是image.txt,在当前路径下

$zip->close();

}

三、文件追加内容添加到zip文件

 代码如下复制代码    $zip=new ZipArchive;

r e s = res= res=zip->open(‘test.zip’, ZipArchive::CREATE);

if ($res===TRUE) {

$zip->addFromString(‘test.txt’, ‘file content goes here’);

$zip->close();

echo ‘ok’;

} else {

echo ‘failed’;

}

四、将文件夹打包成zip文件

 代码如下复制代码

function addFileToZip($path, $zip) {

h a n d l e r = o p e n d i r ( handler=opendir( handler=opendir(path); //打开当前文件夹由$path指定。

while (( f i l e n a m e = r e a d d i r ( filename=readdir( filename=readdir(handler)) !==false) {

if ($filename !=“.” && $filename !=“…”) {//文件夹文件名字为’.'和‘…’,不要对他们进行操作

if (is_dir($path . “/” . $filename)) {// 如果读取的某个对象是文件夹,则递归

addFileToZip($path . “/” . $filename, $zip);

} else { //将文件加入zip对象

z i p − > a d d F i l e ( zip->addFile( zip>addFile(path . “/” . $filename);

}

}

}

@closedir($path);

}

$zip=new ZipArchive();

if ($zip->open(‘images.zip’, ZipArchive::OVERWRITE)===TRUE) {

addFileToZip(‘images/’, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法

$zip->close(); //关闭处理的zip文件

}

如果只知道文件名,而不知到文件的具体路径,可以搜索指定文件名的索引,再依靠索引获取内容。

 代码如下复制代码
open('test.zip')===TRUE) { $index=$zip->locateName('example.php', ZIPARCHIVE::FL_NOCASE|ZIPARCHIVE::FL_NODIR); $contents=$zip->getFromIndex($index); } ?>

上面获取索引依靠 locateName方法,如果压缩包内多个路径下有同名文件,好像只能返回第一个的索引,如果要获取所有同名文件的索引,只能使用笨办法,循环搜索。

 代码如下复制代码
open('test.zip')===TRUE) { for($i=0; $i < $zip->numFiles; $i++) { if(substr_count($zip->getNameIndex($i), 'example.php')>0){ $contents=$zip->getFromIndex($i); } } } ?>
      在做PHP程序时,经常会遇到设计多级菜单的编程,比如我们常见的三级菜单,首先展示产品的第一级分类,然后展示二级分类,最后再展示产品,这样就构成了三级结构,如果在后台没有一个很好的分类菜单支持,那么去更改数据时是很麻烦的。     

最近在做一个内容管理的项目,客户硬要来一个多级分类,其实在许多的开源后台都是无限级的分类,比如111cn.net的后台,而这些分类的数据仅仅只保存到了一个数据表里,只是用源代码进行了关联而已。

而这些关联的数据并不复杂,其实一个优秀的后台设计,应该是无限的分类,这样,在进行二次开发时,不用再单独进行编程了,只要是功能一样,后台添加一个分类就可以了,这样就达到了功能共享了。

一个更简单的无限级分类菜单代码,我就把上面的原理简单实现一下,这个程序的关键就在于数据表的设计很有特色,不用递归,依靠个简单SQL语句就能列出菜单,看看这个数据表怎么设计的:

数据库字段大概如下:

———————————————————————————–

id 编号

fid 父分类编号

name 分类名

path 分类路径,以 id 为节点,组成类似 ,1,2,3,4, 这样的字符串

———————————————————————————-

可以假设有如下的数据

id fid name path

—————————————————-

1 0 分类1 ,1,

2 0 分类2 ,2,

3 1 分类1-1 ,1,3,

4 1 分类1-2 ,1,4,

5 2 分类2-1 ,2,5,

6 4 分类1-2-1 ,1,4,6,

—————————————————-

实现的PHP全部代码用类封装的,不是必要,而是自己也想熟悉一下OO,呵呵!,来看看页面代码:

 代码如下复制代码
query($sql); while($rows=$this->loop_query($result)){ if(substr_count($rows['path'],',')>2){ for($i=0;$i<(substr_count($rows['path'],',')-2);$i++) echo ' '; } echo $rows['name'].'
'; } } //创建析构函数,作用:关闭数据库连接 public function __destruct(){ return mysql_close(); } } $db=new menu();//生成实例 $db->menulist();//调用方法生成菜单 ?>

小提示:这样就生成了一个无限级的分类菜单,当然,不仅仅只是应用在菜单上,而且可以应用在产品的分类以及地市区的分类上面,后台的增删改查需要自己小小的去写一下

原文来自:04ie.com

      在php中对于文件的操作我们多半会使用文件锁定来为避免多用户同时操作时冲突了,下面小编与大家一起来测试一下文件锁定独占操作一些实例分析。     

flock – 轻便的咨询文件锁定

flock()函数原型

bool flock ( int handle, int operation [, int &wouldblock] )

PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法

operation 可以是以下值之一:

要取得共享锁定(读取的程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。

要取得独占锁定(写入的程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。

要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。

如果不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。

flock() 允许执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),可选的第三个参数会被设置为 TRUE。锁定操作也可以被 fclose() 释放(代码执行完毕时也会自动调用)。

如果成功则返回 TRUE,失败则返回 FALSE。

注意:

在 Windows 下 flock() 将会强制执行。flock() 操作的 handle 必须是一个已经打开的文件指针。

由于 flock() 需要一个文件指针, 因此可能不得不用一个特殊的锁定文件来保护打算通过写模式打开的文件的访问(在 fopen() 函数中加入 “w” 或 “w+”)。

flock() 不能用于 NFS 以及其它一些网络文件系统。flock() 不支持旧的文件系统,如 FAT 以及它的派生系统。因此,此环境下总是返回 FALSE(尤其是对 Windows)详细资料查看自己操作系统的文档。

在部分操作系统中 flock() 以进程级实现。当用一个多线程服务器 API(比如 ISAPI)时,可能不可以依靠 flock() 来保护文件,因为运行于同一服务器实例中其它并行线程的 PHP 脚本可以对该文件进行处理。

独占测试:

下列两个文件都差不多,区别在于写入的东西不一样,先运行a.php文件,保持不关闭状态,接着运行b.php文件,然后去查看写入的文件内容,你会发现b.php文件的内容并没有写入成功!

 代码如下复制代码

比如我们有两个文件,如下。

flocka.php

 代码如下复制代码    $file='temp.txt';$fp=fopen($file,'a');for($i=0;$i < 5;$i++){    fwrite($fp, "11111111n");    sleep(1);}fclose($fp); 

flockb.php

 代码如下复制代码    $file='temp.txt';$fp=fopen($file,'a');for($i=0;$i < 5;$i++){    fwrite($fp, "22222222n");}fclose($fp); 

先运行flocka.php,然后马上运行flockb.php。

结果:

11111111

22222222

22222222

22222222

22222222

22222222

11111111

11111111

11111111

11111111

说明不加文件锁时,两个文件会同时对txt文件进行写入操作。

下面修改一下两个php文件的代码。

flocka.php

 代码如下复制代码         $file='temp.txt';$fp=fopen($file,'a');if(flock($fp,LOCK_EX)){    for($i=0;$i < 5;$i++)    {        fwrite($fp, "11111111n");        sleep(1);    }    flock($fp,LOCK_UN);}fclose($fp); 

flockb.php

 代码如下复制代码    $file='temp.txt';$fp=fopen($file,'a');if(flock($fp,LOCK_EX)){    for($i=0;$i < 5;$i++)    {        fwrite($fp, "22222222n");    }     flock($fp,LOCK_UN);}fclose($fp); 

同样先运行flocka.php,然后马上运行flockb.php。

会发现在flocka.php运行结束前,flockb.php一直处于等待状态,只有当flocka.php运行结束后,flockb.php才会继续执行。

输出结果:

11111111

11111111

11111111

11111111

11111111

22222222

22222222

22222222

22222222

22222222

另外,在执行flock时,文件锁会自动释放

      因为服务器上安装了安全狗这个功能,我们直接的sql是不能使用的,下面我来给各位同学介绍介绍一下phpmyadmin把sql语句改为base64传输来解决这个问题。     

首先 修改 libraries/header.inc.php

将 js base64 的函数 粘贴到 第 61 行

然后 修改 js/sql.js

找到 $(“#sqlqueryform.ajax”).live(“submit”,function(a){ 这一段

改为下面这样,

 代码如下复制代码

$(“#sqlqueryform.ajax”).live(“submit”,function(a){

a.preventDefault();

var b=$(this);

if(!checkSqlQuery(b[0]))return false;

$(“.error”).remove();

var c=PMA_ajaxShowMessage(),e=$(“#sqlqueryresults”);

PMA_prepareForAjaxRequest(b);

$(‘#sqlquery’).val( Base64.encode( $(‘#sqlquery’).val() ) );

$.post(b.attr(“action”),b.serialize(),function(d){

最后修改 import.php

import.php 文件第24行 插入

 代码如下复制代码

s q lq u e r y = b a s e 6 4d e c o d e ( sql_query=base64_decode( sqlquery=base64decode(sql_query);

ok 现在 如果是通过点击 sql 输入的查询 全部会通过base64编码后 再进行传输了 ,可以躲过安全狗之类的安全防御软件的拦截

来源地址:https://blog.csdn.net/dituirenwu/article/details/128888590

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

php读取zip文件(删除文件,提取文件,增加文件)实例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在 Java 中读取 zip 文件?(java怎么读取zip文件)

在Java编程中,读取zip文件是一项常见的任务。Zip文件是一种常用的压缩文件格式,它可以将多个文件和目录打包成一个单独的文件,方便存储和传输。以下是在Java中读取zip文件的步骤:一、导入相关的Java类库
如何在 Java 中读取 zip 文件?(java怎么读取zip文件)
Java2024-12-21

java怎么读取zip文件

要读取zip文件,可以使用Java的java.util.zip包中的ZipInputStream类来实现。下面是一个简单的示例代码,演示了如何读取zip文件中的内容:import java.io.FileInputStream;impo
2023-10-26

在 PHP 中读取文本文件

本文将介绍 PHP 中逐行读取文本文件的方法。在 PHP 中使用 fgets() 函数逐行读取文本文件我们可以使用带有 while 循环的 fgets() 函数在 PHP 中逐行读取文本文件。如果有一行,该函数返回一行,如果没有更多的行要读
在 PHP 中读取文本文件
2024-02-27

Python按行读取文件的实现方法【小文件和大文件读取】

本文实例讲述了Python按行读取文件的实现方法。分享给大家供大家参考,具体如下: 小文件:#coding=utf-8 #author: walker #date: 2013-12-30 #function: 按行读取小文件 all_lin
2022-06-04

PHP如何打开 ZIP 文件以供读取

本文介绍了使用PHP打开ZIP文件以供读取的方法,提供了详细的分步指南。该方法涵盖了打开ZIP文件、检查打开状态、提取文件内容、处理文件内容以及关闭ZIP文件的各个步骤。对于处理多个文件,文章也提供了使用ZipArchive::numFiles()和ZipArchive::getNameIndex()函数的解释。此外,本文还提到了使用fopen()函数和第三方库作为打开ZIP文件的替代方法。
PHP如何打开 ZIP 文件以供读取
2024-04-02

读取位于密码保护 zip 文件中的 CSV 文件

大家好,今天本人给大家带来文章《读取位于密码保护 zip 文件中的 CSV 文件》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!问题内容我有这样的链接:https://s
读取位于密码保护 zip 文件中的 CSV 文件
2024-04-04

python怎么读取zip包内文件

可以使用`zipfile`模块来读取zip包内的文件。下面是一个使用示例:import zipfile# 打开zip包with zipfile.ZipFile('example.zip', 'r') as zip_ref:# 获取zip
2023-10-27

python 读取excel文件生成sql文件实例详解

python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次。这次是为了从excel文件中读取数据然后写入到数据库中。这个逻辑用java来写的话就太重了,所以这次考虑通过python脚本来实现。 在
2022-06-04

php 读取本地文件

在 PHP 中,可以使用以下方法之一来读取本地文件: file_get_contents() 函数:读取整个文件并将其作为字符串返回。 $filename = "/path/to/file.txt"; // 要读取的文件路径$conten
2023-08-18

读取android根目录下的文件或文件夹实例

最近几天真的是各种意义上的忙,忙着考试,还要忙着课程设计,手上又有外包的项目,另一边学校的项目还要搞,自己的东西还在文档阶段,真的是让人想死啊!! 近半个月来,C#这方面的编码比较多,android和java这里完全搁置了,于是抽空写个小例
2022-06-06

C++读取文件和写入文件内容实例详解

本文详细介绍了如何使用 C++ 读取和写入文件内容。我们首先了解了 C++ 中的文件流类,包括 Ifstream、Ofstream 和 Fstream。然后,我们演示了如何使用 Ifstream 类读取文本文件内容,并使用 Ofstream
C++编程语言2024-11-30

android读取assets文件示例

代码如下:// 读取assets文件private void assetsRead(){String fileName = "my_assets.txt";// assets下文件//String fileName = "test/my_a
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录