超赞的PHP学习笔记汇总(有2000行代码之多)-第二篇

分类:PHP_Python| 发布:佚名| 查看:301 | 发表时间:2014/11/28

上一篇地址:http://camnpr.com/php-python/1800.html

本文汇总了PHP学习中常见的各类问题,约有两千多行代码,都是非常实用的技巧。分享给大家供大家参考。具体如下:

0001/* 【Cookie】 */
0002cookie是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
0003cookie是HTTP标头的一部分,因此setcookie()函数必须在其它信息被输出到浏览器前调用,这和对header()函数的限制类似。可以使用输出缓冲函数来延迟脚本的输出,直到按需要设置好了所有的cookie或者其它HTTP标头。
0004 
0005// 新增
0006setcookie  新增一条cookie信息
0007setcookie($name [,$value [,$expire [,$path [,$domain [,$secure [,$httponly]]]]]])
0008#注意:setcookie()函数前不能有输出!除非开启ob缓存!
0009# 参数说明
0010$name  - cookie的识别名称
0011  使用$_COOKIE['name']抵用名为name的cookie
0012$value  - cookie值,可以为数值或字符串,此值保存在客户端,不要用来保存敏感数据
0013  假定$name参数的值为'name',则$_COOKIE['name']就可取得该$value
0014$expire  - cookie的生存期限(Unix时间戳,秒数)
0015  如果$expire参数的值为time()+60*60*24*7则可设定cookie在一周后失效。如果未设定该参数,则会话后立即失效。
0016$path  - cookie在服务器端的指定路径。当设定该值时,服务器中只有指定路径下的网页或程序可以存取该cookie。
0017  如果该参数值为'/',则cookie在整个domain内有效。
0018  如果设为'/foo/',则cookie就在domain下的/foo/目录及其子目录内有效。
0019  默认值为设定cookie的当前目录及其子目录。
0020$domain  - 指定此cookie所属服务器的网址名称,预设是建立此cookie服务器的网址。
0021  要是cookie能在如abc.com域名下的所有子域都有效,则该参赛应设为'.abc.com'
0022$secure  - 指明cookie是否仅通过安全的HTTPS连接传送中的cookie的安全识别常数,如果设定该值则代表只有在某种情况下才能在客户端与服务端之间传递。
0023  当设成true时,cookie仅在安全的连接中被设置。默认值为false。
0024 
0025// 读取
0026- 浏览器请求时会携带当前域名下的所有cookie信息到服务器。
0027- 任何从客户端发送的cookie都会被自动存入$_COOKIE全局数组。
0028- 如果希望对一个cookie变量设置多个值,则需在cookie的名称后加[]符号。即以数组形态保存多条数据到同一变量。
0029  //设置为$_COOKIE['user']['name'],注意user[name]的name没有引号
0030  setcookie('user[name]', 'shocker');
0031- $_COOKIE也可以为索引数组
0032 
0033// 删除
0034方法1:将其值设置为空字符串
0035  setcookie('user[name]', '');
0036方法2:将目标cookie设为“已过期”状态。
0037  //将cookie的生存时间设置为过期,则生存期限与浏览器一样,当浏览器关闭时就会被删除。
0038  setcookie('usr[name]', '', time()-1);
0039 
0040# 注意:
00411. cookie只能保存字符串数据
00422. $_COOKIE只用于接收cookie数据,不用于设置或管理cookie数据。
0043  $_COOKIE进行操作不会影响cookie数据。
0044  $_COOKIE只会保存浏览器在请求时所携带的cookie数据。
00453. cookie生命周期:
0046  临时cookie:浏览器关闭时被删除
0047  持久cookie:$expire参数为时间戳,表示失效时间。
00484. 有效目录
0049  cookie只在指定的目录有效。默认是当前目录及其子目录。
0050  子目录的cookie在其父目录或同级目录不可获取。
00515. cookie区分域名
0052  默认是当前域名及其子域名有效。
00536. js中通过document.cookie获得,类型为字符串
00547. 浏览器对COOKIE总数没有限制,但对每个域名的COOKIE数量和每个COOKIE的大小有限,而且不同浏览器的限制不同。
0055 
0056/* 【session】 */
00571. 开启session机制
0058  session_start()
0059  注意:session_start()函数前不能有输出!除非开启ob缓存。
00602. 操作数据
0061  $_SESSION数组进行操作
00623. 浏览器端保存SessionID,默认为当前域名下的所有目录及其子目录生效。即默认设置cookie的path值为'/'
00634. 服务器保存session数据
0064  默认保存方式:每个会话都会生成一个session数据文件,文件名为:sess_加SessionID
00655. session可以存储除了资源以外的任何类型数据。
0066  数据被序列化后再保存到文件中。
00676. $_SESSION的元素下标不能为整型!
0068  因为只对元素值进行序列化。
0069  元素内的数组下标无此要求。
00707. 生存周期
0071  默认是浏览器关闭
0072 因为浏览器保存的cookie变量SessionID是临时的
0073   但是服务器端的session数据文件不一定消失(需要等待session的垃圾回收机制来处理)
0074  可以延长cookie中PHPSESSID变量的生命周期。(不推荐)
0075  php.ini配置session.gc_maxlifetime
00768. 删除数据
0077  $_SESSION变量在脚本结束时依然会消失。开启session机制时会造出$_SESSION变量。
0078  $_SESSION与保存session数据的文件是两个空间。
0079  unset($_SESSION['key'])只是删除数组内的该元素,不会立即相应到保存session数据的文件上。
0080   等到脚本结束,才会将$_SESSION的数据写入到该文件中。
0081  session_destroy()  销毁保存session数据的文件,也不会对该文件写入内容。
0082    并不删除$_SESSION变量,unset或脚本结束才会删除该变量。
0083  如何完全删除一个session?需删除3部分
0084  unset($_SESSION); 
0085   删除$_SESSION变量后,数据文件并未被改动。如果单独使用unset,则需先置空$_SESSION = array()
0086 session_destroy();
0087  setcookie('PHPSESSID', '', time()-1); //保险做法是将其生命周期失效
0088  整个脚本周期内,只对数据文件读一次、写一次。
0089 
0090// 重写session的存储机制
0091# session存储方式
0092session.save_handler = user|files|memcache
0093# 因数据文件过多导致的问题,可通过分子目录保存进行解决
0094PHP配置文件下session.save_path选项,并需手动创建数据存放目录。
0095在该配置选项前加层级。分布子目录的原则,利用会话ID的相应字母来分配子目录。仍需手动创建子目录。
0096session.save_path = "2; F:/PHPJob/Temp"
0097# 多服务器数据共享问题
0098# 数据存储操作:
0099  初始化$open、释放资源$close、读$read、写$write、销毁存储介质$destroy(调用session_destroy时触发该操作)、垃圾回收$gc
0100# 会话ID的长度可变。不同的设置方式导致不同长度的会话ID。
0101session.hash_function  允许用户指定生成会话ID的散列算法。
0102  '0' 表示MD5(128 位),'1' 表示SHA-1(160 位)。
0103session.hash_bits_per_character  允许用户定义将二进制散列数据转换为可读的格式时每个字符存放多少个比特。
0104  可能值为 '4'(0-9,a-f),'5'(0-9,a-v),以及 '6'(0-9,a-z,A-Z,"-"",")。
0105  总hash长度为128bit,会话ID长度为128/可能值,4->32, 5->26, 6->22
0106# 自定义数据存储操作方法
0107# 注意:不用关心PHP如何序列化、反序列化、如何得到数据和写入数据,只做与数据存储相关的操作
0108session_set_save_handler  设置用户自定义的会话数据存储函数
0109  bool session_set_save_handler(callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc)
0110执行顺序:open, close, read, write, destroy, gc
0111# 先设置处理器,再开启会话
0112 
0113# 常用函数
0114session_start    开启或恢复会话机制
0115session_id      获取或设置当前会话ID
0116session_destroy    销毁当前会话的所有数据(销毁数据文件)
0117session_name    获取或设置当前会话名称(cookie变量名,默认为PHPSESSID)
0118session_save_path  获取或设置当前会话数据文件保存路径
0119session_set_save_handler  设置用户自定义的会话数据存储函数
0120session_unset    释放所有会话变量(清空$_SESSION数组元素)
0121session_encode    将当前会话数据编码为一个字符串
0122session_decode    将字符串解译为会话数据
0123session_write_close  写入会话数据并关闭会话
0124session_register_shutdown  关闭会话
0125session_set_cookie_params  设置会话cookie变量,必须在session_start()前使用。
0126  session_set_cookie_params(0,"/webapp/"); //设置session生存时间
0127session_get_cookie_params  获取会话cookie变量。返回包含当前会话cookie信息的数组
0128 
0129# 配置php.ini
0130ini_set($varname, $newvalue);
0131  //该函数的配置只对当前脚本生效
0132  //并非所有php.ini设置均可用该函数设置
0133ini_get($varname//获取某配置项信息
0134ini_get_all([str $extension])  //返回所有配置项信息的数组
0135 
0136# session扩展配置
0137session.name  指定会话名以用作cookie的名字。只能由字母数字组成,默认为PHPSESSID。
0138session.save_path  定义了传递给存储处理器的参数。
0139  如果选择了默认的files文件处理器,则此值是创建文件的路径。默认为/tmp。
0140  可选的N参数来决定会话文件分布的目录深度。
0141  要使用N参数,必须在使用前先创建好这些目录。在ext/session目录下有个小的shell脚本名叫mod_files.sh可以用来做这件事。
0142  如果使用了N参数并且N大于0,那么将不会执行自动垃圾回收。
0143session.save_handler  定义了来存储和获取与会话关联的数据的处理器的名字。默认为files。
0144  如果用户自定义存储器,则该值改为user。
0145  ini_set('session.save_handler', 'user');//此设置只针对当前脚本生效。
0146session.auto_start 指定会话模块是否在请求开始时自动启动一个会话。默认为 0(不启动)。
0147session.gc_probability与session.gc_divisor合起来定义了在每个会话初始化时启动gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动gc进程。session.gc_divisor默认为100。session.gc_probability默认为1。
0148 
0149 
0150/* 【图片生成与处理】 */GD库
0151// 画布生成
0152# 新建画布
0153imagecreate       新建一个基于调色板的图像
0154  resource imagecreate(int $x_size, int $y_size)
0155imagecreatetruecolor  新建一个真彩色图像
0156# 基于已有文件或URL创建画布
0157imagecreatefromgd2   从GD2文件或URL新建一图像
0158imagecreatefromgd2part 从给定的GD2文件或URL中的部分新建一图像
0159imagecreatefromgd    从GD文件或URL新建一图像
0160imagecreatefromgif   由文件或URL创建一个新图象
0161imagecreatefromjpeg   由文件或URL创建一个新图象
0162imagecreatefrompng   由文件或URL创建一个新图象
0163imagecreatefromstring  从字符串中的图像流新建一图像
0164imagecreatefromwbmp   由文件或URL创建一个新图象
0165imagecreatefromxbm   由文件或URL创建一个新图象
0166imagecreatefromxpm   由文件或URL创建一个新图象
0167// 颜色分配
0168imagecolorallocate     为一幅图像分配颜色
0169  int imagecolorallocate(resource $image, int $red, int $green, int $blue)
0170imagecolorallocatealpha   为一幅图像分配颜色 + alpha
0171imagecolordeallocate    取消图像颜色的分配
0172imagecolortransparent    将某个颜色定义为透明色
0173imagecolorat      取得某像素的颜色索引值
0174imagecolorclosest    取得与指定的颜色最接近的颜色的索引值
0175imagecolorclosestalpha 取得与指定的颜色加透明度最接近的颜色
0176imagecolorclosesthwb  取得与给定颜色最接近的色度的黑白色的索引
0177imagecolorexact     取得指定颜色的索引值
0178imagecolorexactalpha  取得指定的颜色加透明度的索引值
0179imagecolormatch     使一个图像中调色板版本的颜色与真彩色版本更能匹配
0180imagecolorresolve    取得指定颜色的索引值或有可能得到的最接近的替代值
0181imagecolorresolvealpha 取得指定颜色 + alpha 的索引值或有可能得到的最接近的替代值
0182imagecolorset      给指定调色板索引设定颜色
0183imagecolorsforindex   取得某索引的颜色
0184imagecolorstotal    取得一幅图像的调色板中颜色的数目
0185// 区域填充
0186imagefill  区域填充
0187  bool imagefill(resource $image, int $x, int $y, int $color)
0188imagefilledarc     画一椭圆弧且填充
0189imagefilledellipse   画一椭圆并填充
0190imagefilledpolygon   画一多边形并填充
0191imagefilledrectangle  画一矩形并填充
0192imagefilltoborder    区域填充到指定颜色的边界为止
0193imagesettile  设定用于填充的贴图
0194// 图形创建
0195imagearc    画椭圆弧
0196imagechar    水平地画一个字符
0197imagecharup   垂直地画一个字符
0198imagedashedline 画一虚线
0199imageellipse  画一个椭圆
0200imageline    画一条线段
0201imagepolygon  画一个多边形
0202imagerectangle 画一个矩形
0203imagesetpixel  画一个单一像素
0204imagesx     取得图像宽度
0205imagesy     取得图像高度
0206// 画笔设置
0207imagesetbrush  设定画线用的画笔图像
0208imagesetstyle  设定画线的风格
0209imagesetthickness  设定画线的宽度
0210// 图形拷贝
0211imagecopy      拷贝图像的一部分
0212imagecopymerge   拷贝并合并图像的一部分
0213imagecopymergegray 用灰度拷贝并合并图像的一部分
0214imagecopyresampled 重采样拷贝部分图像并调整大小
0215imagecopyresized  拷贝部分图像并调整大小
0216// 字符创建
0217imagestring     水平地画一行字符串
0218imagestringup    垂直地画一行字符串
0219imagepsslantfont  倾斜某字体
0220imagefontheight   取得字体高度
0221imagefontwidth   取得字体宽度
0222imagettfbbox    取得使用 TrueType 字体的文本的范围
0223imageloadfont    载入一新字体
0224imagepsencodefont  改变字体中的字符编码矢量
0225imagepsextendfont  扩充或精简字体
0226// 导出画布为图片
0227imagegif  以GIF格式将图像输出到浏览器或文件
0228imagepng  以PNG格式将图像输出到浏览器或文件
0229imagejpeg  以JPEG格式将图像输出到浏览器或文件
0230imagewbmp  以WBMP格式将图像输出到浏览器或文件
0231通过header()发送 "Content-type: image/图片格式" 可以使PHP脚本直接输出图像。
0232  header("Content-type: image/gif"); imagegif($im);
0233imagegd   将 GD 图像输出到浏览器或文件
0234imagegd2  将 GD2 图像输出到浏览器或文件
0235// 释放画布资源
0236imagedestroy  销毁图像
0237// 图像信息
0238image_type_to_extension   取得图像类型的文件后缀
0239getimagesize        取得图像大小
0240imagesx
0241取得图像宽度
0242imagesy
0243取得图像高度
0244imageistruecolor      检查图像是否为真彩色图像
0245imagetypes         返回当前 PHP 版本所支持的图像类型
0246// 图像设置
0247imagerotate     用给定角度旋转图像
0248imagealphablending 设定图像的混色模式
0249imageantialias   是否使用抗锯齿(antialias)功能
0250imagefilter     对图像使用过滤器
0251imagegammacorrect  对 GD 图像应用 gamma 修正
0252imageinterlace   激活或禁止隔行扫描
0253 
0254/* 【缩略图】【水印】 */
0255imagecopyresampled 重采样拷贝部分图像并调整大小
0256  bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
0257imagecopymerge   拷贝并合并图像的一部分
0258  bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
0259getimagesize    取得图像大小
0260  array getimagesize ( string $filename [, array &$imageinfo ] )
0261 
0262/* 【URL函数】 */
0263get_headers — 取得服务器响应一个 HTTP 请求所发送的所有标头
0264get_meta_tags — 从一个文件中提取所有的 meta 标签 content 属性,返回一个数组
0265http_build_query — 生成 URL-encode 之后的请求字符串
0266urldecode — 解码已编码的URL字符串
0267urlencode — 编码URL字符串
0268parse_url — 解析URL,返回其组成部分
0270  scheme(如http), host, port, user, pass, path, query(在问号?之后), fragment(在散列符号#之后)
0271 
0272 
0273//编码可用于交换多个变量
0274$a = '中国';
0275$b = '四川';
0276$a = urlencode($a);
0277$b = urlencode($b);
0278$a = $a.'&'.$b;
0279$b = explode('&', $a);
0280$a = urldecode($b[1]);
0281$b = urldecode($b[0]);
0282echo $a, $b;
0283//list()函数用于交换变量
0284list($a, $b) = array($b, $a);
0285 
0286 
0287/* 【文件、目录】 */
0288dirname($path) 返回路径中的目录部分
0289basename($path [,$suffix]) 返回路径中的文件名部分
0290pathinfo($path [,$options]) 返回文件路径的信息(数组元素:dirname,basename,extension)
0291realpath($path) 返回规范化的绝对路径名
0292 
0293copy($source, $dest)  拷贝文件
0294unlink($file)  删除文件
0295rename($old, $new) 重命名或移动一个文件或目录
0296mkdir($path [,$mode [,$recursive]]) 新建目录
0297  $mode表示权限,默认0777
0298  $recursive表示可创建多级目录,默认false
0299rmdir($dir)   删除目录(目录必须为空,且具有权限)
0300 
0301file_exists($file) 检查文件或目录是否存在
0302is_file($file)   判断文件是否存在且为正常的文件
0303is_dir($file)    判断文件名是否存在且为目录
0304is_readable($file) 判断文件或目录是否可读
0305is_writable($file) 判断文件或目录是否可写
0306is_executable($file)  判断给定文件名是否可执行
0307is_link($file)   判断给定文件名是否为一个符号连接
0308 
0309tmpfile(void)  建立一个临时文件
0310tempnam($dir, $prefix) 在指定目录中建立一个具有唯一文件名的文件
0311 
0312file($file) 把整个文件读入一个数组中
0313fopen($filename, $mode [,$use_include_path])
0314  $mode参数:(加入'b'标记解决移植性)
0315   'r'   只读方式打开,将文件指针指向文件头。
0316    'r+'  读写方式打开,将文件指针指向文件头。
0317    'w'   写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
0318 'w+'  读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
0319 'a'   写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
0320 'a+'  读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
0321 'x'   创建并以写入方式打开,将文件指针指向文件头。
0322    'x+'  创建并以读写方式打开,将文件指针指向文件头。
0323fclose($handle) 关闭一个已打开的文件指针
0324fread($handle, $length) 读取文件(可安全用于二进制文件)
0325fwrite($handle, $string [,$length]) 写入文件(可安全用于二进制文件)
0326rewind($handle) 倒回文件指针的位置
0327ftell($handle) 返回文件指针读/写的位置
0328fseek($handle, $offset [,$whence]) 在文件指针中定位
0329feof($handle)  测试文件指针是否到了文件结束的位置
0330fgets  从文件指针中读取一行
0331fgetss 从文件指针中读取一行并过滤掉HTML标记
0332flock($handle, $opt) 轻便的咨询文件锁定
0333  $opt:LOCK_SH 取得共享锁定(读取的程序);LOCK_EX 取得独占锁定(写入的程序);LOCK_UN 释放锁定(无论共享或独占)
0334 
0335 
0336readfile($file) 读入一个文件并写入到输出缓冲
0337fflush($handle) 将缓冲内容输出到文件
0338 
0339touch($file [,$time [,$atime]])  设定文件的访问和修改时间
0340fileatime  取得文件的上次访问时间
0341filectime  取得文件的inode修改时间
0342filegroup  取得文件的组
0343fileinode  取得文件的inode
0344filemtime  取得文件修改时间
0345fileowner  取得文件的所有者
0346fileperms  取得文件的权限
0347filesize  取得文件大小
0348filetype  取得文件类型
0349 
0350 
0351/* fileinfo */ 获取/设置文件信息
0352#扩展Fileinfo,配置php.ini
0353#extension=php_fileinfo.dll
0354finfo_open([$opt]) //创建一个文件信息资源
0355finfo_file($finfo, $file [,$opt]) //获取文件信息
0356finfo_set_flags($finfo, $opt) //设置文件信息项
0357finfo_close($finfo) //关闭文件信息资源
0358 
0359mime_content_type($file) //获取文件的MIME类型
0360 
0361$opt参数选项:
0362FILEINFO_MIME_ENCODING 文件编码类型
0363FILEINFO_MIME_TYPE 文件MIME类型
0364 
0365 
0366//目录
0367chdir($dir)     改变当前目录
0368chroot($dir)    将当前目录改变为当前进程的根目录
0369closedir($handle)  关闭目录句柄
0370dir($dir)      返回一个目录的实例对象
0371getcwd()      取得当前工作目录
0372opendir($path)   打开目录句柄
0373readdir($handle)  从目录句柄中读取条目
0374rewinddir($handle) 倒回目录句柄
0375scandir($dir [,$order])   列出指定路径中的文件和目录
0376glob($pattern [,$flags])  寻找与模式匹配的文件路径
0377  $flags
0378   GLOB_MARK - 在每个返回的项目中加一个斜线
0379 GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
0380   GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
0381  GLOB_NOESCAPE - 反斜线不转义元字符
0382  GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a''b' 'c'
0383  GLOB_ONLYDIR - 仅返回与模式匹配的目录项
0384  查找多种后缀名文件:glob('*.{php,txt}', GLOB_BRACE);
0385 
0386 
0387/* 解压缩 */
0388//新建ZipArchive对象
0389$zip = new ZipArchive;
0390//打开ZIP文件
0391$zip->open($file [,$flags]);
0392  $flags
0393    ZIPARCHIVE::OVERWRITE 覆盖(不存在会自动创建)
0394  ZIPARCHIVE::CREATE 添加(不存在会自动创建)
0395 ZIPARCHIVE::EXCL
0396    ZIPARCHIVE::CHECKCONS
0397//关闭正在处理的ZIP文件
0398//解压缩ZIP文件
0399$zip->extractTo($dest, [$entries]);
0400  $dest:解压到的文件夹,$entries:解压的条目
0401//添加文件到ZIP文件
0402$zip->addFile($file, [$newname]); 
0403  $newname可以为"dir/file",这样可以将文件添加到压缩文件中的某个目录下。其他函数也如此。
0404//添加文件到ZIP文件,而内容来自字符串
0405$zip->addFromString($file, $str);
0406//添加空文件夹到ZIP文件
0407$zip->addEmptyDir($dir);
0408//通过索引删除ZIP中的文件或文件夹
0409$zip->deleteIndex($index);
0410//通过名称删除ZIP中的文件或文件夹
0411$zip->deleteName($name);
0412//设置ZIP文件注释
0413$zip->setArchiveComment($str);
0414//获取ZIP文件注释
0415$zip->getArchiveComment();
0416//通过索引获取文件内容
0417$zip->getFromIndex($index);
0418//通过名称获取文件内容
0419$zip->getFromName($name);
0420//获取索引文件的文件名称
0421$zip->getNameIndex($index);
0422//通过索引重命名文件
0423$zip->renameIndex($index, $newname);
0424//通过名称重命名文件
0425$zip->renameName($name, $newname);
0426 
0427//若将文件夹内容打包成ZIP文件,需循环文件夹的所有目录及文件
0428function addFileToZip($path, $zip) {
0429  //打开当前文件夹$path
0430  $handle = opendir($path);
0431  //循环读取子文件夹及文件
0432  //为防止文件名本身可被转换为false的情况(比如为"0"),则需用不全等!==
0433  while ($file = readdir($handle) !== false) {
0434 //过滤假文件夹
0435    if ($file != '.' && $file != '..') {
0436      //对于子文件夹则递归调用本函数
0437    if (is_dir($path . '/' . $file)) {
0438        addFileToZip($path.'/'.$file, $zip);
0439      } else {
0440      //将文件添加到ZIP对象
0441       $zip->addFile($path . '/' . $file);
0442    }
0443 }
0444  }
0445  //关闭文件夹$path
0446  closedir($path);
0447}
0448// ----- END 解压缩 ----- //
0449 
0450 
0451/* 【文件上传】 */
0452enctype="multipart/form-data"  //FORM标签必须的属性
0453$_FILES 上传文件信息数组变量
0454error  上传错误信息
0455 无错误
0456 文件大小超过php.ini配置
0457   1) upload_max_filesize 允许上传的最大文件大小
0458  2) post_max_size 最大的POST数据大小
0459    3) memory_limit 每个脚本能够使用的最大内存数量(默认128MB)
0460 文件大小超过浏览器表单配置
0461  MAX_FILE_SIZE  表示表单数据最大文件大小,该元素需在文件上传域之前。(默认2M)
0462 <input type="hidden" name="MAX_FILE_SIZE" value="102400">
0463 文件只有部分被上传
0464 文件没有被上传
0465  6,7 临时文件写入时失败
0466 找不到临时文件
0467 文件写入失败
0468name  文件名
0469type  文件类型
0470tmp_name  上传文件临时路径
0471size  文件大小
0472move_uploaded_file($path, $newpath);  //将上传的文件移动到新位置
0473is_uploaded_file($file) //判断是否为POST上传的文件
0474//多文件上传
0475<input type="file" name="updfile[]" /> //HTML中以数组提交
0476$_FILES['updfile']['tmp_name'][0]  //服务器端可访问第一个文件的临时路径,其他属性类似
0477 
0478 
0479//php.ini配置
0480file_uploads = On 是否允许HTTP上传文件
0481upload_max_filesize 上传文件大小限制,默认为2M
0482post_max_size  post方式表单数据总大小限制,默认为8M
0483upload_tmp_dir 上传文件临时目录,默认是系统临时目录
0484  需设置上传文件临时目录,给其最小权限
0485GET方式的最大传输量为2K
0486 
0487 
0488/* 【批量提交】 */
0489FORM表单中的name值可用名称加中括号的形式,在$_POST获取表单数据时,可多项提交形成数组。
0490比如多文件上传file,复选框提交checkbox等。
0491<input type="checkbox" name="id[]" value="值1" />
0492<input type="checkbox" name="id[]" value="值2" />
0493$id = $_POST['id']; //则可获得全部被选中的复选框值,形成索引数组
0494如果name值为:
0495<input type="checkbox" name="id[one]" value="值1" />
0496<input type="checkbox" name="id[two]" value="值2" />
0497$id = $_POST['id']; //则可获取所有name为id[...]的值,形成管理数组
0498 
0499 
0500/* iconv */
0501//php.ini配置iconv
0502[iconv]
0503;iconv.input_encoding = ISO-8859-1
0504;iconv.output_encoding = ISO-8859-1
0505;iconv.internal_encoding = ISO-8859-1
0506iconv_set_encoding($type, $charset);
0507  $type:input_encoding,output_encoding,internal_encoding
0508iconv_get_encoding([$type = "all"])
0509  $type:all,input_encoding,output_encoding,internal_encoding
0510 
0511 
0512 
0513iconv($in_charset, $out_charset, $str) //将字符串转换为目标编码
0514 
0515指定编码,可解决中文字符的统计、查询、截取等!
0516iconv_strlen($str [,$charset]) //统计字符串的字符数
0517iconv_strpos($str, $needle, $offset [,$charset]) //查找子串首次出现的位置
0518iconv_strrpos($str, $needle [,$charset]) //查找子串最后一次出现的位置
0519iconv_substr($str, $offset [,$len [,$charset]]) //截取子串
0520 
0521 
0522/* 【字符串函数】*/
0523addslashes($str//使用反斜线转移字符串
0524stripcslashes($str) //反引用一个使用addcslashes转义的字符串
0525stripslashes($str) //反引用一个引用字符串
0526chr($ascii) //返回ASCII码的字符
0527ord($char) //返回字符的ASCII码
0528substr_count($haystack, $needle//计算子串出现的次数
0529count_chars($str [,$mode]) 统计每个字节值出现的次数
0530  //0 - 以所有的每个字节值作为键名,出现次数作为值的数组。
0531  //1 - 与0相同,但只列出出现次数大于零的字节值。
0532  //2 - 与0相同,但只列出出现次数等于零的字节值。
0533  //3 - 返回由所有使用了的字节值组成的字符串。
0534  //4 - 返回由所有未使用的字节值组成的字符串。
0535crypt($str, [$salt])  //单向字符串散列
0536str_split($str [,$len]) //将字符串按长度分割为数组
0537explode($separ, $str//使用一个字符串分割另一个字符串
0538implode([$glue,] $arr) //将数组元素的值根据$glue连接成字符串
0539chunk_split($str [,$len [,$end]])  //将字符串分割成小块
0540  $len:每段字符串的长度,$end:每段字符串末尾加的字符串(如"\r\n")
0541html_entity_decode($str [,$flags [,$encoding]]) //将HTML实体转成字符信息
0542htmlentities($str [,$flags [,$encoding]])  //将字符信息转成HTML实体
0543htmlspecialchars_decode($str//将特殊HTML实体转成字符信息
0544htmlspecialchars($str [,$flags [,$encoding]])  //将字符信息转成特殊HTML实体
0545lcfirst($str//将字符串首字母转成小写
0546ucfirst($str//将字符串首字母转成大写
0547ucwords($str//将字符串中每个单词的首字母转换为大写
0548strtolower($str//将字符串转化为小写
0549strtoupper($str//将字符串转化为大写
0550trim($str [,$charlist]) //去除字符串首尾处的空白字符(或者其他字符)
0551ltrim($str [,$charlist])  //去除字符串首段的空白字符(或者其他字符)
0552rtrim($str [,$charlist])  //去除字符串末端的空白字符(或者其他字符)
0553md5_file($file) //计算指定文件的MD5散列值
0554md5($str//计算字符串的MD5散列值
0555money_format($format, $num) //将数字格式化为货币形式
0556number_format($num) //格式化数字
0557nl2br($str) //在字符串所有新行之前插入HTML换行标记
0558 
0559parse_str($str, [$arr]) //解析字符串
0560print($str) //输出字符串
0561printf   //输出格式化字符串
0562sprintf($format [,$args...])  //格式化字符串
0563sha1_file  //计算文件的sha1散列值
0564sha1    //计算字符串的sha1散列值
0565similar_text($first, $second [,$percent])  //计算两个字符串的相似度
0566  返回在两个字符串中匹配字符的数目,$percent存储相似度百分比
0567str_replace($search, $replace, $str [,$count [,$type]]) //子字符串替换
0568str_ireplace  //字符串替换(忽略大小写)
0569str_pad($str, $len [,$pad [,$type]]) //使用另一个字符串填充字符串为指定长度
0570  $type:在何处填充。STR_PAD_RIGHT,STR_PAD_LEFT 或 STR_PAD_BOTH
0571str_repeat($str, $num) //重复一个字符串
0572str_shuffle($str//随机打乱一个字符串
0573str_word_count($str [,$format [,$charlist]])  //返回字符串中单词的使用情况
0574strcasecmp($str1, $str2//二进制安全比较字符串(不区分大小写)
0575  如果str1小于str2,返回负数;如果str1大于str2,返回正数;二者相等则返回0。
0576strcmp($str1, $str2//二进制安全字符串比较
0577strcoll($str1, $str1//基于区域设置的字符串比较(区分大小写,非二进制安全)
0578strcspn($str1, $str1 [,$start [,$len]])  //获取不匹配遮罩的起始子字符串的长度
0579strip_tags($str//从字符串中去除HTML和PHP标记
0580strpos($haystack, $needle [,$offset])  //查找字符串首次出现的位置
0581stripos($haystack, $needle [,$offset])  //查找字符串首次出现的位置(不区分大小写)
0582strripos($haystack, $needle [,$offset])  //计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
0583strrpos($haystack, $needle [,$offset])  //计算指定字符串在目标字符串中最后一次出现的位置
0584strlen($str//获取字符串长度
0585strpbrk($haystack, $str//在字符串中查找一组字符的任何一个字符
0586strrev($str//反转字符串
0587  join('', array_reverse(preg_split("//u", $str))); //实现对UTF-8字符串的反转
0588strspn$subject, $mask) //计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度。
0589strstr($haystack, $needle//查找字符串的首次出现
0590stristr($haystack, $needle//查找字符串的首次出现(不区分大小写)
0591strrchr($haystack, $needle) //查找指定字符在字符串中的最后一次出现
0592strtok($str, $token//标记分割字符串
0593substr_compare($main_str, $str, $offset [,$len) //二进制安全比较字符串(从偏移位置比较指定长度)
0594substr_replace$str, $replace, $start [,$len//替换字符串的子串
0595strtr($str, $from, $to) //转换指定字符
0596substr($str, $start [,$len])  //返回字符串的子串
0597vfprintf$handle, $format, $args//将格式化字符串写入流
0598vprintf($format, $args) //输出格式化字符串
0599vsprintf($format, $args) //返回格式化字符串
0600wordwrap($str [,$width=75 [,$break='\n']]) //打断字符串为指定数量的字串
0601 
0602crc32($str) //计算一个字符串的crc32多项式
0603  crc32算法[循环冗余校验算法]
0604  生成str的32位循环冗余校验码多项式。将数据转换成整数。
0605 
0606/* mbstring(多字节字符串) */
0607//需开启mbstring扩展
0608mb_strimwidth($str, $start, $width [,$trim [,$encoding]])  //保留指定的子串(并补充)
0609mb_stripos($str, $needle [,$offset [,$encoding]])  //查找子串首次出现的位置(忽略大小写)
0610mb_strpos($str, $needle [,$offset [,$encoding]])  //查找子串首次出现的位置
0611mb_strripos($str, $needle [,$offset [,$encoding]])  //查找子串最后一次出现的位置(忽略大小写)
0612mb_strrpos($str, $needle [,$offset [,$encoding]])  //查找子串最后一次出现的位置
0613mb_strstr($str, $needle [,$before [,$encoding]])  //返回子串首次出现位置之后(前)的字符串
0614mb_stristr($str, $needle [,$before [,$encoding]])  //返回子串首次出现位置之后(前)的字符串(忽略大小写)
0615mb_strrchr($str, $needle [,$before [,$encoding]])  //返回字符最后一次出现位置之后(前)的字符串
0616mb_strrichr($str, $needle [,$before [,$encoding]])  //返回字符最后一次出现位置之后(前)的字符串(忽略大小写)
0617 
0618mb_strtoupper($str [,$encoding])  //转换成大写
0619mb_strtolower($str [,$encoding])  //转换成小写
0620 
0621mb_strlen($str [,$encoding])  //获取字符串长度
0622mb_split($pattern, $str [,$limit]) //将字符串分割成数组
0623mb_substr($str, $start [,$len [,$encoding]])  //获取字符串的子串
0624mb_strcut($str, $start [,$len [,$encoding]])  //获取字符串的子串
0625mb_strwidth($str [,$encoding]) //获取字符串的宽度
0626mb_substr_count($str, $needle [,$encoding]) //子串在字符串中出现的次数
0627 
0628 
0629/* PCRE函数 */
0630preg_filter($pattern, $replace, $subject [,$limit [,&$count]]) 执行一个正则表达式搜索和替换
0631preg_replace($pattern, $replace, $subject [,$limit [,&$count]]) 执行一个正则表达式搜索和替换
0632preg_replace_callback($pattern, $callback, $subject [,$limit [,&$count]])  执行一个正则表达式搜索并且使用一个回调进行替换
0633preg_grep($pattern, $input [,$flags])  返回匹配模式的数组条目
0634preg_match($pattern, $subject [,&$matches [,$flags [,$offset]]]) 执行一个正则表达式匹配
0635preg_match_all($pattern, $subject [,&$matches [,$flags [,$offset]]]) 执行一个全局正则表达式匹配
0636  $matches存放返回的结果
0637    $matches[0][n] (n>=0) 表示存放第n+1个匹配到的结果
0638    $matches[m][n] (m>=1, n>=0) 表示存放第n+1个匹配到结果的第m个表达式的内容
0639preg_split($pattern, $subject [,$limit [,$flags]]) 通过一个正则表达式分隔字符串
0640  $limit表示限制分隔得到的子串最多只有limit个,-1表示不限制
0641  $flags参数:
0642 PREG_SPLIT_NO_EMPTY:将返回分隔后的非空部分
0643 PREG_SPLIT_DELIM_CAPTURE:用于分隔的模式中的括号表达式将被捕获并返回
0644  PREG_SPLIT_OFFSET_CAPTURE:对于每一个出现的匹配返回时将会附加字符串偏移量
0645preg_quote($str [,$delimiter]) 转义正则表达式字符
0646preg_last_error()  返回最后一个PCRE正则执行产生的错误代码
0647 
0648 
0649/* Math函数 */
0650base_convert($number, $frombase, $tobase//在任意进制之间转换数字
0651ceil($float//向上取整
0652floor($float//向下取整
0653exp($float) //计算e的指数
0654hypot($x, $y//计算直角三角形的斜边长
0655is_nan($val//判断是否为合法数值
0656log($arg [,$base=e]) //自然对数
0657max($num1, $num2, ...) //找出最大值
0658  max($arr//找出数组中的最大值
0659min($num1, $num2, ...) //找出最小值
0660rand([$min], $max) //产生一个随机整数
0661srand([$seed]) //播下随机数发生器种子
0662mt_rand([$min], $max//生成更好的随机数
0663mt_srand($seed)   //播下一个更好的随机数发生器种子
0664pi()  //得到圆周率值
0665pow($base, $exp//指数表达式
0666sqrt($float//求平方根
0667deg2rad($float) //将角度转换为弧度
0668rad2deg($float) //将弧度数转换为相应的角度数
0669round($val [,$pre=0]) //对浮点数进行四舍五入
0670fmod($x, $y) //返回除法的浮点数余数
0671 
0672 
0673 
0674/* 【MySQL函数】 */
0675mysql_client_encoding([$link]) //返回字符集的名称
0676mysql_set_charset($charset [,$link])  //设置客户端字符集编码
0677mysql_connect($host, $user, $pass) //打开一个到MySQL服务器的连接
0678mysql_create_db($db [,$link])  //新建一个MySQL数据库
0679mysql_pconnect($host, $user, $pass) //打开一个到MySQL服务器的持久连接
0680mysql_ping([$link]) //Ping一个服务器连接,如果没有连接则重新连接
0681mysql_close([$link])  //关闭MySQL连接
0682 
0683mysql_data_seek($result, $row) //移动内部结果的指针
0684mysql_errno([$link])  //返回上一个MySQL操作中的错误信息的数字编码
0685mysql_error([$link])  //返回上一个MySQL操作产生的文本错误信息
0686mysql_affected_rows([$link]) //取得前一次MySQL操作所影响的记录行数
0687mysql_info([$link]) //取得最近一条查询的信息
0688mysql_insert_id([$link])  //取得上一步INSERT操作产生的ID
0689 
0690mysql_query($sql [,$link]) //发送一条MySQL查询
0691mysql_unbuffered_query($sql [,$link])  //向MySQL发送一条SQL查询,并不获取和缓存结果的行
0692mysql_db_query($db, $sql [,$link]) //发送一条MySQL查询
0693 
0694mysql_escape_string($str//转义一个字符串用于mysql_query
0695mysql_real_escape_string($str) //转义SQL语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
0696 
0697mysql_fetch_array($result [,$type]) //从结果集中取得一行作为关联数组,或数字数组,或二者兼有
0698mysql_fetch_assoc($result) //从结果集中取得一行作为关联数组
0699mysql_fetch_object($result) //从结果集中取得一行作为对象
0700mysql_fetch_row($result//从结果集中取得一行作为枚举数组
0701mysql_fetch_field($result) //从结果集中取得列信息并作为对象返回
0702mysql_num_fields($result//取得结果集中字段的数目
0703mysql_num_rows($result) //取得结果集中行的数目
0704 
0705mysql_fetch_lengths($result//取得结果集中每个输出的长度
0706mysql_field_flags($result, $field_offset//从结果中取得和指定字段关联的标志
0707mysql_field_len($result, $field_offset//返回指定字段的长度
0708mysql_field_name($result, $field_offset//取得结果中指定字段的字段名
0709mysql_field_seek($result, $field_offset//将结果集中的指针设定为制定的字段偏移量
0710mysql_field_table($result, $field_offset//取得指定字段所在的表名
0711mysql_field_type($result, $field_offset//取得结果集中指定字段的类型
0712mysql_free_result($result) //释放结果内存
0713 
0714mysql_list_dbs([$link]) //列出MySQL服务器中所有的数据库
0715mysql_list_fields($db, $table [,$link]) //列出MySQL结果中的字段
0716mysql_list_processes([$link])  //列出MySQL进程
0717mysql_list_tables($db [,$link]) //列出MySQL数据库中的表
0718 
0719mysql_result($result, $row [$field])  //取得结果数据
0720mysql_select_db($db [,$link])  //选择MySQL数据库
0721mysql_tablename($result, $i//取得表名
0722mysql_db_name($result, $row [,$field]) //取得mysql_list_dbs()调用所返回的数据库名
0723 
0724mysql_stat([$link]) //取得当前系统状态
0725mysql_thread_id([$link])  //返回当前线程的ID
0726mysql_get_client_info() //取得MySQL客户端信息
0727mysql_get_host_info()  //取得MySQL主机信息
0728mysql_get_proto_info() //取得MySQL协议信息
0729mysql_get_server_info() //取得MySQL服务器信息
0730 
0731 
0732/* 【SQL注入】 */
0733特殊字符导致的问题:
0734  1. 转义:mysql_real_escape_string()
0735  对外来数据(GPC: GET, POST, COOKIE)进行转义
0736  2. 先查询当前记录行,再匹配用户名
0737 
0738//魔术引号机制
0739自动为所有提交到服务器的数据增加特殊符号的转义。
0740当打开时,所有的单引号,双引号,反斜线和NULL字符都会被自动加上一个反斜线进行转义。这和addslashes()作用完全相同。
0741php.ini配置:
0742  magic_quotes_gpc = Off
0743get_magic_quotes_gpc() 获取当前魔术引号机制的配置信息
0744 
0745/* 【错误处理】 */
0746解析错误、运行错误
0747//标准错误:
0748  级别、信息、文件、行号
0749  trigger_error  触发一个用户自定义的error/warning/notice错误信息
0750 
0751//php.ini配置,ini_set()
0752error_reporting     设置报告哪些级别的错误
0753# 错误报告:显示到页面
0754  display_errors = On 是否显示错误报告
0755# 错误日志:存放到文件
0756  log_errors = on   是否开启错误日志
0757  error_log      发送错误信息到错误日志文件
0758- 错误报告和错误日志可同时启用!
0759 
0760自定义错误处理器
0761set_error_handler — 注册自定义错误处理器函数
0762- 自定义处理器函数包含4个参数,分别是级别、信息、文件、行号
0763- 开启自定义错误处理器,则系统内置的错误报告和错误日志则不会执行。
0764- 自定义错误处理器函数返回false,则自定义函数结束后系统内置的会继续执行。
0765- 用户定义的错误级别(E_USER_ERROR),可以被自定义的错误处理器所捕获并继续执行。系统内置的错误,则脚本会立即停止。
0766restore_error_handler — 恢复预定义错误处理器函数
0767error_get_last — 获取最近的错误信息
0768 
0769//错误处理函数
0770debug_backtrace 产生一条回溯跟踪
0771  返回数组,包含的键值:function, line, file, class, object, type, args
0772debug_print_backtrace 打印一条回溯
0773 
0774//错误常量
0775手册>错误处理
0776 
0777#生产模式
0778关闭错误报告,记录错误日志。
0779#开发模式
0780关闭错误日志,开启错误报告。
0781 
0782//异常
0783面向对象语法中的错误处理方式。
0784一个异常就是一个包含当前异常信息的对象。
0785预定义异常类Exception及其扩展类。
0786#抛出异常
0787触发一个异常的错误
0788throw new UserException();
0789如果没有被捕获,则报告致命错误。
0790#监视异常
0791try {代码段}
0792#捕获异常
0793catch (UserException $obj) {代码段}
0794需要通过当前异常的类型匹配才可悲捕获。
0795#异常处理器
0796用以处理未被捕获的异常。
0797异常处理器函数与catch类似,参数也是含类型的对象。
0798set_exception_handler — 注册异常处理器函数
0799restore_exception_handler — 恢复预定义的异常处理器函数
0800 
0801 
0802#自定义异常
0803用户定义的异常类须继承自Exception类。
0804 
0805//异常相关属性
0806protected string $message 异常消息内容
0807protected int $code 异常代码
0808protected string $file 抛出异常的文件名
0809protected int $line 抛出异常在该文件中的行号
0810//异常相关方法
0811Exception::__construct — 异常构造函数
0812Exception::getMessage — 获取异常消息内容
0813Exception::getPrevious — 返回异常链中的前一个异常
0814Exception::getCode — 获取异常代码
0815Exception::getFile — 获取发生异常的程序文件名称
0816Exception::getLine — 获取发生异常的代码在文件中的行号
0817Exception::getTrace — 获取异常追踪信息
0818Exception::getTraceAsString — 获取字符串类型的异常追踪信息
0819Exception::__toString — 将异常对象转换为字符串
0820Exception::__clone — 异常克隆
0821 
0822/* 【数据库抽象层】 */
0823PDO:PHP Data Objects
0824PHO抽象层默认被加载,但需加载相应数据库的驱动。
0825PDO是OOP语法,提供三个类:
0826PDO:PDO自身
0827PDOStatement:PDO语句类,提供对语句的后续处理
0828PDOException:PDO异常类,提供对错误的异常处理
0829 
0830//连接数据库
0831PDO::__construct(str $dsn [,str $username [,str $password [,arr $driver_options]]])
0832DSN:Data Source Name,数据源
0833$dsn = 'mysql:dbname=testdb;host=127.0.0.1;port=3306';
0834//执行没有返回结果的SQL语句
0835int PDO::exec(str $statement//返回影响的记录数
0836//执行有返回结果集的SQL语句
0837PDOStatement PDO::query (string $statement) //返回PDOStatement对象
0838//处理结果集(PDOStatement对象)
0839array PDOStatement::fetchAll([int $fetch_style [,mixed $fetch_argument [,array $ctor_args = array()]]])  //默认返回关联+索引数组
0840mixed PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] ) //返回一行
0841string PDOStatement::fetchColumn ([ int $column_number = 0 ] ) //返回一列
0842//释放资源
0843unset($pdo) 或 $pdo = null
0844 
0845//错误报告
0846静默模式:silent mode,出现错误,不主动报告错误(默认)
0847array PDO::errorInfo(void)
0848警告模式:warning mode,出现错误,触发一个警告级别的错误
0849异常错误:exception mode,出现错误,抛出异常
0850bool PDO::setAttribute(int $attribute, mixed $value//设置PDO类属性值
0851PDO::setAttribute('PDO::ATTR_ERRMODE', 'PDO::ERRMODE_SILENT | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION')
0852 
0853//预处理式执行SQL
0854可对数据自动转义,可有效抵制SQL注入。
0855PDOStatement PDO::prepare(string $statement [,array $driver_options=array()])
0856bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
0857bool PDOStatement::execute ([ array $input_parameters ] )
0858 
0859 
0860/* 【AR模式】 */
0861表 -> 类
0862字段 -> 类属性
0863数据 -> 对象
0864 
0865 
0866/* Date/Time */
0867date($format [,$timestamp]) //格式化一个本地时间/日期,$timestamp默认为time()
0868  Y:4位数字完整表示的年份
0869  m:数字表示的月份,有前导零
0870  d:月份中的第几天,有前导零的2位数字
0871  j:月份中的第几天,没有前导零
0872  H:小时,24小时格式,有前导零
0873  h:小时,12小时格式,有前导零
0874  i:有前导零的分钟数
0875  s:秒数,有前导零
0876  L:是否为闰年,如果是闰年为1,否则为0
0877  M:三个字母缩写表示的月份,Jan到Dec
0878  W:年份中的第几周,每周从星期一开始
0879  z:年份中的第几天
0880  N:数字表示的星期中的第几天
0881  w:星期中的第几天,数字表示
0882  e:时区标识
0883  T:本机所在的时区
0884  U:从Unix纪元开始至今的秒数(时间戳)
0885time() //返回当前的Unix时间戳(秒)
0886microtime([$get_as_float]) //返回当前Unix时间戳和微秒数
0887  $get_as_float参数存在并且其值等价于TRUE,将返回一个浮点数
0888strtotime($time [,$now]) //将任何英文文本的日期时间描述解析为Unix时间戳
0889  date("Y-m-d H:i:s", strtotime("-1 day")); //格式化前一天的时间戳
0890  "now"
0891  "10 September 2000"
0892  "+1 week"
0893  "+1 week -2 days 4 hours 2 seconds"
0894  "last Monday"
0895  "next Thursday"
0896gmdate($format [,$timestamp]) //格式化一个GMT/UTC 日期/时间
0897mktime([$hour = date("H") [,$minute = date("i") [,$second = date("s") [,$month = date("n") [,$day = date("j") [,$year = date("Y") [,$is_dst = -1]]]]]]]) //取得一个日期的Unix时间戳
0898strftime($format [,$timestamp]) //根据区域设置格式化本地时间/日期
0899date_default_timezone_get($timezone) //获取默认时区
0900date_default_timezone_set($timezone) //设置默认时区
0901 
0902 
0903/* DateTime */
0904//date()函数能处理有效时间戳范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07(因为32位系统能最大正整数限制)
0905DateTime::__construct([$time="now"]) //构造方法
0906  $time若是时间戳,则在时间戳前加@符号,如'@2345678'
0907DateTime::setTimezone($timezone) //设置时区
0908  eg: $date->setTimezone(new DateTimeZone('PRC'));
0909DateTime::format($format) //格式化时间戳,格式化字符串形式同date()函数
0910 
0911 
0912/* $_SERVER */
0914PHP_SELF 当前执行脚本的文件名 // /dir/demo.php
0915GATEWAY_INTERFACE 服务器使用的CGI规范的版本 // CGI/1.1
0916SERVER_ADDR 当前运行脚本所在的服务器的IP地址 // 127.0.0.1
0917SERVER_NAME 当前运行脚本所在的服务器的主机名 // desktop
0918SERVER_SOFTWARE 服务器标识字符串 // Apache/2.2.22 (Win32) PHP/5.3.13
0919SERVER_PROTOCOL 请求页面时通信协议的名称和版本 // HTTP/1.1
0920REQUEST_METHOD 访问页面使用的请求方式 // GET
0921REQUEST_TIME 请求开始时的时间戳 // 1386032633
0922QUERY_STRING 查询字符串(参数) // a=aaa&b=bbb
0923DOCUMENT_ROOT 当前运行脚本所在的文档根目录 // C:/Users/Administrator/Desktop
0924HTTP_ACCEPT 当前请求头中Accept:项的内容 // text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
0925HTTP_ACCEPT_CHARSET 当前请求头中Accept-Charset:项的内容 // UTF-8,*
0926HTTP_ACCEPT_ENCODING 当前请求头中Accept-Encoding:项的内容 // gzip, deflate
0927HTTP_ACCEPT_LANGUAGE 当前请求头中Accept-Language:项的内容 // zh-cn,zh;q=0.5
0928HTTP_CONNECTION 当前请求头中Connection:项的内容 // keep-alive
0929HTTP_HOST 当前请求头中Host:项的内容 // desktop
0930HTTP_REFERER 引导用户代理到当前页的前一页的地址
0931HTTP_USER_AGENT 当前请求头中User-Agent:项的内容 // Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
0932HTTPS 如果脚本是通过HTTPS协议被访问,则被设为一个非空的值
0933REMOTE_ADDR 浏览当前页面的用户的IP地址 // 127.0.0.1
0934REMOTE_HOST 浏览当前页面的用户的主机名
0935REMOTE_PORT 用户机器上连接到Web服务器所使用的端口号 // 49197
0936REMOTE_USER 经验证的用户
0937REDIRECT_REMOTE_USER 验证的用户,如果请求已在内部重定向
0938SCRIPT_FILENAME 当前执行脚本的绝对路径 // C:/Users/Administrator/Desktop/dir/demo.php
0939SERVER_ADMIN 该值指明了Apache服务器配置文件中的SERVER_ADMIN参数 //admin@shocker.com
0940SERVER_PORT Web服务器使用的端口 // 80
0941SERVER_SIGNATURE 包含了服务器版本和虚拟主机名的字符串
0942PATH_TRANSLATED 当前脚本所在文件系统(非文档根目录)的基本路径
0943SCRIPT_NAME 当前脚本的路径 // /dir/demo.php
0944REQUEST_URI URI用来指定要访问的页面 // /dir/demo.php?a=aaa&b=bbb
0945PHP_AUTH_DIGEST 客户端发送的“Authorization” HTTP头内容
0946PHP_AUTH_PW 用户输入的密码
0947AUTH_TYPE 认证的类型
0948PATH_INFO 包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息
0949ORIG_PATH_INFO 在被PHP处理之前,“PATH_INFO”的原始版本
0950 
0951 
0952 
0953 
0954/* 缓存 */
09551. ob缓存(输出缓存)(需开启)
0956  php.ini设置中开启并设置输出缓存大小:output_buffering = 4096
0957  ob_start() 开启当前脚本页面的输出缓存
0958  如果输出缓存打开,则输出的数据先放到输出缓存(header函数前可以有输出),否则直接放入程序缓存。
0959  header()函数发送的内容直接放入程序缓存。
0960  开启输出缓存后,输出缓存数据会刷新到程序缓存,然后有Apache封装成http响应包返回给浏览器。
0961  输出缓存:存放的数据是从开启输出缓存开始返回给浏览器的所有静态页面数据!
09622. 程序缓存(内部缓存,必须存在,不能关闭)
09633. 浏览器缓存
0964 
0965/* ob缓存(输出控制) */ Output Buffering
0966ob_start() //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面。
0967  ob_start('ob_gzhandler'); //将gz编码的数据发送到支持压缩页面的浏览器
0968 
0969ob_clean();      //删除内部缓冲区的内容,不关闭缓冲区(不输出)。
0970ob_end_clean();    //删除内部缓冲区的内容,关闭缓冲区(不输出)。
0971ob_get_clean();    //返回内部缓冲区的内容,关闭缓冲区。相当于执行ob_get_contents()与ob_end_clean()
0972ob_flush();      //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区。
0973ob_end_flush();    //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,关闭缓冲区。
0974ob_get_flush();    //返回内部缓冲区的内容,并关闭缓冲区,再释放缓冲区的内容。相当于ob_end_flush()并返回缓冲区内容。
0975flush();        //将当前为止程序的所有输出发送到用户的浏览器
0976 
0977ob_get_contents();   //返回缓冲区的内容,不输出。
0978ob_get_length();    //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回FALSE。
0979ob_get_level();    //Return the nesting level of the output buffering mechanism.
0980ob_get_status();    //获取ob状态信息
0981 
0982ob_implicit_flush();  //打开或关闭绝对刷新,默认为关闭,打开后ob_implicit_flush(true),所谓绝对刷新,即当有输出语句(e.g: echo)被执行时,便把输出直接发送到浏览器,而不再需要调用flush()或等到脚本结束时才输出。
0983 
0984ob_gzhandler        //ob_start回调函数,用gzip压缩缓冲区的内容。
0985ob_list_handlers      //List all output handlers in use
0986output_add_rewrite_var   //Add URL rewriter values
0987output_reset_rewrite_vars //Reset URL rewriter values
0988 
0989这些函数的行为受php_ini设置的影响:
0990output_buffering    //该值为ON时,将在所有脚本中使用输出控制;若该值为一个数字,则代表缓冲区的最大字节限制,当缓存内容达到该上限时将会自动向浏览器输出当前的缓冲区里的内容。
0991output_handler     //该选项可将脚本所有的输出,重定向到一个函数。例如,将 output_handler 设置为 mb_output_handler() 时,字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。
0992implicit_flush     //作用同ob_implicit_flush,默认为Off。
0993 
0994//ob缓存作用
09951)防止在浏览器有输出之后再使用setcookie()、header()或session_start()等发送头文件的函数造成的错误。其实这样的用法少用为好,养成良好的代码习惯。
09962)捕捉对一些不可获取的函数的输出,比如phpinfo()会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。
09973)对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
09984)生成静态文件,其实就是捕捉整页的输出,然后存成文件。经常在生成HTML,或者整页缓存中使用。
0999 
1000 
1001/* 网站并发 */
1002测试工具:apache/bin/ab.exe
1003用法:cmd{%apache-bin%}>ab.exe -n 执行访问次数 -c 用户并发数量 URL地址
1004MPM(多路处理模块):perfork(预处理模式), worker(工作者模式), winnt(Win系统)
1005MPM配置:httpd-mpm.conf
1006查看当前MPM模式:httpd –l  mpm_xxx.c中xxx表示当前模式类型
1007httpd.conf配置(开启MPM):#Include conf/extra/httpd-mpm.conf
1008#参考配置
1009#配置文件:extra/httpd-mpm.conf
1010#mpm_winnt.c
1011<IfModule mpm_winnt_module>
1012  ThreadsPerChild   1000  #中型网站1500-5500合理
1013  MaxRequestsPerChild 0
1014</IfModule>
1015#mpm_prefork.c
1016<IfModule mpm_prefork_module>
1017  StartServers  5    #预先启动
1018  MinSpareServers 5
1019  MaxSpareServers 10   #最大空闲进程
1020  ServerLimit   1500  #用于修改apache编程参数
1021  MaxClients   1000  #最大并发数
1022  MaxRequestsPerChild 0  #一个进程对应的线程数,对worker更用
1023</IfModule>
1024#如果你的网站pv值上百万
1025ServerLimit   2500  #用于修改apache编程参数
1026MaxClients   2000  #最大并发数
1027 
1028 
1029/* 静态化 */
10301. 页面URL长度不超过255字节
10312. meta信息尽量完整,keywords5个左右
10323. 前端不要使用框架
10334. 图片alt属性添加信息
10345. 静态页面不要带动态值
1035 
1036<script type="text/javascript" language="javascript" src="url"></script>
1037url可以是js/php/图片等,返回的数据替换<script>标签所在位置的内容!相当于简单的Ajax
1038 
1039 
1040/* Apache压缩 */
1041gzip/deflate
1042 
1043 
1044/* XSS攻击 */
1045#恶意JS代码
1046#不规则HTML代码
1047 
1048开源过滤器:htmlpurifier
1049 
1050//获取COOKIE
1051<script>
1052var c = document.cookie; //获取COOKIE
1053var script = document.createElement('script'); //创建script标签
1054script.src = 'demo.php?c=' + c; //发送到指定的文件接收
1055document.body.appendChild(script); //添加到DOM对象中生效
1056</script>
1057 
1058 
1059/* 命令行CLI */
1060//显示帮助信息
1061php -h
1062//解析并运行-f选项给定的文件名
1063php [-f] <file> [--] [args...]
1064//在命令行内运行单行PHP代码
1065php [options] -r <code> [--] [args...]
1066无需加上PHP的起始和结束标识符,否则将会导致语法解析错误
1067//调用phpinfo()函数并显示出结果
1068php -i/--info
1069//检查PHP语法
1070php -l/--syntax-check
1071//打印出内置以及已加载的PHP及Zend模块
1072php -m/--modules
1073//将PHP,PHP SAPI和Zend的版本信息写入标准输出
1074php -v/--version
1075 
1076//参数接收
1077$argv  传递给脚本的参数数组
1078  第一个参数总是当前脚本的文件名,因此$argv[0]就是脚本文件名
1079$argc  传递给脚本的参数数目
1080  脚本的文件名总是作为参数传递给当前脚本,因此$argc的最小值为1
1081包含当运行于命令行下时传递给当前脚本的参数的数组
1082此两个变量仅在register_argc_argv打开时可用
1083 
1084 
1085/* 设计模式 */
1086单例模式:为一个类生成一个唯一的对象。使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
1087工厂模式:封装对象的建立过程。可以在对象本身创建对象工厂或者是一个额外的工厂类
1088MVC模式:用户->控制器->模型->控制器->视图->控制器->用户
1089 
1090 
1091/* 配置选项 */
1092set_time_limit($seconds) //设置脚本最大执行时间(默认30秒),0表示不限制
1093ini_get($varname) //获取一个配置选项的值
1094ini_set($varname, $newvalue) //为一个配置选项设置值
1095extension_loaded($ext_name) //检测一个扩展是否已经加载
1096get_extension_funcs($ext_name) //返回模块函数名的数组
1097 
1098 
1099/* 【其他】 */
1100version_compare(str $ver1, str $ver2 [,str $operator]) //比较版本号
1101  $operator表示操作符,可选:<, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne
1102  如果省略$operator,返回两个版本号的差值。
1103符号@  用于抑制系统运行错误的报告显示
1104memory_get_usage  //获取当期内存使用情况
1105memory_get_peak_usage  //获取内存使用的峰值
1106getrusage  //获取CPU使用情况(Windows不可用)
1107uniqid([$prefix])  //获取一个带前缀、基于当前时间微秒数的唯一ID
1108highlight_string($str [,$return])  //字符串的语法高亮
1109  $return:设置为TRUE,高亮后的代码不会被打印输出,而是以字符串的形式返回。高亮成功返回TRUE,否则返回FALSE。
1110highlight_file($file [,$return])  //语法高亮一个文件
1111__halt_compiler   //中断编译器的执行
1112get_browser   //获取浏览器具有的功能
1113  get_browser ([ string $user_agent [, bool $return_array = false ]] )
1114  如果设置为 TRUE,该函数会返回一个 array,而不是 object
1115eval($code) //把字符串作为PHP代码执行
1116gzcompress($str [,$level=-1])  //压缩字符串
1117gzuncompress($str) //解压缩字符串
1118gzencode($str [,$level=-1])  //压缩字符串
1119gzdecode($str) //解压缩字符串
1120ignore_user_abort($bool) //设置客户端断开连接时是否中断脚本的执行

希望本文所述对大家的PHP程序设计有所帮助。

请看上一篇地址http://camnpr.com/php-python/1800.html

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/php-python/1801.html