文件上传
表单的enctype属性:
application/x-www-fomr-urlencoded
:表示表单先服务器传输的文件数据。这是默认格式。(将表单的数据转成XML格式向服务器传输)multipart/form-data
:符合数据,告知浏览器表单中是符合数据(字符串,二进制文件)text/plain
:用于向服务器传输大量文本,效率高,但时安全性低,用于发送邮件
表示表单传输的数据类型
表单文件域
1 | <form method="post" action="" enctype="multipart/form-data"> |
超全局变量
$_FILES
$_FILES[]['name']
:上传文件名$_FILES[]['size']
:文件上传的大小
$_FILES[]['error']
:文件上传的错误号 0,1,2,3,4,6,7
UPLOAD_ERR_OK:值为 0,没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
: 值为 1,上传的文件超过了 php.ini 中upload_max_filesize
选项限制的值。UPLOAD_ERR_FORM_SIZE
:值为 2,上传文件的大小超过了 HTML 表单中MAX_FILE_SIZE
选项指定的值。<input type='hidden' name='MAX_FILE_SIZE' value='2'>
,隐藏域必须在文件域前面才起作用。UPLOAD_ERR_PARTIAL
:值为 3,文件只有部分被上传。UPLOAD_ERR_NO_FILE
:值为 4,没有文件被上传。UPLOAD_ERR_NO_TMP_DIR
:值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。UPLOAD_ERR_CANT_WRITE
:值为 7,文件写入失败。PHP 5.1.0 引进。
补充:
表单允许POST传输的最大值:
post_max_size = 8M
$_FILES[]['type']
:上传文件格式,返回MIMIE格式 语法:类型/格式$_FILES[]['tmp']
:文件上传的临时目录
upload_tmp_dir='F:\wamp\tmp'
临时目录地址
php.ini 配置文件file_uploads = On
是否允许文件上传max_file_uploads = 20
同时最多允许上传20个文件
move_uploaded_file()移动上传文件
bool move_uploaded_file ( string $filename , string $destination )
$filename
:上传的文件的文件名。$destination
:移动文件到这个位置。
常用函数bool is_uploaded_file ( string $filename )
— 判断文件是否是通过 HTTP POST 上传的is_uploaded_file($_FILES['userfile']['tmp_name'])
:用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd
文件名截取
方法一:strrchr($filename,'.');
从最后出现的点截取到末尾
方法二:pathinfo($filename); 通过文件路径返回文件信息
1 |
|
以上两种方法方法可以被伪装(强制修改文件扩展名)
方法三:开启fileinfo
扩展extension_fileinfo.dll
1 | $finfo = finfo_open(FILEINFO_MIME); //创建finfo对象,用来匹配文件 |
文件上传注意事项:
上传文件的大小限制(文件上传
upload_max_filesize
、post大小post_max_size
、表单隐藏域<input type='hidden' name='MAX_FILE_SIZE' value='2'>
,文件域之前)
文件格式验证的三种方法:
路径截取、pathinfo、fileinfo
生成唯一文件名
time().rand(100,999).strrchr($path,’.’);
uniqid().strrchar($path,’.’);
string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )
,可选前缀prefix
、基于当前时间微秒数的唯一ID。设置第二个参数more_entropy
为TRUE
,返回唯一ID更具唯一性。
优化文件上传
1 |
|
多文件上传
表单命名以数组的形式,接收到的数据,按相同的属性组成一个索引数组
缩略图
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 )
重采样拷贝部分图像并调整大小
dst_image:目标图象连接资源。
src_image:源图象连接资源。
dst_x:目标 X 坐标点。
dst_y:目标 Y 坐标点。
src_x:源的 X 坐标点。
src_y:源的 Y 坐标点。
dst_w:目标宽度。
dst_h:目标高度。
src_w:源图象的宽度。
src_h:源图象的高度
等比缩略图
思想:按图的长宽比例进行比较,源图的比例大的为标准,短边进行等比压缩。
压缩目标图边的长度=源图缩放边的长度*目标图标准边长度/源图标准边的长度
1 |
|