前文索引:
我的个人PHP学习笔记(一)
续~我的个人PHP学习笔记(二)
续~我的个人PHP学习笔记(三)
续~我的个人PHP学习笔记(四)
续~我的个人PHP学习笔记(五)今天的比较重要!
这一部份内容是接上篇 续~我的个人PHP学习笔记(五)今天的比较重要!
// 三大特性
/* 【类与对象相关函数】 */
class_alias([$original [,$alias]]) 给类取别名
class_exists($class [,$autoload]) 检查类是否已定义
interface_exists($interface [,$autoload]) 检查接口是否已被定义
method_exists($obj, $method)检查类的方法是否存在
property_exists($class, $property) 检查对象或类是否具有该属性
get_declared_classes(void) 返回由已定义类的名字所组成的数组
get_declared_interfaces(void) 返回一个数组包含所有已声明的接口
get_class([$obj]) 返回对象的类名
get_parent_class([$obj]) 返回对象或类的父类名
get_class_methods($class) 返回由类的方法名组成的数组
get_object_vars($obj) 返回由对象属性组成的关联数组
get_class_vars($class) 返回由类的默认属性组成的数组
is_a($obj, $class) 如果对象属于该类或该类是此对象的父类则返回TRUE
is_subclass_of($obj, $class) 如果此对象是该类的子类,则返回TRUE
get_object_vars($obj) 返回由对象属性组成的关联数组
// 常用类
# PHP手册 -> 预定义类
Closure 闭包类,匿名函数对象的final类
stdClass 标准类,通常用于对象类保存集合数据
__PHP_Incomplete_Class 不完整类,当只有对象而没有找到类时,则该对象被认为是该类的对象
Exception 异常类
PDO 数据对象类
// 魔术常量
__DIR__ 文件所在的目录
__LINE__ 文件中的当前行号
__FILE__ 文件的完整路径(绝对路径)和文件名
__CLASS__ 类的名称
__METHOD__ 类的方法名,包含类名和方法名
__FUNCTION__ 函数名称,用在方法内只表示方法名
// 反射机制 Reflection
作用:1. 获取结构信息 2. 代理执行
ReflectionClass 报告一个类的有关信息
ReflectionMethod 报告一个方法的有关信息
ReflectionClass::export 输出类结构报告
# 代理执行
实例化 ReflectionFunction 类的对象
$f = new ReflectionFunction(‘func’); // func为函数func($p)
$f->invoke(‘param’);
接下来开始今天的笔记,今天的笔记主要是讲COOKIE SESSION 画布对象,文件操作,这些在日常网站中操作还是比较重要的!
/* 页面跳转 */
// PHP
header(‘Loacation: url’)
header()执行完毕后,后面的代码也会继续执行,故需在该语句后加die结束
无法给出提示,直接跳转
// JS方法
location.href = url
// HTML
<meta http-equiv=”Refresh” content=”表示时间的数值; url=要跳转的URI”>
/* 【Cookie】 */
cookie是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
cookie是HTTP标头的一部分,因此setcookie()函数必须在其它信息被输出到浏览器前调用,这和对header()函数的限制类似。可以使用输出缓冲函数来延迟脚本的输出,直到按需要设置好了所有的cookie或者其它HTTP标头。
// 新增
setcookie 新增一条cookie信息
setcookie($name [,$value [,$expire [,$path [,$domain [,$secure [,$httponly]]]]]])
#注意:setcookie()函数前不能有输出!除非开启ob缓存!
# 参数说明
$name – cookie的识别名称
使用$_COOKIE[‘name’]抵用名为name的cookie
$value – cookie值,可以为数值或 字符串 ,此值保存在客户端,不要用来保存敏感数据
假定$name参数的值为’name’,则$_COOKIE[‘name’]就可取得该$value值
$expire – cookie的生存期限(Unix时间戳,秒数)
如果$expire参数的值为time()+60*60*24*7则可设定cookie在一周后失效。如果未设定该参数,则会话后立即失效。
$path – cookie在服务器端的指定路径。当设定该值时,服务器中只有指定路径下的网页或程序可以存取该cookie。
如果该参数值为’/’,则cookie在整个domain内有效。
如果设为’/foo/’,则cookie就在domain下的/foo/目录及其子目录内有效。
默认值为设定cookie的当前目录及其子目录。
$domain – 指定此cookie所属服务器的网址名称,预设是建立此cookie服务器的网址。
要是cookie能在如abc.com域名下的所有子域都有效,则该参赛应设为’.abc.com’。
$secure – 指明cookie是否仅通过安全的HTTPS连接传送中的cookie的安全识别常数,如果设定该值则代表只有在某种情况下才能在客户端与服务端之间传递。
当设成true时,cookie仅在安全的连接中被设置。默认值为false。
// 读取
– 浏览器请求时会携带当前域名下的所有cookie信息到服务器。
– 任何从客户端发送的cookie都会被自动存入$_COOKIE全局数组。
– 如果希望对一个cookie变量设置多个值,则需在cookie的名称后加[]符号。即以数组形态保存多条数据到同一变量。
//设置为$_COOKIE[‘user’][‘name’],注意user[name]的name没有引号
setcookie(‘user[name]’, ‘shocker’);
– $_COOKIE也可以为索引数组
// 删除
方法1:将其值设置为空字符串
setcookie(‘user[name]’, ”);
方法2:将目标cookie设为“已过期”状态。
//将cookie的生存时间设置为过期,则生存期限与浏览器一样,当浏览器关闭时就会被删除。
setcookie(‘usr[name]’, ”, time()-1);
# 注意:
1. cookie只能保存字符串数据
2. $_COOKIE只用于接收cookie数据,不用于设置或管理cookie数据。
对$_COOKIE进行操作不会影响cookie数据。
$_COOKIE只会保存浏览器在请求时所携带的cookie数据。
3. cookie生命周期:
临时cookie:浏览器关闭时被删除
持久cookie:$expire参数为时间戳,表示失效时间。
4. 有效目录
cookie只在指定的目录有效。默认是当前目录及其子目录。
子目录的cookie在其父目录或同级目录不可获取。
5. cookie区分域名
默认是当前域名及其子域名有效。
6. js中通过document.cookie获得,类型为字符串
7. 浏览器对COOKIE总数没有限制,但对每个域名的COOKIE数量和每个COOKIE的大小有限,而且不同浏览器的限制不同。
/* 【session】 */
1. 开启session机制
session_start()
注意:session_start()函数前不能有输出!除非开启ob缓存。
2. 操作数据
对$_SESSION数组进行操作
3. 浏览器端保存SessionID,默认为当前域名下的所有目录及其子目录生效。即默认设置cookie的path值为’/’
4. 服务器保存session数据
默认保存方式:每个会话都会生成一个session数据文件,文件名为:sess_加SessionID
5. session可以存储除了资源以外的任何类型数据。
数据被序列化后再保存到文件中。
6. $_SESSION的元素下标不能为整型!
因为只对元素值进行序列化。
元素内的数组下标无此要求。
7. 生存周期
默认是浏览器关闭
因为浏览器保存的cookie变量SessionID是临时的
但是服务器端的session数据文件不一定消失(需要等待session的垃圾回收机制来处理)
可以延长cookie中PHPSESSID变量的生命周期。(不推荐)
php. ini 配置session.gc_maxlifetime
8. 删除数据
$_SESSION变量在脚本结束时依然会消失。开启session机制时会造出$_SESSION变量。
$_SESSION与保存session数据的文件是两个空间。
unset($_SESSION[‘key’])只是删除数组内的该元素,不会立即相应到保存session数据的文件上。
等到脚本结束,才会将$_SESSION的数据写入到该文件中。
session_destroy() 销毁保存session数据的文件,也不会对该文件写入内容。
并不删除$_SESSION变量,unset或脚本结束才会删除该变量。
如何完全删除一个session?需删除3部分
unset($_SESSION);
删除$_SESSION变量后,数据文件并未被改动。如果单独使用unset,则需先置空$_SESSION = array()
session_destroy();
setcookie(‘PHPSESSID’, ”, time()-1); //保险做法是将其生命周期失效
整个脚本周期内,只对数据文件读一次、写一次。
// 重写session的存储机制
# session存储方式
session.save_handler = user|files|memcache
# 因数据文件过多导致的问题,可通过分子目录保存进行解决
PHP配置文件下session.save_path选项,并需手动创建数据存放目录。
在该配置选项前加层级。分布子目录的原则,利用会话ID的相应字母来分配子目录。仍需手动创建子目录。
session.save_path = “2; F:/PHPJob/Temp”
# 多服务器数据共享问题
# 数据存储操作:
初始化$ open 、释放资源$close、读$read、写$write、销毁存储介质$destroy(调用session_destroy时触发该操作)、垃圾回收$gc
# 会话ID的长度可变。不同的设置方式导致不同长度的会话ID。
session.hash_function 允许用户指定生成会话ID的散列算法。
‘0’ 表示MD5(128 位),’1′ 表示SHA-1(160 位)。
session.hash_bits_per_character 允许用户定义将二进制散列数据转换为可读的格式时每个字符存放多少个比特。
可能值为 ‘4’(0-9,a-f),’5’(0-9,a-v),以及 ‘6’(0-9,a-z,A-Z,”-“,”,”)。
总hash长度为128bit,会话ID长度为128/可能值,4->32, 5->26, 6->22
# 自定义数据存储操作方法
# 注意:不用关心PHP如何序列化、反序列化、如何得到数据和写入数据,只做与数据存储相关的操作
session_set_save_handler 设置用户自定义的会话数据存储函数
bool session_set_save_handler(callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc)
执行顺序:open, close, read, write, destroy, gc
# 先设置处理器,再开启会话
# 常用函数
session_start 开启或恢复会话机制
session_id 获取或设置当前会话ID
session_destroy 销毁当前会话的所有数据(销毁数据文件)
session_name 获取或设置当前会话名称(cookie变量名,默认为PHPSESSID)
session_save_path 获取或设置当前会话数据文件保存路径
session_set_save_handler 设置用户自定义的会话数据存储函数
session_unset 释放所有会话变量(清空$_SESSION数组元素)
session_encode 将当前会话数据编码为一个字符串
session_decode 将字符串解译为会话数据
session_write_close 写入会话数据并关闭会话
session_register_shutdown 关闭会话
session_set_cookie_params 设置会话cookie变量,必须在session_start()前使用。
session_set_cookie_params(0,”/webapp/”); //设置session生存时间
session_get_cookie_params 获取会话cookie变量。返回包含当前会话cookie信息的数组
# 配置php.ini
ini_set($varname, $newvalue);
//该函数的配置只对当前脚本生效
//并非所有php.ini设置均可用该函数设置
ini_get($varname) //获取某配置项信息
ini_get_all([str $extension]) //返回所有配置项信息的数组
# session扩展配置
session.name 指定会话名以用作cookie的名字。只能由字母数字组成,默认为PHPSESSID。
session.save_path 定义了传递给存储处理器的参数。
如果选择了默认的files文件处理器,则此值是创建文件的路径。默认为/tmp。
可选的N参数来决定会话文件分布的目录深度。
要使用N参数,必须在使用前先创建好这些目录。在ext/session目录下有个小的shell脚本名叫mod_ file s.sh可以用来做这件事。
如果使用了N参数并且N大于0,那么将不会执行自动垃圾回收。
session.save_handler 定义了来存储和获取与会话关联的数据的处理器的名字。默认为files。
如果用户自定义存储器,则该值改为user。
ini_set(‘session.save_ handle r’, ‘user’);//此设置只针对当前脚本生效。
session.auto_start 指定会话模块是否在请求开始时自动启动一个会话。默认为 0(不启动)。
session.gc_probability与session.gc_divisor合起来定义了在每个会话初始化时启动gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动gc进程。session.gc_divisor默认为100。session.gc_probability默认为1。
/* 【图片生成与处理】 */GD库
// 画布生成
# 新建画布
imagecreate 新建一个基于调色板的图像
resource imagecreate(int $x_size, int $y_size)
imagecreatetruecolor 新建一个真彩色图像
# 基于已有文件或URL创建画布
imagecreatefromgd2 从GD2文件或URL新建一图像
imagecreatefromgd2part 从给定的GD2文件或URL中的部分新建一图像
imagecreatefromgd 从GD文件或URL新建一图像
imagecreatefromgif 由文件或URL创建一个新图象
imagecreatefromjpeg 由文件或URL创建一个新图象
imagecreatefrompng 由文件或URL创建一个新图象
imagecreatefromstring 从字符串中的图像流新建一图像
imagecreatefromwbmp 由文件或URL创建一个新图象
imagecreatefromxbm 由文件或URL创建一个新图象
imagecreatefromxpm 由文件或URL创建一个新图象
// 颜色分配
imagecolorallocate 为一幅图像分配颜色
int imagecolorallocate(resource $image, int $red, int $green, int $blue)
imagecolorallocatealpha 为一幅图像分配颜色 + alpha
imagecolordeallocate 取消图像颜色的分配
imagecolortransparent 将某个颜色定义为透明色
imagecolorat 取得某像素的颜色索引值
imagecolorclosest 取得与指定的颜色最接近的颜色的索引值
imagecolorclosestalpha 取得与指定的颜色加透明度最接近的颜色
imagecolorclosesthwb 取得与给定颜色最接近的色度的黑白色的索引
imagecolorexact 取得指定颜色的索引值
imagecolorexactalpha 取得指定的颜色加透明度的索引值
imagecolormatch 使一个图像中调色板版本的颜色与真彩色版本更能匹配
imagecolorresolve 取得指定颜色的索引值或有可能得到的最接近的替代值
imagecolorresolvealpha 取得指定颜色 + alpha 的索引值或有可能得到的最接近的替代值
imagecolorset 给指定调色板索引设定颜色
imagecolorsforindex 取得某索引的颜色
imagecolorstotal 取得一幅图像的调色板中颜色的数目
// 区域填充
imagefill 区域填充
bool imagefill(resource $image, int $x, int $y, int $color)
imagefilledarc 画一椭圆弧且填充
imagefilledellipse 画一椭圆并填充
imagefilledpolygon 画一多边形并填充
imagefilledrectangle 画一矩形并填充
imagefilltoborder 区域填充到指定颜色的边界为止
imagesettile 设定用于填充的贴图
// 图形创建
imagearc 画椭圆弧
imagechar 水平地画一个字符
imagecharup 垂直地画一个字符
imagedashedline 画一虚线
imageellipse 画一个椭圆
imageline 画一条线段
imagepolygon 画一个多边形
imagerectangle 画一个矩形
imagesetpixel 画一个单一像素
imagesx 取得图像宽度
imagesy 取得图像高度
// 画笔设置
imagesetbrush 设定画线用的画笔图像
imagesetstyle 设定画线的风格
imagesetthickness 设定画线的宽度
// 图形拷贝
imagecopy 拷贝图像的一部分
imagecopymerge 拷贝并合并图像的一部分
imagecopymergegray 用灰度拷贝并合并图像的一部分
imagecopyresampled 重采样拷贝部分图像并调整大小
imagecopyresized 拷贝部分图像并调整大小
// 字符创建
imagestring 水平地画一行字符串
imagestringup 垂直地画一行字符串
imagepsslantfont 倾斜某字体
imagefontheight 取得字体高度
imagefontwidth 取得字体宽度
imagettfbbox 取得使用 TrueType 字体的文本的范围
imageloadfont 载入一新字体
imagepsencodefont 改变字体中的字符编码矢量
imagepsextendfont 扩充或精简字体
// 导出画布为图片
imagegif 以GIF格式将图像输出到浏览器或文件
imagepng 以PNG格式将图像输出到浏览器或文件
imagejpeg 以JPEG格式将图像输出到浏览器或文件
imagewbmp 以WBMP格式将图像输出到浏览器或文件
通过header()发送 “Content-type: image/图片格式” 可以使PHP脚本直接输出图像。
header(“Content-type: image/gif”); imagegif($im);
imagegd 将 GD 图像输出到浏览器或文件
imagegd2 将 GD2 图像输出到浏览器或文件
// 释放画布资源
imagedestroy 销毁图像
// 图像信息
image_type_to_extension 取得图像类型的文件后缀
getimagesize 取得图像大小
imagesx 取得图像宽度
imagesy 取得图像高度
imageistruecolor 检查图像是否为真彩色图像
imagetypes 返回当前 PHP 版本所支持的图像类型
// 图像设置
imagerotate 用给定角度旋转图像
imagealphablending 设定图像的混色模式
imageantialias 是否使用抗锯齿(antialias)功能
imagefilter 对图像使用过滤器
imagegammacorrect 对 GD 图像应用 gamma 修正
imageinterlace 激活或禁止隔行扫描
/* 【缩略图】【水印】 */
imagecopyresampled 重采样拷贝部分图像并调整大小
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 )
imagecopymerge 拷贝并合并图像的一部分
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 )
getimagesize 取得图像大小
array getimagesize ( string $filename [, array &$imageinfo ] )
/* 【URL函数】 */
get_headers — 取得服务器响应一个 HTTP 请求所发送的所有标头
get_meta_tags — 从一个文件中提取所有的 meta 标签 content 属性,返回一个数组
http_build_query — 生成 URL-encode 之后的请求字符串
urldecode — 解码已编码的URL字符串
urlencode — 编码URL字符串
parse_url — 解析URL,返回其组成部分
‘#anchor’
scheme(如http), host, port, user, pass, path, query(在问号?之后), fragment(在散列符号#之后)
//编码可用于交换多个变量
$a = ‘中国’;
$b = ‘四川’;
$a = urlencode($a);
$b = urlencode($b);
$a = $a.’&’.$b;
$b = explode(‘&’, $a);
$a = urldecode($b[1]);
$b = urldecode($b[0]);
echo $a, $b;
//list()函数用于交换变量
list($a, $b) = array($b, $a);
/* 【文件、目录】 */
dirname($path) 返回路径中的目录部分
basename($path [,$suffix]) 返回路径中的文件名部分
pathinfo($path [,$options]) 返回文件路径的信息(数组元素:dirname,basename,extension)
realpath($path) 返回规范化的绝对路径名
copy($source, $dest) 拷贝文件
unlink($file) 删除文件
rename($old, $new) 重命名或移动一个文件或目录
mkdir($path [,$mode [,$recursive]]) 新建目录
$mode表示权限,默认0777
$recursive表示可创建多级目录,默认false
rmdir($dir) 删除目录(目录必须为空,且具有权限)
file_exists($file) 检查文件或目录是否存在
is_file($file) 判断文件是否存在且为正常的文件
is_dir($file) 判断文件名是否存在且为目录
is_readable($file) 判断文件或目录是否可读
is_writable($file) 判断文件或目录是否可写
is_executable($file) 判断给定文件名是否可执行
is_link($file) 判断给定文件名是否为一个符号连接
tmpfile(void) 建立一个临时文件
tempnam($dir, $prefix) 在指定目录中建立一个具有唯一文件名的文件
file($file) 把整个文件读入一个数组中
fopen($filename, $mode [,$use_include_path])
$mode参数:(加入’b’标记解决移植性)
‘r’ 只读方式打开,将文件指针指向文件头。
‘r+’ 读写方式打开,将文件指针指向文件头。
‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘w+’ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘a+’ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘x’ 创建并以写入方式打开,将文件指针指向文件头。
‘x+’ 创建并以读写方式打开,将文件指针指向文件头。
fclose($handle) 关闭一个已打开的文件指针
fread($handle, $length) 读取文件(可安全用于二进制文件)
fwrite($handle, $string [,$length]) 写入文件(可安全用于二进制文件)
rewind($handle) 倒回文件指针的位置
ftell($handle) 返回文件指针读/写的位置
fseek($handle, $offset [,$whence]) 在文件指针中定位
feof($handle) 测试文件指针是否到了文件结束的位置
fgets 从文件指针中读取一行
fgetss 从文件指针中读取一行并过滤掉HTML标记
flock($handle, $opt) 轻便的咨询文件锁定
$opt:LOCK_SH 取得共享锁定(读取的程序);LOCK_EX 取得独占锁定(写入的程序);LOCK_UN 释放锁定(无论共享或独占)
readfile($file) 读入一个文件并写入到输出缓冲
fflush($handle) 将缓冲内容输出到文件
touch($file [,$time [,$atime]]) 设定文件的访问和修改时间
fileatime 取得文件的上次访问时间
filectime 取得文件的inode修改时间
filegroup 取得文件的组
fileinode 取得文件的inode
filemtime 取得文件修改时间
fileowner 取得文件的所有者
fileperms 取得文件的权限
filesize 取得文件大小
filetype 取得文件类型
/* fileinfo */ 获取/设置文件信息
#扩展Fileinfo,配置php.ini
#extension=php_fileinfo.dll
finfo_open([$opt]) //创建一个文件信息资源
finfo_file($finfo, $file [,$opt]) //获取文件信息
finfo_set_flags($finfo, $opt) //设置文件信息项
finfo_close($finfo) //关闭文件信息资源
mime_content_type($file) //获取文件的MIME类型
$opt参数选项:
FILEINFO_MIME_ENCODING 文件编码类型
FILEINFO_MIME_TYPE 文件MIME类型
//目录
chdir($dir) 改变当前目录
chroot($dir) 将当前目录改变为当前进程的根目录
closedir($handle) 关闭目录句柄
dir($dir) 返回一个目录的实例对象
getcwd() 取得当前工作目录
opendir($path) 打开目录句柄
readdir($handle) 从目录句柄中读取条目
rewinddir($handle) 倒回目录句柄
scandir($dir [,$order]) 列出指定路径中的文件和目录
glob($pattern [,$flags]) 寻找与模式匹配的文件路径
$flags:
GLOB_MARK – 在每个返回的项目中加一个斜线
GLOB_NOSORT – 按照文件在目录中出现的原始顺序返回(不排序)
GLOB_NOCHECK – 如果没有文件匹配则返回用于搜索的模式
GLOB_NOESCAPE – 反斜线不转义元字符
GLOB_BRACE – 扩充 {a,b,c} 来匹配 ‘a’,’b’ 或 ‘c’
GLOB_ONLYDIR – 仅返回与模式匹配的目录项
查找多种后缀名文件:glob(‘*.{php,txt}’, GLOB_BRACE);
/* 解压缩 */
//新建ZipArchive对象
$zip = new ZipArchive;
//打开ZIP文件
$zip->open($file [,$flags]);
$flags:
ZIPARCHIVE::OVERWRITE 覆盖(不存在会自动创建)
ZIPARCHIVE::CREATE 添加(不存在会自动创建)
ZIPARCHIVE::EXCL
ZIPARCHIVE::CHECKCONS
//关闭正在处理的ZIP文件
//解压缩ZIP文件
$zip->extractTo($dest, [$entries]);
$dest:解压到的文件夹,$entries:解压的条目
//添加文件到ZIP文件
$zip->addFile($file, [$newname]);
$newname可以为”dir/file”,这样可以将文件添加到压缩文件中的某个目录下。其他函数也如此。
//添加文件到ZIP文件,而内容来自字符串
$zip->addFromString($file, $str);
//添加空文件夹到ZIP文件
$zip->addEmptyDir($dir);
//通过索引删除ZIP中的文件或文件夹
$zip->deleteIndex($index);
//通过名称删除ZIP中的文件或文件夹
$zip->deleteName($name);
//设置ZIP文件注释
$zip->setArchiveComment($str);
//获取ZIP文件注释
$zip->getArchiveComment();
//通过索引获取文件内容
$zip->getFromIndex($index);
//通过名称获取文件内容
$zip->getFromName($name);
//获取索引文件的文件名称
$zip->getNameIndex($index);
//通过索引重命名文件
$zip->renameIndex($index, $newname);
//通过名称重命名文件
$zip->renameName($name, $newname);
//若将文件夹内容打包成ZIP文件,需循环文件夹的所有目录及文件
function addFileToZip($path, $zip) {
//打开当前文件夹$path
$handle = opendir($path);
//循环读取子文件夹及文件
//为防止文件名本身可被转换为false的情况(比如为”0″),则需用不全等!==
while ($file = readdir($handle) !== false) {
//过滤假文件夹
if ($file != ‘.’ && $file != ‘..’) {
//对于子文件夹则递归调用本函数
if (is_dir($path . ‘/’ . $file)) {
addFileToZip($path.’/’.$file, $zip);
} else {
//将文件添加到ZIP对象
$zip->addFile($path . ‘/’ . $file);
}
}
}
//关闭文件夹$path
closedir($path);
}
// —– END 解压缩 —– //
/* 【文件上传】 */
enctype=”multipart/form-data” //FORM标签必须的属性
$_FILES 上传文件信息数组变量
error 上传错误信息
无错误
文件大小超过php.ini配置
1) upload_max_filesize 允许上传的最大文件大小
2) post_max_size 最大的POST数据大小
3) memory_limit 每个脚本能够使用的最大内存数量(默认128MB)
文件大小超过浏览器表单配置
MAX_FILE_SIZE 表示表单数据最大文件大小,该元素需在文件上传域之前。(默认2M)
<input type=”hidden” name=”MAX_FILE_SIZE” value=”102400″>
文件只有部分被上传
文件没有被上传
6,7 临时文件写入时失败
找不到临时文件
文件写入失败
name 文件名
type 文件类型
tmp_name 上传文件临时路径
size 文件大小
move_uploaded_file($path, $newpath); //将上传的文件移动到新位置
is_uploaded_file($file) //判断是否为POST上传的文件
//多文件上传
<input type=”file” name=”updfile[]” /> //HTML中以数组提交
$_FILES[‘updfile’][‘tmp_name’][0] //服务器端可访问第一个文件的临时路径,其他属性类似
//php.ini配置
file_uploads = On 是否允许HTTP上传文件
upload_max_filesize 上传文件大小限制,默认为2M
post_max_size post方式表单数据总大小限制,默认为8M
upload_tmp_dir 上传文件临时目录,默认是系统临时目录
需设置上传文件临时目录,给其最小权限
GET方式的最大传输量为2K
/* 【批量提交】 */
FORM表单中的name值可用名称加中括号的形式,在$_POST获取表单数据时,可多项提交形成数组。
比如多文件上传file,复选框提交checkbox等。
<input type=”checkbox” name=”id[]” value=”值1″ />
<input type=”checkbox” name=”id[]” value=”值2″ />
$id = $_POST[‘id’]; //则可获得全部被选中的复选框值,形成索引数组
如果name值为:
<input type=”checkbox” name=”id[one]” value=”值1″ />
<input type=”checkbox” name=”id[two]” value=”值2″ />
$id = $_POST[‘id’]; //则可获取所有name为id[…]的值,形成管理数组