gpt4 book ai didi

php技巧小结【推荐】

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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文件 。

用法一:

?
1
2
3
4
5
6
7
8
<?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));
  }
?>

用法二:

?
1
2
3
4
5
6
7
8
9
10
<?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代码是一道简化了的测试题。这种问题就像在问:你该怎样优化这段代码?

?
1
2
3
4
<?
echo ( "<p>Search results for query: " .
$_GET [ 'query' ] . ".</p>" );
?>

这段代码的主要问题在于它把用户提交的数据直接显示到了网页上,从而产生XSS漏洞。其实有很多方法可以填补这个漏洞。那么,什么代码是我们想要的呢?

?
1
2
3
4
<?
echo ( "<p>Search results for query: " .
htmlspecialchars( $_GET [ 'query' ]) . ".</p>" );
?>

这是最低要求。XSS漏洞用htmlspecialchars函数填补了,从而屏蔽了非法字符.

?
1
2
3
4
5
6
7
<?php
if (isset( $_GET [ 'query' ]))
{
  echo '<p>Search results for query: ' ,
  htmlspecialchars( $_GET [ 'query' ], ENT_QUOTES), '.</p>' ;
}
?>

接着优化:

?
1
2
3
4
5
6
7
<?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内存使用上限 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 输出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文件.

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我! 。

原文链接:http://www.cnblogs.com/zhenghongxin/p/6283496.html 。

最后此篇关于php技巧小结【推荐】的文章就讲到这里了,如果你想了解更多关于php技巧小结【推荐】的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com