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无限分类源码分享(思路不错)
Oct 13 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
10个php函数实用却不常见
Oct 13 PHP
php通过文件头判断格式的方法
May 28 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
php批量删除操作(数据访问)
May 23 PHP
Laravel 自定命令以及生成文件的例子
Oct 23 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
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
php简单中奖算法(实例)
2017/08/15 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
常用js脚本
2006/12/03 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
HTML5的新特性(1)
2016/03/03 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
商业企业管理专业求职信
2014/07/10 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
员工教育培训协议书
2014/09/27 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript