php ZipArchive类创建和解压zip文件实例

 更新时间:2016年11月25日 15:45  点击:1785
如果你使用的是php5.2以下的php版本是无法使用ZipArchive类的,只要php5.2及以上版本才可以方便的使用ZipArchive类来解压与压缩zip文件了,下面小编来给各位同学介绍一下。

也能直接读取zip压缩包内的内容,很方便,这里主要总结下读取和解压的过程。

解压一个包到指定目录

 代码如下 复制代码
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
  $zip->extractTo('/my/destination/dir/');
  $zip->close();
  echo 'ok';
} else {
  echo 'failed';
}
?>

 
如果只是需要读取包中某个文件的内容,需要文件名或者文件的索引值。

 

 代码如下 复制代码
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
  echo $zip->getFromName('example.php');
  $zip->close();
}
?>


如果example.php在某目录下,获取内容时需要加上路径。

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

 

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

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

 代码如下 复制代码

<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
 for($i = 0; $i < $zip->numFiles; $i++)
   {
     if(substr_count($zip->getNameIndex($i), 'example.php')>0){
       $contents = $zip->getFromIndex($i);            
      }
   }
}
?>

本人测试的是php5.3版本哦,测试没有任何问题并且压缩zip 文件比以前的 zip命令要快多了。

在php中如果要实现多文件上传我们只要遍历表单就基本实现了一半,下面小编来给大家介绍PHP中上传多个文件到服务器实例,希望此方法对各位有用。

实例说明

上传图片到服务器,是程序开发过程中必不可少的一个功能。它不但可以达到图片共享的目的,而且可以提高网站的访问量,丰富网站的内容。在本实例中,讲解如何通过POST方式实现多图片上传。

关键技术

多文件上传的关键是如何定义上传文件元素的名称及如何判断上传文件的数量。在本实例中,以数组的形式定义上传文件的名称(上传文件的名称是“files[]”)。为了达到可以上传任意数量图片(4个图片以内)的目的,在对上传文件进行处理的过程中应用array_filter()函数和回调函数去除数组中的空元素。

  array_filter()函数,用回调函数过滤数组中的单元,语法如下:
  array array_filter(array input[,callback callback])


  array_filter()函数依次将input数组中的每个值传递到callback函数。如果callback函数返回TRUE,则input数组的当前值会被包含在返回的结果数组中,并且数组的键名保留不变。
  说明:在回调函数中不要对数组进行修改操作,例如,增加或者删除数组中的元素,如果一旦数组改变,那么此函数的运用也就没有意义了。如果没有提供callback()函数,array_filter()将删除input中本实例中定义的回调函数是check(),用于验证数组中的元素值是否为空,其语法如下:

 代码如下 复制代码


function check($var){//验证数组的返回值是否为空
          return($var!="");
  }

说明:通过POST方法实现多图片上传,在创建form表单时,必须指定enctype="multipart/form-data"属性。如果要通过隐藏域MAX_FILE_SIZE的值对上传文件的大小进行控制,那么必须将隐藏放置在上传文件的文件域之前,否则是不会起作用的。
设计过程


  (1)创建index.php文件。添加表单,设置文件域、提交按钮,使用POST方法,设置enctype="multipart/form-data",将数据提交到index_ok.php页,完成多个文件的上传操作,其关键代码如下:

 代码如下 复制代码

  <table width="750"border="0"cellspacing="0"cellpadding="0">
        <form action="index_ok.html"method="post"enctype="multipart/form-data"name="form1">
           <tr>
             <td width="100"height="25"align="right"class="STYLE1">内容1:</td>
             <td width="150"align="center"><input name="files[]"type="text"id="files[]"size="15"></td>
             <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td>
           </tr>
           <tr>
             <td height="25"align="right"class="STYLE1">内容2:</td>
             <td width="center"><input name="files[]"type="text"id="files[]"size="15"></td>
             <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td>
           </tr>
         <tr>
            <td colspan="3"align="center">
                 <input type="image"name="imageField"src="images/bg_09.jpg">&nbsp;&nbsp;&nbsp;&nbsp;
                 <input type="image"name="imgeField2"src="images/bg_11.jpg"></td>
            </tr>
          </form>
         </table>


    (2)在index.php文件中,连接数据库,读取数据库中存储的数据,实现上传文件的分页输出。代码请参考光盘中的相关内容。
    (3)创建index.php文件获取表单中提交的数据,将多个文件存储到服务器中,将文件的名称和存储路径存储到数据库中,其代码如下:

 代码如下 复制代码


<?php
    header("Content-type:text/html;charset=UTF-8");     //设置文件编码格式
    include"conn/conn.php";                             //包含数据库链接文件
    if($_POST[files]!=""){
          if(! is_dir("./upfile")){
                  mkdir("./upfile");                    //创建上传文件存储文件夹
          }
          $data=date("Y-m-d H:m:s");                    //定义时间
          function check($var){                         //验证数组的返回值是否为空
                     return($var!="");                  //如果不为空则返回数组元素
          }
          $files=array_filter($_POST["files"],"check");  //去除数组中空值
          $array=array_filter($_FILES["picture"]["name"],"check"); //去除数组中空值
          foreach=($aarray as $key=>value){             //循环读取数组中数据
                 $path='upfile/'.time().$key.strtolower(strstr($value,".")); //定义上传文件存储位置
                 move_uploaded_file($_FILES["picture"]["tmp_name"][$key],$path);  //执行上传操作
                 $query="insert into tb_up_file(file_test,data,file_name)values('$path','$data''$files[$key]')";
                 $result=mysql_query($query);
          }
          echo"<script>
          alert('图片上传成功');window.location.href='index.html';</script>";
         }
         ?>

在php中memcache是一个缓存功能,可以提高数据访问性能同时减少机器负载,下面我来介绍php中memcache优化方法吧。

memcache support enabled
Active persistent connections 0
Revision $Revision: 1.92 $

Directive Local Value Master Value
memcache.allow_failover 1 1
memcache.chunk_size 8192 8192
memcache.default_port 11211 11211
memcache.hash_function crc32 crc32
memcache.hash_strategy standard standard
memcache.max_failover_attempts 20 20

 在网上找到php的memcache模块的优化方面的部分资料,贴出来备忘.

 代码如下 复制代码

vi /etc/php.d/memcache.ini
[Memcache]
; Enable memcache extension module
extension=memcache.so
memcache.allow_failover = "1"
memcache.max_failover_attempts = "20"
memcache.chunk_size = "8192"
memcache.default_port = "11211"
memcache.hash_strategy = "standard"
memcache.hash_function = "crc32"

ps:

 代码如下 复制代码
memcache.allow_failover = "1"

一个布尔值,用于控制当连接出错时 Memcache 扩展是否故障转移到其他服务器上.默认值为 1 (true).

 代码如下 复制代码

memcache.max_failover_attempts = "20"

一个整型值,用于限制连接到持久性数据或检索数据的服务器数目.如果 memcache.allow_failover 为 false,则将忽略此参数.默认值为 20.

 代码如下 复制代码
memcache.chunk_size = "8192"

一个整型值,用于控制数据传输的大小.默认值为 8192 字节 (8 KB),但是如果设置为 32768 (32 KB),则可以获得更好的性能.

 代码如下 复制代码

memcache.default_port = "11211"

另一个整型值,用于设置连接到 Memcache 所使用的 TCP 端口.除非您修改它,否则默认值为无特权的高端口 11211.

 代码如下 复制代码

memcache.hash_strategy = "standard"

哈希策略,目前有standard模式和consistent模式.standard模式其实就是%,即取模.而consistent,就比较复杂, memcache.hash_function = "crc32"
控制哪种 hsah 函数被应用于 key映射 到服务器过程中,默认值“crc32”使用 CRC32 算法,而“fnv”则表示使用 FNV-1a 算法.

测试memcache

 代码如下 复制代码

<?php
$mc = new Memcache;
$mc->connect("127.0.0.1",11211);
$item = $mc->get('item');
if(!is_array($item)){
echo "Add item to memcache";
$mc->add('item',array('item'));
}
$item = $mc->get('item');
var_dump($item);
?>

最后,祝您成功提升服务器性能,网站运营如日中天

开发者认证实例,希望此实例对各位有所帮助。

微信公众平台如何成为开发者?

登录微信公众平台后,点击高级功能=》开发模式=》成为开发者=》填写接口配置信息,提交后等待我司工作人员的审核。


1.开发者认证

这个最简单了,直接上个超简单版代码:

 代码如下 复制代码

exit($_GET['echostr']);

php文件就写上面这一句就行,微信公共平台随便填写token,写上php文件的url,然后验证即可通过。超级简单吧?官方的认证根本没有必要,因为后面的步骤没有使用的验证签名的地方,所以这个地方为了图方便直接输出返回值轻松通过验证。当然下面也给出官方要求的认证代码:

 代码如下 复制代码

$token='11';
$signarr=array($token,$_GET['timestamp'],$_GET['nonce']);
if($this-&gt;signnature($signarr,$_GET['signature'])){
   exit($_GET['echostr']);
}
function signnature($arr,$signature){
   sort($arr);
   if(sha1(implode($arr))==$signature) return true;
   return false;
}

把上面的代码保存成php文件,在微信公共平台设置同样的token,然后验证即可通过。

注:url是允许带get参数的

网址接入

公众平台用户提交信息后,我们将以GET请求方式请求到填写的Url上,并且带上四个参数:

* signature — 微信加密签名
* timestamp — 时间戳
* nonce — 随机数
* echostr — 随机字符串

开发者通过检验signature对网址接入合法性进行校验。若此次GET请求原样返回echostr参数内容,则接入生效,否则接入失败。  验证signature将结合开发者填写的token参数、timestamp

参数和nonce参数等,加密流程:
* 将token、timestamp、nonce三个参数进行字典序排序
* 将三个参数字符串拼接成一个字符串进行sha1加密
* 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。

在php中条件控制语包括了if语句、swicth语句、三无操作符等下面小编来给大家总结它们三个在php中的一些应用实例了,希望此教程对各位朋友有所帮助。

PHP条件控制语句一共有三种:

第一种:if语句;

第二种:switch语句;

第三种:三元操作符;

分别讲解下这三种条件控制语句。

第一种:if语句。


if语法有以下几种格式:

1)、

if (表达式一) {  //满足条件执行以下程序段

执行语句;
}

例如:

 代码如下 复制代码

<?php

if ($a > $b) {
echo "a is bigger than b";
$b = $a;
}
?>

2)、

if (表达式一){   //满足条件执行以下程序段

执行语句;

}

else{        //不满足执行如下程序段

执行语句;

}

例如:

 代码如下 复制代码

<?php
if ($a > $b) {
echo "a is bigger than b";
} else {
echo "a is NOT bigger than b";
}
?>

3)、if (表达式一) {   //满足条件执行以下程序段

}elseif  (表达式二)  {

}else {

}

例如:

 代码如下 复制代码

<?php

$a=45;

$b=50;

if ($a>$b)      {  print  “a大于b”;  }

elseif ($a==$b)      {  print  “a等于b”;  }

else      {  print “a小于b”;  }

?>

 

第二种:switch语句。

Switch是多路分支语句,虽然可以通过多重嵌套的if语句来实现多路分支,但嵌套越深,程序的可读性越差。使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。

Switch语句的语法

switch (var) {
case 值1:
语句1;
   break;
case 值2:

语句2;
   break;
case 值N:

语句N;
   break;
default:

语句;

}

例如:

 代码如下 复制代码

<?php

$i=1;

switch ($i) {
case 0:
echo  "i equals 0";
break;
case 1:
echo   "i equals 1";
break;
case 2:
echo   "i equals 2";
break;

default:
echo   "i no equals";
break;
}
?>

第三种:三元操作符。

PHP脚本语言支持操作符?:,它是if语句的紧凑版本。我们可以用下面的实例来对该三元操作符进行解释:


三元操作符语法:

(条件)?’执行语句1′:’执行语句2′;

解释为:如果条件为TRUE则执行语句1,如果条件为FALSE则执行语句2;

例如:

 代码如下 复制代码

echo  ($a>$b)?“a大于b”:“a不大于b”;

解释为:

如果$a>$b,则输入a大于b;如果$a<$b,则输入a不大于b。

[!--infotagslink--]

相关文章

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

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31
  • PHP判断上传文件类型的解决办法

    分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21