找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1745|回复: 0
打印 上一主题 下一主题

php技巧小结【推荐】

[复制链接]

2560

主题

2560

帖子

7622

积分

论坛元老

Rank: 8Rank: 8

积分
7622
跳转到指定楼层
楼主
发表于 2018-2-14 05:28:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            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文件
用法一:
create('file.txt,data/text.txt,folder');
if ($v_list == 0) {
die("Error : ".$archive->errorInfo(true));
}
?>
用法二:
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代码是一道简化了的测试题。这种问题就像在问:你该怎样优化这段代码?
Search results for query: " .
$_GET['query'] . ".
");
?>
这段代码的主要问题在于它把用户提交的数据直接显示到了网页上,从而产生XSS漏洞。其实有很多方法可以填补这个漏洞。那么,什么代码是我们想要的呢?
Search results for query: " .
htmlspecialchars($_GET['query']) . ".
");
?>
这是最低要求。XSS漏洞用htmlspecialchars函数填补了,从而屏蔽了非法字符。
Search results for query: ',
htmlspecialchars($_GET['query'], ENT_QUOTES), '.
';
}
?>
接着优化:
Search results for query: ',
htmlspecialchars($_GET['query'], ENT_QUOTES), '.
';
}
?>

  

  •   
  • 在输出$_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 YII框架开发小技巧之模型(models)中rules自定义验证规则
  • 分享五个PHP7性能优化提升技巧
  • 搭建Vim为自定义的PHP开发工具的一些技巧
  • PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
  • 高质量PHP代码的50个实用技巧必备(上)
  • PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
  • 10个对初学者非常有用的PHP技巧
  • 24条货真价实的PHP代码优化技巧
  • PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
  • PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端