PHP Cookbook经典实例(第二版)

PHP Cookbook经典实例(第二版)

1
2
3
4
ucfirst()、ucwords()     首字母大写
fputcsv()、fgetcsv()
pack()、unpack()、str_pad()、str_split()          固定字符宽度
wordwrap()               文本自动换行
1
2
3
4
5
range()          生成范围
mt_rand()     更好的随机
money_format()    (only unix)
BCMath(EX: bcadd())、GMP(EX: gmp_add())、big_int(EX: bi_add)     任意精度
base_convert()          进制转换
1
2
localtime()     当地时间
checkdate()     验证日期是否有效
1
2
3
4
5
6
7
8
9
foreach迭代副本、each()迭代本身
settype($items, 'array')
array_splice() 减小数组     array_pad() 增大数组
in_array()      检查值
asort()     排序并保持索引关系
natsort()     自然算法排序(可识别img1、img10、img2之间的顺序为1,2,10
usort()     自定义排序
RecursiveArrayIterator
iterator_to_array
1
2
3
list($a,$b)=[$b,$a];     交换变量
shmop(EX: shmop_open())、SystemV(EX: shm_get_var()  共享内存在进程间共享数据(Semaphore(EX: sem_get())共享内存同步)
addslashes(serialize())、unserialize(stripslashes())     序列化时便于数据库查询
1
2
3
4
func_get_args、func_num_args     可变参数
list(, $b, ) = ex_function()          // 跳过某些值
call_user_func、call_user_func_array
create_function     // 内部使用eval,安全性不佳,不如匿名函数function() {}
1
2
3
4
5
6
__destruct()     //不能在解析器中引用另一个对象,因为PHP可能已经把那个对象删除了
class_implements     返回类的所有接口
ReflectionClass          返回类的相关信息
clone $obj     浅拷贝,可以用__clone()来定制深拷贝
__call          可以将方法访问转交给组合类
Reflection::export()     快速预览类信息
1
2
3
4
5
6
7
8
9
get_browser()          获取浏览器信息
htmlentities()、html_entity_decode()     html字符转换
file_get_contents('php://input')          直接访问POST请求主体而非PHP解析后放在$_POST中的数据
flush()、ob_start()、ob_end_flush()     刷新输出
getenv()、putenv()          环境变量
apache_note()          与apache内部进行通信
ctype_*               一系列数据验证方法
htmlentities($str, ENT_QUOTES, 'UTF-8')     防止跨站点脚本
md5(uniqid())          用token防止重复提交表单(hash('md5','string')是md5速度的两倍)
1
PDO::quote()     转义引号(prepare()和execute()会自动转义)

output_add_rewrite_var() 将值写入url

预防session劫持:只允许通过cookie传递SessionID,同时生成一个url传递的session token,当请求包含sessionID和session token时才可以访问session。(P373)

预防session重放攻击

1
2
3
4
5
6
ini_set('session.use_only_cookies', true)
session_start();
if(!isset($_SESSION['gen']) || $_SESSION['gen']<(time()-30)) {
     session_regenerate_id();     //只要用户的授权范围改变,如成功登录后
     $_SESSION['gen'] = time();
}
1
2
3
4
5
6
DOMDocument('1.0', 'UTF-8');
simplexml_load_*
XMLReader     大型XML无法一次性全部读入内存
XPath、DOMXPath     直达所需的节点
DOMDocument::schemaValidate、DOMDocument::relaxNGValidate     XML验证
iconv          字符集转换
1
2
Tidy                    库,可以修复html
strip_tags          删除html和php标签

setlocale()、strftime() 、money_format()

1
2
3
debug_backtrace()
init_get_all()、get_cfg_var、ini_restore()
auto_prepend_file     (在php.ini中)设置自动加载的文件,可用于设置DEBUG常量,密码等

preg_replace_callback()

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$php_errormsg     记录前一次错误信息(track_error需要为on)
fpassthru()               直接读出文件内容并输出
readfile()               直接读取一个文件并输出到缓冲
fgets()                    一次读取一行
stream_get_line()     从资源流里读取一行直到给定的定界符
parse_ini_file()          
print()是函数,有返回值;echo是语言结构,无返回值
escapeshellarg     把字符串转码为可以在 shell 命令里使用的参数
escapeshellcmd      shell 元字符转义
popen()、pclose()     打开通向程序的管道,然后用fputs写入数据或发送命令($php=popen('/usr/bin/nsupdate -k keyfile','w');fputs($ph,'update delete test.e.com A\n')
backtick(`符号)        会执行其中的程序并返回结果
popen('strace ls 2>&1','r')     将标准错误重定向到标准输出
popen('strace ls 2>&1 1>/dev/null','r')     只读取标准错误
flock()                    劝告式锁定(LOCK_EX排他锁,LOCK_SH共享锁;LOCK_NB锁定时不阻塞)
fopen('compress.zlib://lotsofdata.gz','r')     
fopen('compress.bzip2://lotsofdata.bz2','r')          compress流封装(编译php时要使用--withzlib和--withbz2)

DirectoryIterator() 遍历目录

1
2
3
4
opendir()、readdir()、closedir()          打开目录遍历文件
smlink()          创建符号连接
stat()、fstat()          给出文件信息(用clearstatcache()刷新缓存结果)
lstat()          给出符号链接本身的信息

1
2
3
4
5
chmod()、chgrp()          相当于linux命令
FilterIterator               抽象类,用accept()过滤Iterator(如DirectoryIterator)
glob()                    返回匹配的文件名数组(如/folder/**/*.txt)
Recursive***Iterator          带递归的Iterator
RecursiveIteratorIterator     将RecursiveIterator扁平化

1
php_sapi_name        返回描述 PHP 所使用的接口类型的小写字符串。if('cli'==php_sapi_name() ....)
1
2
3
`/bin/stty -echo`          //关闭回显
$password = readline();
`/bin/stty echo`