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面向对象的使用教程 简单数据库连接
Nov 25 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
php日历制作代码分享
Jan 20 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
分享一则PHP定义函数代码
Feb 26 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
php取出数组单个值的方法
Mar 12 PHP
php微信开发之关注事件
Jun 14 PHP
PDO::_construct讲解
Jan 27 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 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 和 MySQL 时区的一点总结
2008/03/26 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
php实现的生成排列算法示例
2019/07/25 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
会计电算化专业应届大学生求职信
2013/10/22 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
离婚案件原告代理词
2015/05/23 职场文书
小平您好观后感
2015/06/09 职场文书
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python