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 调试工具Debug Tools
Apr 30 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
PHP实现今天是星期几的几种写法
Sep 26 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
PHP微信支付实例解析
Jul 22 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
php修改数组键名的方法示例
Apr 15 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
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
React中的render何时执行过程
2018/04/13 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
Python编程实现正则删除命令功能
2017/08/30 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
耐克亚太地区:Nike APAC
2019/12/07 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
学校教研活动总结
2014/07/02 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
现实表现证明材料
2015/06/19 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
MySQL Server 层四个日志
2022/03/31 MySQL
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS