PHP学习笔记-非常有用的 PHP 代码片段(1)

怎么开启 ZipArchive 扩展 请可自行百度。

直接上代码

//单个文件插入Zip包
function addFileToZip($path, $zip) {
	$handler = opendir($path); //打开当前文件夹由$path指定。
	/*
	循环的读取文件夹下的所有文件和文件夹
	其中$filename = readdir($handler)是每次循环的时候将读取的文件名赋值给$filename,
	为了不陷于死循环,所以还要让$filename !== false。
	一定要用!==,因为如果某个文件名如果叫‘0‘,或者某些被系统认为是代表false,用!=就会停止循环
	*/
	while (($filename = readdir($handler)) !== false) {
		if ($filename != "." && $filename != "..") {//文件夹文件名字为‘.‘和‘..’,不要对他们进行操作
			if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
				addFileToZip($path . "/" . $filename, $zip);
			} else { //将文件加入zip对象
				$zip->addFile($path . "/" . $filename);
			}
		}
	}
	@closedir($path);
}

/* 
 *   @creates a compressed zip file  将多个文件压缩成一个zip文件的函数 
 *   @$files 数组类型  实例array("1.jpg","2.jpg");   
 *   @destination  目标文件的路径  如"c:/androidyue.zip" 
 *   @$overwrite 是否为覆盖与目标文件相同的文件 
 */  
function create_zip($files = array(),$destination = ‘‘,$overwrite = false) {  
    //if the zip file already exists and overwrite is false, return false  
    //如果zip文件已经存在并且设置为不重写返回false  
    if(file_exists($destination) && !$overwrite) { return false; }  
    //vars  
    $valid_files = array();  
    //if files were passed in...  
    //获取到真实有效的文件名  
    if(is_array($files)) {  
        //cycle through each file  
        foreach($files as $file) {  
        //make sure the file exists  
            if(file_exists($file)) {  
            $valid_files[] = $file;  
            }  
        }  
    }  
    //if we have good files...  
    //如果存在真实有效的文件  
    if(count($valid_files)) {  
        //create the archive  
        $zip = new ZipArchive();  
        //打开文件       如果文件已经存在则覆盖,如果没有则创建  
        if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {  
            return false;  
        }  
        //add the files  
        //向压缩文件中添加文件 
        if ($zip->open($destination, ZipArchive::OVERWRITE) === TRUE) {
           foreach($valid_files as $file) {  
              addFileToZip($file, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
           } 
	} 
        //debug  
        //echo ‘The zip archive contains ‘,$zip->numFiles,‘ files with a status of ‘,$zip->status;  
        //close the zip -- done!  
        //关闭文件  
        $zip->close();  
        //check to make sure the file exists  
        //检测文件是否存在  
        return file_exists($destination);  
    }else{  
        //如果没有真实有效的文件返回false  
        return false;  
    }  
}

单个文件下载实例:

$filename = ‘../download/zipfilename.zip‘; //压缩文件的路径

$zip = new ZipArchive();
if ($zip->open($filename, ZipArchive::OVERWRITE) === TRUE) {
    addFileToZip("../folder", $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
    $zip->close(); //关闭处理的zip文件
}

header("Cache-Control: public");  
header("Content-Description: File Transfer");  
header(‘Content-disposition: attachment; filename=‘.basename($filename)); //文件名  
header("Content-Type: application/zip"); //zip格式的  
header("Content-Transfer-Encoding: binary");    //告诉浏览 器,这是二进制文件  
header(‘Content-Length: ‘. filesize($filename));    //告诉浏览 器,文件大小  
@readfile($filename);

多个文件打包下载实例:

$filsarr = array("../folder1", "../folder2", "../folder5", "../folder11"); //可挑选各个目录下的内容
$filename = ‘../download/zipfilename.zip‘; //压缩文件的路径

create_zip($filsarr, $filename);

header("Cache-Control: public");  
header("Content-Description: File Transfer");  
header(‘Content-disposition: attachment; filename=‘.basename($filename)); //文件名  
header("Content-Type: application/zip"); //zip格式的  
header("Content-Transfer-Encoding: binary");    //告诉浏览 器,这是二进制文件  
header(‘Content-Length: ‘. filesize($filename));    //告诉浏览 器,文件大小  
@readfile($filename);
时间: 2024-11-07 11:42:28

PHP学习笔记-非常有用的 PHP 代码片段(1)的相关文章

Django学习笔记 官网教程纠正 代码

原文: Django学习笔记 官网教程纠正 代码 Django学习笔记 4.模板初学中,照书例django book 出现以下异常 raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE) ImportError: Settings cannot be imported, because environmen

sublime text 2学习(二):创建可复用的代码片段

对于前端工程师来讲,写一个html页面的基本结构是体力活,每次去拷贝一个也麻烦,sublime text 2 提供了一个很好的复用代码片段.下面介绍一下创建一个html5的代码片段的过程. 在菜单上点击Tools -> New Snippet,会新建一个xml文件页签: <snippet> <content><![CDATA[ Hello, ${1:this} is a ${2:snippet}. ]]></content> <!-- Optio

有用的Python代码片段

我列出的这些有用的Python代码片段,为我节省了大量的时间,并且我希望他们也能为你节省一些时间.大多数的这些片段出自寻找解决方案,查找博客和StackOverflow解决类似问题的答案.下面所有的代码片段已经在Python 3中测试. 在Python中调用一个外部命令 有时你需要通过shell或命令提示符调用一个外部命令,这在Python中通过使用subprocess模块很容易实现. 只需要运行一条命令: import subprocess subprocess.call(['mkdir',

7个有用的jQuery代码片段分享

7个有用的jQuery代码片段分享 jQuery是一款轻量级的JavaScript库,是最流行的客户端HTML脚本之一,它在WEB设计师和开发者中非常的有名,并且有非常多有用的插件和技术帮助WEB开发人员开发出有创意和漂亮的WEB页面. 今天我们为jQuery用户分享一些小技巧,这些技巧将帮助你提示你网站布局和应用的创意性和功能性. 一.在新窗口打开链接 用下面的代码,你点击链接即可在新窗口打开: //author http://www.lai18.com $(document).ready(f

[收藏]7个有用的jQuery代码片段分享

7个有用的jQuery代码片段分享 jQuery是一款轻量级的JavaScript库,是最流行的客户端HTML脚本之一,它在WEB设计师和开发者中非常的有名,并且有非常多有用的插件和技术帮助WEB开发人员开发出有创意和漂亮的WEB页面. 今天我们为jQuery用户分享一些小技巧,这些技巧将帮助你提示你网站布局和应用的创意性和功能性. 一.在新窗口打开链接 用下面的代码,你点击链接即可在新窗口打开: //author http://www.lai18.com $(document).ready(f

30+有用的CSS代码片段

在一篇文章中收集所有的CSS代码片段几乎是不可能的事情,但是我们这里列出了一些相对于其他的更有用的代码片段,不要被这些代码的长度所吓到,因为它们都很容易实现,并且具有良好的文档.除了那些解决常见的恼人的问题外,也包含了一些解决新问题的新技术. 1. 垂直对齐 如果你之前遇到过这个问题,你就应该知道它是多么的烦人,幸运的是,现在你可以使用CSS3变换来解决这个问题: .vc{ position: relative; top: 50%; -webkit-transform: translateY(-

【转】30+有用的CSS代码片段

来自:WEB资源网 链接:http://webres.wang/31-css-code-snippets-to-make-you-a-better-coder/ 原文:http://www.designyourway.net/blog/resources/31-css-code-snippets-to-make-you-a-better-coder/ 在一篇文章中收集所有的CSS代码片段几乎是不可能的事情,但是我们这里列出了一些相对于其他的更有用的代码片段,不要被这些代码的长度所吓到,因为它们都

【随笔记录】很有用的Jquery代码片段(转)

代码片段1: 在表单中禁用“回车键” 大家可能在表单的操作中需要防止用户意外的提交表单,那么下面这段代码肯定非常有帮助: 在线调试 在线演示 $("#form").keypress(function(e) { if (e.which == 13) { return false; }}); 代码片段2: 清除所有的表单数据 可能针对不同的表单形式,你需要调用不同类型的清楚方法,不过使用下面这个现成方法,绝对能让你省不少功夫. 在线调试 在线演示 function clearForm(fo

【转】46 个非常有用的 PHP 代码片段

1. 发送 SMS 在开发 Web 或者移动应用的时候,经常会遇到需要发送 SMS 给用户,或者因为登录原因,或者是为了发送信息.下面的 PHP 代码就实现了发送 SMS 的功能. 为了使用任何的语言发送 SMS,需要一个 SMS gateway.大部分的 SMS 会提供一个 API,这里是使用 MSG91 作为 SMS gateway. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29