php中PclZip插件文件解压与压缩文件
生成zip文件
用法一:
代码如下 | 复制代码 |
< ?php include_once('pclzip.lib.php'); $archive = new PclZip('archive.zip'); $v_list = $archive->create('file.txt,data/text.txt,folder'); if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); } ?> |
用法二:
代码如下 | 复制代码 |
< ?php include_once('pclzip.lib.php'); $archive = new PclZip('archive.zip'); $v_list = $archive->create('data/file.txt,data/text.txt', PCLZIP_OPT_REMOVE_PATH, 'data', PCLZIP_OPT_ADD_PATH, 'install'); if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); } ?> |
看见create方法的参数没有,再看看方法原型你就知道如何了。至少我还没有这样用过
代码如下 | 复制代码 |
$urls = parse_url($db_bbsurl); $domain = $urls['host']; include_once (R_P .'require/admvclient.php'); $adm_oem= new Cnzz_Adm_Oem(); //判断config文件是否存在用户密码 pwCache::getData(D_P . "data/bbscache/adm_config.php");//用户名密码 配置文件 if (isset($adm_user) && isset($adm_pwd)) { $request = array("adm_user"=>$adm_user,"adm_pwd"=>$adm_pwd,'cms'=>'pw'); $token = $adm_oem->get_appkey_once($request); if ($token<0){ if($token==-1){ adminmsg('传递参数为空或传递参数非数字'); }else if($token==-2){ adminmsg('传递参数password错误'); } }else{ $apikey = $token['adm_key']; } }else{ $Key = md5($domain.'KclGiq7H'); $request = array('cms'=>'pw','domain'=>$domain,'key'=>$Key); $token = $adm_oem->reg_user_once($request); if ($token<0){//异常 if($token==-1){ adminmsg('key有误'); } else if($token==-2){ adminmsg('域名长度有误(1~64)'); } elseif($token==-3){ adminmsg('域名输入有误(比如输入汉字)'); } elseif($token==-4){ adminmsg('域名插入数据库有误'); } elseif($token==-5){ adminmsg('IP用户调用页面超过阀值,阀值暂定为10'); } } elseif (is_array($token) && isset($token)){ $adm_user = $token['adm_user']; $adm_pwd = $token['adm_pwd']; $apikey = $token['adm_key']; pwCache::setData(D_P.'data/bbscache/adm_config.php',"<?phprn$adm_user=".$adm_user.";rn$adm_pwd=".$adm_pwd."rn?>"); } } |
截取GB2312中文字符串
代码如下 | 复制代码 |
< ?php //截取中文字符串 function mysubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for($i = 0; $i < $strlen; $i++) { if(ord(substr($str, $i, 1)) > 0xa0) { $tmpstr .= substr($str, $i, 2); $i++; } else $tmpstr .= substr($str, $i, 1); } return $tmpstr; } ?> |
2. 截取utf8编码的多字节字符串
代码如下 | 复制代码 |
< ?php //截取utf8字符串 function utf8Substr($str, $from, $len) { return preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}'. '((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s', '$1',$str); } ?> |
3. UTF-8、GB2312都支持的汉字截取函数 < ?php
/*
Utf-8、gb2312都支持的汉字截取函数
cut_str(字符串, 截取长度, 开始长度, 编码);
编码默认为 utf-8
开始长度默认为 0
*/
代码如下 | 复制代码 |
function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') { if($code == 'UTF-8') { $pa = "/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/"; preg_match_all($pa, $string, $t_string);
if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; return join('', array_slice($t_string[0], $start, $sublen)); } else { $start = $start*2; $sublen = $sublen*2; $strlen = strlen($string); $tmpstr = '';
for($i=0; $i< $strlen; $i++) { if($i>=$start && $i< ($start+$sublen)) { if(ord(substr($string, $i, 1))>129) { $tmpstr.= substr($string, $i, 2); } else { $tmpstr.= substr($string, $i, 1); } } if(ord(substr($string, $i, 1))>129) $i++; } if(strlen($tmpstr)< $strlen ) $tmpstr.= "..."; return $tmpstr; } }
$str = "abcd需要截取的字符串"; echo cut_str($str, 8, 0, 'gb2312'); ?> |
4. BugFree 的字符截取函数 < ?php
代码如下 | 复制代码 |
/** * @package BugFree * @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $ * * * Return part of a string(Enhance the function substr()) * * @author Chunsheng Wang <wwccss@263.net> * @param string $String the string to cut. * @param int $Length the length of returned string. * @param booble $Append whether append "...": false|true * @return string the cutted string. */ function sysSubStr($String,$Length,$Append = false) { if (strlen($String) < = $Length ) { return $String; } else { $I = 0; while ($I < $Length) { $StringTMP = substr($String,$I,1); if ( ord($StringTMP) >=224 ) { $StringTMP = substr($String,$I,3); $I = $I + 3; } elseif( ord($StringTMP) >=192 ) { $StringTMP = substr($String,$I,2); $I = $I + 2; } else { $I = $I + 1; } $StringLast[] = $StringTMP; } $StringLast = implode("",$StringLast); if($Append) { $StringLast .= "..."; } return $StringLast; } }
$String = "111cn.net-- 简单、精彩、通用"; $Length = "18"; $Append = false; echo sysSubStr($String,$Length,$Append); ?> |
代码如下 | 复制代码 |
//-----------------------------------------------------------------------------------
// 作 用:上传文件的扩展名判断 // 参 数:$C_filename 上传的文件名 // $A_extend 要求的扩展名 // 返回值:布尔值 // 备 注:无 //-----------------------------------------------------------------------------------
function CheckExtendName($C_filename,$A_extend) { if(strlen(trim($C_filename)) < 5) { return 0; //返回0表示没上传图片 } $lastdot = strrpos($C_filename, "."); //取出.最后出现的位置 $extended = substr($C_filename, $lastdot+1); //取出扩展名
for($i=0;$i{ if (trim(strtolower($extended)) == trim(strtolower($A_extend[$i]))) //转换大 小写并检测 { $flag=1; //加成功标志 $i=count($A_extend); //检测到了便停止检测 } }
if($flag<>1) { for($j=0;$j{ $alarm .= $A_extend[$j]." "; } AlertExit('只能上传'.$alarm.'文件!而你上传的是'.$extended.'类型的文件'); return -1; //返回-1表示上传图片的类型不符 }
return 1; //返回1表示图片的类型符合要求 }
//-----------------------------------------------------------------------------------
// 函数名:CheckImageSize($ImageFileName,$LimitSize) // 作 用:检验上传图片的大小 // 参 数:$ImageFileName 上传的图片名 // $LimitSize 要求的尺寸 // 返回值:布尔值 // 备 注:无 //-----------------------------------------------------------------------------------
function CheckImageSize($ImageFileName,$LimitSize) { $size=GetImageSize($ImageFileName); if ($size[0]>$LimitSize[0] ││ $size[1]>$LimitSize[1]) { AlertExit('图片尺寸过大'); return false; } return true; }
//-----------------------------------------------------------------------------------
// 函数名:Alert($C_alert,$I_goback=0) // 作 用:非法操作警告 // 参 数:$C_alert(提示的错误信息) // $I_goback(返回到那一页) // 返回值:字符串 // 备 注:无 //-----------------------------------------------------------------------------------
function Alert($C_alert,$I_goback=0) { if($I_goback<>0) { echo " "; } else { echo " "; } } ?> |
目录
一,什么是PEAR与Benchmark类
二,为什么要分析PHP读写Cookie情况
三,性能测试代码
四,性能测试结果
五,性能测试总结
六,setcookie函数说明
七,附性能测试源代码下载
参考资料
一,什么是PEAR与Benchmark类
请参考PHP性能优化系列
第二期 PHP性能优化工具篇Benchmark类调试执行时间
第一期 PHP性能优化准备篇图解PEAR安装
二,为什么要分析PHP读写Cookie情况
1,什么是Cookie?
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。
2,PHP与Cookie
PHP通过内置函数setcookie()写cookie,通过$_COOKIE全局变量读cookie,在实际开发中,读写Cookie是与用户交互最主要的方式之一,并且使用也非常频繁,因些需要了解PHP在读写操作Cookie的性能与效率问题。
三,性能测试代码
编写三个函数,分别为写cookie、读cookie和读写cookie,代码如下:
代码如下 | 复制代码 |
<?php require_once "Benchmark/Iterate.php"; $bench = new Benchmark_Iterate; function set(){ setcookie("TestCookie", time(), time()+3600, "/", "", 1); } function get(){ return isset($_COOKIE['TestCookie']) ? $_COOKIE['TestCookie'] : ''; } function cookie(){ get(); set(); } $bench->run(50,"set"); //$bench->run(50,"get"); //$bench->run(50,"cookie"); $result = $bench->get(); ?> |
使用Benchmark_Iterate类工具分别调用各个函数50次获取PHP读写Cookie的平均执行时间并生成图表。
四,性能测试结果
1,PHP写Cookie的执行时间
图解:使用PHP内置函数setcookie()向客户端发送一个 HTTP cookie,写Cookie的执行时间 0.00072s左右 注s表示秒
2,PHP读Cookie的执行时间
图解:使用全局变量$_COOKIE获取客户端cookie值,读Cookie的执行时间 0.00051s左右
3,PHP读写Cookie的执行时间
先读取cookie值,然后再向客户端发送一个 HTTP cookie,读写Cookie的执行时间 0.00088s左右
五,性能测试总结
通过折线图可以清楚看到,setcookie() 函数向客户端发送一个 HTTP cookie需要的执行时间大约是0.00072s左右,也就是0.7毫秒,PHP读取Cookie的执行时间为0.00051s左右,也就是0.5毫秒,如果同时读写操作Cookie需要的执行时间为0.00088s,也就是0.8毫秒左右,这些操作在秒的时代基本上执行的时间非常短,但请不要小看这个值,正常的PHP内置函数执行的时间大约在0.3毫秒左右,相对而言读写Cookie的执行时间是比较耗时的,因此,在实际开发中要尽量少用这样的函数,充分考虑读写Cookie的情况,特别是写cookie的情况!
毫秒世界还在继续,请关注下一期PHP性能优化系列。
六,setcookie函数说明
setcookie() 函数向客户端发送一个 HTTP cookie。
代码如下 | 复制代码 |
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] ) |
1,cookie 是由服务器发送到浏览器的变量。
2,cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。
3,cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。
4,必须在任何其他输出发送前对 cookie 进行赋值。
5,如果成功,则该函数返回 true,否则返回 false。
相关文章
- 这篇文章主要介绍了Go语言压缩和解压缩tar.gz文件的方法,实例分析了使用Go语言压缩文件与解压文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-03
jQuery Mobile开发中日期插件Mobiscroll使用说明
这篇文章主要介绍了jQuery Mobile开发中日期插件Mobiscroll使用说明,需要的朋友可以参考下...2016-03-03vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
这篇文章主要介绍了vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下...2021-02-20- 在页面开发中,经常遇到需要用户输入日期的操作。通常的做法是,提供一个文本框(text),让用户输入,然后,编写代码验证输入的数据,检测其是否是日期类型。这样比较麻烦,同时,用户输入日期的操作也不是很方便,影响用户体验。如果使...2015-10-30
- 一个简单的jQuery分页插件,兼容AMD规范和requireJS./** * jQuery分页插件 * */;(function (factory) { if (typeof define === "function" && define.amd) { // AMD模式 define([ "jquery" ], factory); } els...2015-11-08
- 这篇文章主要为大家分享了Bootstrap教程JS插件滚动监听学习笔记,内容很详细,感兴趣的小伙伴们可以参考一下...2016-05-20
- 通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能效果图:先到官网(http://plugins.jquery.com/cookie/)下载cookie插件,放到相应文件夹,代码如下:复制代码 代码如下: <!DOCTYPE ht...2015-03-15
- 这篇文章主要给大家介绍了关于vue中jsonp插件的使用方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-10
- 这篇文章主要介绍了jquery自定义插件开发之window的实现过程的相关资料,需要的朋友可以参考下...2016-05-09
- 这篇文章主要介绍了vue中使用swiper 插件出错问题及解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-22
jquery pagination分页插件使用详解(后台struts2)
这篇文章主要为大家详细介绍了jquery pagination 分页插件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...2017-01-26- Query架构的开发人员能够创建一个插件代码来扩展其功能,从而能够产生一些最好的插件,让你的网站或任何给定的项目达到一个全新的水平。 ...2016-04-27
- 这篇文章主要为大家详细介绍了jquery插表单件form使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-23
解决jquery插件:TypeError:$.browser is undefined报错的方法
首先先说一说$.browser browser就是用来获取浏览器基本信息的。 jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需...2015-11-24- 利用php实现将文件批量压缩打包下载,这个过程中将使用到 ZipArchive 这个类,注意使用该类之前,linux需开启zlib,windows需取消php_zip.dll前的注释。下面直接给出一个简单的将文件压缩为 zip 格式的示例。具体用法请查询p...2015-10-30
- ZeroClipboard 是国外大神开发的一个用于剪贴板复制的 JS 插件,它是基于 Flash 来实现跨浏览器的复制功能的。当我们使用 ZeroClipboard 的时候,它会悄悄隐藏一个小小的 Flash 影片(swf),不会对我们的用户界面造成影响。我们只需要借助它实现复制功能就行了。...2016-03-30
IntelliJ IDEA 刷题利器 LeetCode 插件详解
这篇文章主要介绍了IntelliJ IDEA 刷题利器 LeetCode 插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-21- 这篇文章主要为大家详细介绍了原生JS封装Ajax插件,为大家介绍不同域之间互相请求资源的跨域...2016-05-05
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
这篇文章主要介绍了JS基于ocanvas插件实现的简单画板效果,结合实例形式分析了ocanvas插件实现画板的相关技巧,并附代码demo源码供读者下载参考,需要的朋友可以参考下...2016-04-06- WordPress插件的加载顺序其实对于很多朋友来讲都没有必要如何来操作了,但有时安装插件太多了我们需要设置一顺序了那么要如何来安装呢,下面来看看. 默认的情况下,Word...2016-11-25