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查询搜索引擎排名位置的代码
Jan 05 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
php Smarty 字符比较代码
Feb 27 PHP
php修改时间格式的代码
May 29 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
php简单获取复选框值的方法
May 11 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
php使用pecl方式安装扩展操作示例
Aug 12 PHP
PHP实现递归的三种方法
Jul 04 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
十天学会php之第四天
2006/10/09 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
Intellij IDEA搭建vue-cli项目的方法步骤
2018/10/20 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
Python的条件语句与运算符优先级详解
2015/10/13 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
python在不同条件下的输入与输出
2020/02/13 Python
appium+python adb常用命令分享
2020/03/06 Python
python语言是免费还是收费的?
2020/06/15 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
英国门把手公司:Door Handle Company
2019/05/12 全球购物
2014年教师节演讲稿范文
2014/09/10 职场文书
银行授权委托书格式
2014/10/10 职场文书
银行催款通知书
2015/04/17 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫