php技巧小结【推荐】

5年以前  |  阅读数:324 次  |  编程语言:PHP 

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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例