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>';
}
?>
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文件。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
评论列表:
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论