配置选项:
html_errors: 无意义的 HTML 标记符会使得出错信息很凌乱, 所以在外壳下阅读报错信息是十分困难的, 因此将该选项的默认值改为 FALSE
implicit_flush: 在命令行模式下, 所有来自 print 和 echo 的输出将被立即写到输出端, 而不作任何地缓冲操作, 如果您希望延缓或控制标准输出, 您仍然可以使用 output buffering 设置项
max_execution_time: 最大执行时间
register_argc_argv: 是否可以在脚本中使用 $argc, $argv 函数
gc: garbage collection 垃圾回收
PHP_SHLIB_SUFFIX 扩展后缀名
PHP_EOL 兼容换行符, 也可以使用chr(10)
stdClass 所有类的基类
$HTTP_RAW_POST_DATA 获取原生POST数据, 也可以用php://input
$http_response_header 当使用http包装器时, 此变量将会被 HTTP 响应头信息填充, 若要获取一个URL的请求头, 可以参考get_headers函数
get_headers($url) 获取一个 HTTP 请求所发送的所有标头
header_register_callback() 定义一个回调函数, 在header头被发送之前调用
headers_list() 获取已经发送或者即将发送的header头
header_remove() 在多次执行header()函数后, 可以用此函数执行撤销操作
headers_sent() 检查header头是否已经被发送
set_time_limit() 设置脚本最大运行时间, 也可通过配置max_execution_time实现
ignore_user_abort() 设置客户端断开连接时是否中断脚本的执行
exec($command[, $output[, $rtn]]) 把$command的每行输出写入$output数组, 并返回最后一行输出, 如果有$rtn, 则$rtn的结果为$command的返回结果
system($command[, $rtn]) 执行$command, 并输出其内容, 若有$rtn, 则把$command的返回结果赋值给$rtn
popen($command, $mode) 用文件指针方式处理输出
passthru($command[, $rtn]) 用来直接输出$command返回的二进制数据(比如图片)到浏览器, $command返回结果赋值给$rtn
shell_exec($command) 将$command的完整输出以字符串形式返回
base_convert($number, $fromCode, $toCode) 在任意进制之间转换
bin2hex, hex2bin, hexdec, bindec, decbin, dechex, decoct, octdec 进制转换
bc[add|comp|mod|mul|pow|sqrt|sub] 高精度计算
tmpfile() 创建一个临时文件, 并返回文件句柄
chdir($dir) 更改当前目录
getcwd() 获取所在目录
link() 创建一个硬连接
linkinfo() 查看一个link所指向的链接的信息, 可以用来查看存不存在
symlink() 建立符号链接
readlink() 返回符号连接指向的目标
umask() 更改当前系统的umask(本次请求操作后自动恢复, 只是相当于起了一个新的shell, shell消失, 变量释放)
contant($name) 获取一个define定义的常量的值
chgrp($filename, $grp) 更改文件所属组
chmod($filename, $model) 类似BASH的chmod
chown($filename, $user) 类似BASH的chown
rmdir() 删除文件夹
checkdate($month, $day, $year) 验证日期的合法性
chunk_split($str, $length, $insert) 函数把字符串分割为一连串更小的部分 可以在之间添加$insert
class_interfaces($class) 查看对象或类名(字符串)所实现的所有Interface
class_parents($class) 查看对象或雷敏(字符串)的父类
create_function() 动态创建匿名函数
compact()
extract()
openlog(string $ident , int $option , int $facility) 打开操作系统的日志记录的连接
syslog(int $priority , string $message) 记录到操作系统日志
define_syslog_variables() 清空操作系统日志
defined() 是否被定义
closelog() 关闭操作系统日志连接
count_chars($str) 返回字符串所用字符的统计信息
create_function(string $args, string $code) lambda方式创建函数
filter_var() 使用特定过滤器过滤一个变量,可用来校验,比如 filter_val('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED);
reset() 重置数组指针
rewind() 重置文件指针
rewinddir() 重置文件夹指针
connection_status() 显示客户端(可以认为是浏览器)的连接状态(可以参考: http://blog.51yip.com/php/995.html)
connection_aborted() 查看客户端连接是否被中断
connection_timeout() 查看客户端连接是否超时
clearstatcache() 清除文件状态缓存,
libxml_use_internal_errors($user_errors) 当解析XML出现错误时, 是否启用用户错误处理, 默认为False
libxml_get_errors() 获取XML解析错误原因
parse_ini_file() 解析一个配置文件到数组
parse_ini_string() 解析一个配置字符串到数组
debug_backtrace() 获取回溯追踪信息
debug_print_backtrace() 直接打印回溯字符串
debug_zval_dump() 返回var_dump的字符串
disk_free_space() 获取一个目录的可用空间
disk_total_space() 返回一个目录的磁盘总大小
dl() 运行时动态载入一个PHP扩展
extension_loaded() 检查一个扩展是否已经被加载
get_loaded_extends() 获取所有编译并加载的模块名
checkdnsrr() 给指定的主机(域名)或者IP地址做DNS通信检查
dns_get_record($hostname) 获取指定主机的DNS记录
gethostbyadd() 根据IP地址获取主机名
gethostbyname() 根据主机名获取IP地址
gethostbynamel() 根据主机名获取IP地址
gethostname() 获取本机名
ip2long() 把IP地址转换为long类型数值
long2ip() 把long类型数值转为IP地址
inet_pton() 把点分十进制IP地址转为二进制整数
inet_ntop() 把二进制证书转为点分十进制IP
easter_date() 得到指定年份的复活节午夜时的Unix时间戳
easter_days() 得到指定年份的3月21日到复活节之间的天数
//思想: error 在报错级别比较高或者禁止报错的情况下, 如果遇到warning和notice则跳过, 其余则停止执行程序, 可交给set_error_handler中的函数来处理
error_get_last() 获取最后发生的错误, 比如在ini_set('display_errors', 'Off')的情况下, 可以获取最后一次发生的错误
error_reporting(0|-1...E_ALL...) 等同于ini_set('error_reporting', E_ALL...);
error_log() 把错误信息写到某个指定文件
trigger_error() 手动触发error
escapeshellarg() 对SHELL命令字符串进行编码, 防止SHELL注入
escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义
printf()
vprintf()
sprintf()
vsprintf() 可以认为数组形式的sprintf, 原来都是用call_user_func_array('sprintf', array()), 本函数可以直接搞定
fflush($handle) 类似C语言的fflush
flush() 刷新输出缓冲, flush() 函数不会对服务器或客户端浏览器的缓存模式产生影响, 因此, 必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲
注:
个别web服务器程序, 特别是Win32下的web服务器程序, 在发送结果到浏览器之前, 仍然会缓存脚本的输出, 直到程序结束为止
有些Apache的模块, 比如mod_gzip, 可能自己进行输出缓存, 这将导致flush()函数产生的结果不会立即被发送到客户端浏览器
甚至浏览器也会在显示之前, 缓存接收到的内容例如 Netscape 浏览器会在接受到换行或 html 标记的开头之前缓存内容, 并且在接受到 </table> 标记之前, 不会显示出整个表格
一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面, 所以必须发送一些额外的空格来让这些浏览器显示页面内容
feof() 测试文件指针是否到了文件末尾
fgetc($handle) 从文件指针中读取一个字符
fgets($handle, $lengtn = 0) 从文件中读取一行
fgetss($handle, $lenght = 0, $allowabletags = '') 与fgets基本相同, 但是会过滤掉HTML和PHP标记
fgetcsv($handle, $length = 0, $delimiter = ',') 从csv文件中读取一行(或指定长度), 并解析到数组
fputs() 向文件写入字符串, fwrite的别名
fscanf() 从文件中格式化输入
fprintf() 将格式化后的数据写入到流
vfprintf() 向由 handle 指定的流资源句柄中写入根据 format 格式化后的字符串, 接收一个数组参数, 而不是一系列可变数量的参数
fputcsv() 将数组格式化为csv格式写入到文件
fpassthru() 输出文件指针处后的所有剩余数据
fsockopen() 打开一个网络连接或者一个Unix套接字连接, 默认情况下将以阻塞模式开启套接字连接, 当然你可以通过stream_set_blocking()将它转换到非阻塞模式, 参考stream_socket_client()函数
ftell() 获取文件指针所在位置
fseek() 定位文件指针
rewind() 重置文件指针
ftruncate() 截取文件到指定长度(修改了源文件)
fstat() 通过文件指针获取文件信息, 返回类似stat()函数
长连接持续输出演示:
<?php
set_time_limit(0); //保证PHP程序超时不退出, 与客户端保持连接
while (True) {
echo '填写内容字节数>=4096的首次输出<br />';
ob_flush();
flush();
sleep(1);
}
1.先ob_flush(), 再执行flush(), 如果Web服务器的操作系统是windows系统, 那顺序颠倒或者不使用ob_flush()也不会出现问题, 但是在Linux系统上就无法刷新输出缓冲
2.一些Web服务器的output_buffering默认是4069字符或者更大, 即输出内容必须达到4069字符服务器才会flush刷新输出缓冲, 为了确保flush有效, 最好在ob_flush()函数前有以下语句(测试中只要第一次输出达到4096字节就可以), 以确保到达output_buffering值
echo str_repeat(" ", 4096);
插播几条长连接解决方案(得自:http://blog.jobbole.com/98902/)
0.上面说的情况
1.Ajax轮询
优点
实现简单。
缺点
这是通过模拟服务器发起的通信,不是实时通信,不顾及应用的状态改变而盲目检查更新,导致服务器资源的浪费,且会加重网络负载,拖累服务器。
2、3、4为Comet:基于 HTTP 长连接的“服务器推”技术(参考:http://www.ibm.com/developerworks/cn/web/wa-lo-comet/)
2.HTTP 和JSONP方式的长轮询 建立一个script标签向服务器端发送请求, 在服务器端使用set_time_limit(0), While循环等待, 有事件时把内容发送回浏览器; 然后继续打开一个新的script标签获取下一个事件...
3.XHR长轮询 客户端打开一个到服务器端的 AJAX 请求然后等待响应;服务器端需要一些特定的功能来允许请求被挂起,只要一有事件发生,服务器端就会在挂起的请求中送回响应并关闭该请求。客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接;如此循环。现在浏览器已经支持CROS的跨域方式请求,因此HTTP和JSONP的长轮询方式是慢慢被淘汰的一种技术,建议采用XHR长轮询。
长轮询优点
客户端很容易实现良好的错误处理系统和超时管理,实现成本与Ajax轮询的方式类似。
长轮询缺点
需要服务器端有特殊的功能来临时挂起连接。当客户端发起的连接较多时,服务器端会长期保持多个连接,具有一定的风险。
4.iframe 是很早就存在的一种 HTML 标记, 通过在 HTML 页面里嵌入一个隐蔵帧,然后将这个隐蔵帧的 SRC 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。
优点:
这种方式每次数据传送不会关闭连接,连接只会在通信出现错误时,或是连接重建时关闭(一些防火墙常被设置为丢弃过长的连接, 服务器端可以设置一个超时时间, 超时后通知客户端重新建立连接,并关闭原来的连接)。
缺点
IE、Morzilla Firefox 下端的进度栏都会显示加载没有完成,而且 IE 上方的图标会不停的转动,表示加载正在进行。
Google 的天才们使用一个称为“htmlfile”的 ActiveX 解决了在 IE 中的加载显示问题,并将这种方法用到了
gmail+gtalk 产品中。Alex Russell 在 “What else is burried down in the depth’s
of Google’s amazing JavaScript?”文章中介绍了这种方法。Zeitoun 网站提供的
comet-iframe.tar.gz,封装了一个基于 iframe 和 htmlfile 的 JavaScript comet 对象,支持
IE、Mozilla Firefox 浏览器,可以作为参考。
我们常用的网页版的gtalk就是这种实现方式,Google的开发人员使使用一个称为“htmlfile”的 ActiveX 解决了在 IE 中的加载显示问题。
5.comet实现框架CometD、Atmosphere、Pushlet
6.websocket
总结下来长轮询不是一个很好的方案,而且对于服务器而言是有风险的;另外支持WebSocket协议的浏览器都比较新,特比是IE需要10以上的版本;而我们的业务是面向于商家端,商家的浏览器版本相对较低,很多对WebSocket都不支持;相对而言Comet的方式比较适合,也有相应的实现框架,实现成本最低
fileatime, filectime, filemtime
fileowner, filegroup
touch() 设定文件的修改和访问时间
fileperms() 获取文件权限
filetype() 获取文件类型 dir, file, link 等
stat() 获取文件的基本信息(如上面几种信息(atime, ctime等)都会包含在返回结果中)
lsstat() 与stat相同, 但是在文件名是符号链接时是不同的, stat会列出原文件的信息, lsstat会列出符号链接的信息
clearstatcache() 其中stat和lsstat等函数会缓存文件的基本信息, 以便快速访问, 可以使用此函数清除缓存信息
realpath() 返回绝对路径名
glob() 查看所有匹配的文件名
scandir() 列出指定路径中的文件和目录, 不必在opendir, readdir, closedir了
register_shutdown_function() 注册PHP退出时执行的函数
gc_collect_cycles() 强制执行垃圾回收
gc_disabled() 停用垃圾回收
gc_enable() 开启垃圾回收
gc_enabled() 获取垃圾回收开启状态
getmyuid() 获取PHP所有者的UID
getmygid() 获取PHP所有者的GID
getmypid() 获取本进程的ID
getmyinode() 获取当前脚本的索引节点
defined(__CLASS__ . '::CONSTNAME') 可以如此适用于类
constant() 获取已定义的常量,适用于defind、类中const
$class::constants($prefix); 获取类中以 $prefix 为前缀的常量
get_current_user() 获取运行PHP用户的用户名
get_browser() 获取浏览器相关信息列表
get_cfg_var() 获取PHP配置信息 类似 ini_get()
get_defined_constants() 获取所有已定义的常量名
get_defined_vars() 获取所有已定义的变量名
get_defined_functions() 获取所有已定义的函数名
get_declared_classes() 获取所有已定义的类名
get_declared_interfaces() 获取所有已定义的接口名
get_class_vars() 获取类的所有属性及默认值
get_object_vars() 获取一个对象的所有属性和值
get_class_methods() 获取类或对象的所有方法
get_extension_funcs() 获取某个扩展模块的所有方法
get_parent_class() 获取一个类或对象的父类名
is_subclass_of() 判断一个对象是否是一个类的子类的实例
instanceof 判断一个对象是否是一个类或者其子类的实例
property_exists() 检查对象是否具有某个属性
get_include_path() 获取include path自动包含路径
get_include_files() 获取所有被require和include的文件名, 同名get_require_files()
get_meta_tags($filename) 获取一个html文件的所有meta标签
get_html_translation_table() 获取htmlspecialchars()和htmlentities函数使用的转换码对应表
get_headers() 获取一个URL的响应头信息
get_resource_type() 获取一个资源类型变量的类型, mysql link, file, domxml document等
getdate() 获取详细时间列表, 在分别获取多个date值的时候可以使用
getenv() 获取一个环境变量的值
putenv() 设置一个环境变量的值
getprotobyname() 获取协议number
getprotobynumber() 获取协议名
getservbyname($service, $protocol) 通过协议名获取端口号
getservbyport($port, $protocol) 通过端口号获取协议名
getrandmax() 获取rand函数的最大随机数
getopt() 从命令行参数中获取选项(比如与 ls -a -l -h 等类似) 值得一看
getrusage() 获取资源使用情况, 比如swaps等使用情况
memory_get_usage() 获取PHP内存使用情况
gettype() 不可靠, 返回结果可能会被修改, 建议使用is_xxx系列
settype() 设置变量类型
highlight_file() 打印或者返回高亮后的PHP代码文件
highlight_string() 打印或者返回高亮后的PHP代码字符串
html_entity_decode() 反转由htmlentities格式化的数据
htmlspecialchars_decode() 反转由htmlspecialchars格式化的数据
http_build_query() 用数组生成urlencode之后的字符串
parse_str() 解析query string到数组 parse_str(http_build_query(array('name' => 'John', 'sex' => 'F')), $output);var_dump($output);
image_type_to_extension() 获取图像类型的文件后缀(已知道文件类型, 只是获取对应后缀)
image_type_to_mime_type() 取得图像类型的 MIME 类型(已知道文件类型, 只是获取对应 MIME 类型) image_type_to_mime_type(IMAGETYPE_PNG);
获取图片MIME类型
getimagesize($imgFile); 获取文件大小及MIME类型等信息
exif_imagetype($imgurl);通过exif扩展获取图片MIME类型等信息
iptcembed($iptc, $imageFile) 将二进制 IPTC(作者, 版权, 字幕, 细节描述等元数据) 数据嵌入到一幅 JPEG 图像中
iptcparse($iptc) 配合getimagesize获取到图像的IPTC数据, 然后使用此函数分解
init_get_all([$extension, [$detail = True]]); 获取某项(比如session等)或者所有配置信息
ini_restore($settingName); 恢复指定的配置选项到它的原始值
is_a 类似 instanceof 判断是否是本类或者其父类的实例, 可以参考is_subclass_of
is_nan 刚知道PHP中也有此类判断, Not A Number
is_numeric 判断是否为数字或者数字字符串
is_scalar 判断变量是否是一个标量
is_soap_fault($result) 判断一个soap请求是否错误
is_subclass_of() 判断一个对象是否是一个类的子类的实例
json_last_error() 获取最后一次json_encode或者json_decode的错误码
json_last_err_msg 获取最后一次json_encode或者json_decode的错误描述
lcfirst() 与ucfirst相反, 使一个字符串的第一个字母小写
mb_convert_encoding() 转换字符的编码
mb_convert_variables() 转换多个变量的字符编码
mb_detect_encoding() 检测一个字符的编码
max(array $arr) 此函数可以使用以下两种类型
max(mixed $a, mixed $b)
md5_file() 获取文件的MD5校验值
sha1() 对字符串进行sha1加密
sha1_file() 获取文件的sha1加密后的值
Memcache::setCompressThreshold(memcache_set_compress_threshold) 开启较大值自动压缩, 没必要对所有值都进行压缩(比如add('name', 'John', MEMCACHE_COMPRESSED)), 小值压缩后可能更大
Memcached 一个比 Memcache 更新的类
memory_get_peak_usage() 返回分配给PHP的内存的峰值
memory_get_usage() 返回分配给PHP的内存量
mt_srand() 给随机数播种, 自 PHP 4.2.0 起, 不再需要用 srand() 或 mt_srand() 给随机数发生器播种, 因为现在是由系统自动完成的
mt_rand() 比rand函数生成更好的随机数
mt_getrandmax() 获取mt_rand() 所能返回的最大的随机数
function randomFloat($min = 0, $max = 1) {
return $min + mt_rand() / mt_getrandmax() * ($max - $min);
}
money_format() 返回格式化后的金钱数额
number_format() 返回格式化后的数值
输出缓冲是可堆叠的, 这即意谓着, 当有一个 ob_start() 是活跃的时, 你可以调用另一个 ob_start() , 只要确保又正确调用了 ob_end_flush() 恰当的次数即可, 如果有多重输出回调函数是活跃的, 输出内容会一直按嵌套的顺序依次通过它们而被过滤
ob_start([$output_callback]) 打开输出缓冲区, 如果指定了第一个参数, 当缓冲区内容被输出的时候, 将调用 $output = $output_callback($content), 并返回$output, 如果$output === False, 则会将内容原封不动的输出
ob_get_status() 得到所有输出缓冲区的状态
ob_list_handlers() 列出所有使用中的输出处理程序
以下为可用的输出缓冲处理程序
ob_gzhandler()
ob_iconv_handler() 需要用iconv_set_encoding()设置iconv的internal_encoding和output_encoding
ob_tidyhandler() 可以对内容加上HTML BODY等标签
三种方式对输出的内容进行压缩, 以减少网络传输流量
1、在php.ini中设置output_handler = ob_gzhandler
2、在.htaccess中加入php_value output_handler ob_gzhandler
3、在php文件头加上ob_start('ob_gzhandler');
rawurlencode() 与urlencode不同的是不会把空格转为'+'
rawurldecode() 解码
setrawcookie() 与setcookie不同的是在发送到浏览器之前不会对内容进行urlencode编码
levenshtein() 获取两个字符串间的编辑距离(复杂度是 O(m * n), m和n分别是两个字符串的长度)
similar_text() 获取两个字符串间的相似度(复杂度是 O(N**3))
sort, rsort, ksort, krsort, natsort, natcasesort, uksort, usort
array_splice($data, $index, 0, array($item)) 在数组某个位置插入元素
array_fill_keys($keys, $value) 把键名组成的索引数组, 转为键名和$value数组
array_search($search, $searched) 在数组中搜索某个元素
array_change_key_case() 更改数组键名大小
array_column() 返回多维数组中某一列组成的数组
array_combine() 将两个数组结合, 一个坐位键名, 一个坐位键值
array_reduce() 用回调函数迭代的将数组简化为单一的值
array_chunk() 数组按长度切割
array_pad() 将数组补充到指定长度
array_replace_recursive(),可以替代自己实现递归合并(array_merge_recursive)
range() 快速生成数组
str_split() 字符串按长度切割
str_pad() 将字符串补充到指定长度
str_repeat() 重复一个字符串n次
strtr() 挨个转换字符或者str_replace($str, arrayFrom, arrayTo)
strcmp, strncmp, strnatcmp
strcasecmp, strncacecmp, strnatcasecmp
str_getcsv() 解析 CSV 字符串为一个数组
str_ireplace() 忽略字符串大小的字符串体会
str_pad() 使用另一个字符串填充字符串为指定长度
str_shuffle() 打乱一个字符串
strspn($subject, $mask[, $start[, $length]]); 不论字符顺序,返回字符串$subject中,从$start处开始符合$mask中字符的子字符串长度。如果开始处的第一个字符不符合,那么返回的结果就是0!
strcspn(string $str1 , string $str2 [, int $start [, int $length ]]); 不论字符顺序,返回字符串$str1中,从$start处开始,不符合$str2中字符的子字符串长度。如果开始处的第一个字符就符合,那么返回的结果就是0!
strpbrk($str, $char_list) 以$char_list中最早出现的一个字符为分割, 并且返回字母及以后的字符串
strtok($str, $token) 第一次以$token分割字符串,以后每次调用strtok($token)来获取子串
substr_compare() 截取两个字符串的某一段进行比较, 比strncmp功能更强大一些
substr_count() 统计一个字符串在另一个字符串中出现的次数
substr_replace() 比str_replace多了偏移量和长度选项
time_sleep_until($timestamp) 使脚本睡眠到指定的时间戳为止
usleep() 以微秒数延迟执行
//参数ticks表示运行多少语句(OPCODE)调用一次 register_tick_function 的函数, 即在 declare 代码段中解释器每执行 tick 条低级语句就会发生的事件(细节查看:http://blog.****.net/fwkjdaghappy1/article/details/7457687 或者 http://www.phppan.com/2013/02/php-ticks/)
function aaa() {echo 'aaaa';}
register_tick_function('aaa');
declare(ticks = n) {
...
}
pack函数用于将其它进制的数字压缩到位字符串之中, 也就是把其它进制数字转化为ASCII码字符串
JsonSerializable 当一个类实现JsonSerializable接口后, 可以增加jsonSerialize方法, 指定本类在json_encode的时候传入的数据
SPL SPL是Standard PHP Library(PHP标准库)的缩写,需要好好学习!
spl_autoload_call() 尝试调用所有已注册的__autoload()函数来装载请求类
spl_autoload_functions() 获取所有已注册的__autoload()函数
spl_autoload_register() 注册给定的函数作为__autoload()的实现
spl_autoload_unregister() 注销已注册的__autoload()函数
spl_classes() 返回所有的可用的SPL类
spl_object_hash() 返回一个对象的hash id, 每个对象都是唯一的, 即使此对象以后被修改
hash 可以指定哈希算法,但无需指定密钥
hash_hmac 利用指定哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要输出
手册中按字母顺序排列出所有扩展:alphabetical
AMQP扩展
Apache扩展
BZIP2扩展 处理.bz2压缩文件
ZLib扩展 处理压缩
Ctype扩展
DOM扩展
Exif扩展 获取图像信息, 比如根据图像第一个字节, 并检查其签名, 获取图像类型(mime)的函数 exif_imagetype()
GD、ImageMagick 图像扩展
Mcrypt扩展,可以参考Yii的CSecurityManager类
Opcode Descriptions and Examples了解Opcode操作
PDO扩展 深入了解下