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使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
记录一次排查PHP脚本执行卡住的问题
Dec 27 PHP
php中的抽象方法和抽象类
Feb 14 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
php递归函数怎么用才有效
Feb 24 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
PHPTree――php快速生成无限级分类
Mar 30 PHP
PHP简单实现解析xml为数组的方法
May 02 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
May 05 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 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 file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
PHP写的求多项式导数的函数代码
2012/07/04 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
linux下安装easy_install的方法
2013/02/10 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
Win8下python3.5.1安装教程
2020/07/29 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
html5简介及新增功能介绍
2020/05/18 HTML / CSS
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
光盘行动倡议书
2014/02/02 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
考试没考好检讨书
2015/05/06 职场文书
sql注入教程之类型以及提交注入
2021/08/02 MySQL