php技巧小结【推荐】


Posted in PHP onJanuary 19, 2017

1 如何定义linux和window通用的文件分隔符号

DIRECTORY_SEPARATOR :

目录分隔符,是定义php的内置常量。在调试机器上,在windows我们习惯性的使用“\”作为文件分隔符,但是在linux上系统不认识这个标识,于是就要引入这个php内置常量了:DIRECTORY_SEPARATOR

这样可以不用判断是在linux还是window系统下

2 PHP压缩与解压缩类

PclZip是一个很强大的压缩与解压缩zip文件的PHP类,PclZip library能够压缩与解压缩Zip格式的压缩档(WinZip、PKZIP);且能对此类类档案进行处理,包括产生压缩档、列出压缩档的内容以及解压缩档案等等。同时也可以对现有的ZIP包进行添加或删除文件。

最近在压缩文件方面用到了它

生成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));
 }
?>

官方网站:http://www.phpconcept.net/pclzip/

3 一小段“劣质”的PHP代码优化的过程,请仔细体会优化过程

下面这一小段“劣质”的PHP代码是一道简化了的测试题。这种问题就像在问:你该怎样优化这段代码?

<?
echo("<p>Search results for query: " .
$_GET['query'] . ".</p>");
?>

这段代码的主要问题在于它把用户提交的数据直接显示到了网页上,从而产生XSS漏洞。其实有很多方法可以填补这个漏洞。那么,什么代码是我们想要的呢?

<?
echo("<p>Search results for query: " .
htmlspecialchars($_GET['query']) . ".</p>");
?>

这是最低要求。XSS漏洞用htmlspecialchars函数填补了,从而屏蔽了非法字符。

<?php 
if (isset($_GET['query'])) 
{ 
 echo '<p>Search results for query: ', 
 htmlspecialchars($_GET['query'], ENT_QUOTES), '.</p>'; 
} 
?>

接着优化:

<?php 
if (isset($_GET['query'])) 
{ 
 echo '<p>Search results for query: ', 
 htmlspecialchars($_GET['query'], ENT_QUOTES), '.</p>'; 
} 
?>
  • <?被替换成了<?php,这样更符合XML规范。
  • 在输出$_GET['query']的值之前先判断它是否为空。
  • echo命令中多余的括号被去掉了。
  • 字符串用单引号限定,从而节省了PHP从字符串中搜索可替换的变量的时间。
  • 用逗号代替句号,节省了echo的时间。
  • 将ENT_QUOTES标识传递给htmlspecialchars函数,从而保证单引号也会被转义。虽然这并是最主要的,但也算是一个良好习惯。

4 不用三方类库导出MySQL数据到Excel

如果你经常导出数据,那你可能会遇到用第三方类库导出上限,这是一个很无奈的事情,在超过两万条数据的时候,经常导出失败。很容易到达PHP内存使用上限

// 输出Excel文件头,可把user.csv换成你要的文件名 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="user.csv"'); 
header('Cache-Control: max-age=0'); 
// 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可 
$sql = 'select * from tbl where ……'; 
$stmt = $db->query($sql); 
// 打开PHP文件句柄,php://output 表示直接输出到浏览器 
$fp = fopen('php://output', 'a'); 
// 输出Excel列名信息 
$head = array('姓名', '性别', '年龄', 'Email', '电话', '……'); 
foreach ($head as $i => $v) { 
 // CSV的Excel支持GBK编码,一定要转换,否则乱码 
 $head[$i] = iconv('utf-8', 'gbk', $v); 
} 
// 将数据通过fputcsv写到文件句柄 
fputcsv($fp, $head); 
// 计数器 
$cnt = 0; 
// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小 
$limit = 100000; 
// 逐行取出数据,不浪费内存 
while ($row = $stmt->fetch(Zend_Db::FETCH_NUM)) { 
 $cnt ++; 
 if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题 
 ob_flush(); 
 flush(); 
 $cnt = 0; 
 } 
 foreach ($row as $i => $v) { 
 $row[$i] = iconv('utf-8', 'gbk', $v); 
 } 
 fputcsv($fp, $row); 
}

这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
PHP+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
php daodb插入、更新与删除数据
Mar 19 PHP
PHP字符串处理的10个简单方法
Jun 30 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
PHP+MySQL删除操作实例
Jan 21 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
php实现简单的上传进度条
Nov 17 PHP
AES加解密在php接口请求过程中的应用示例
Oct 26 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 #PHP
PHP对象实例化单例方法
Jan 19 #PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 #PHP
利用PHP获取网站访客的所在地位置
Jan 18 #PHP
PHP面向对象学习之parent::关键字
Jan 18 #PHP
php输出含有“#”字符串的方法
Jan 18 #PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
Jan 17 #PHP
You might like
第三节--定义一个类
2006/11/16 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
JavaScript实现区块链
2018/03/14 Javascript
对angularJs中ng-style动态改变样式的实例讲解
2018/09/30 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
学习python分支结构
2019/05/17 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
保安自我鉴定范文
2013/12/08 职场文书
英语自荐信常用语句
2013/12/13 职场文书
个性发展自我评价
2014/02/11 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
读书月活动方案
2014/05/22 职场文书
外联部演讲稿
2014/05/24 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
清明节寄语2015
2015/03/23 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书