php基础复习(3)文件上传于下载

时间:2022-08-28 09:40:04
一、
客户端配置:
表单页面
表单的发送方式是post
添加enctype = “multipart/form-data”
 
<form action="doaction.php" method="post" enctype="multipart/from-data">
     <input type="file" name="myfile"/><br/>
     <input type="submit" value="上传文件"/>
</from>
二、—FILES
 
二维数组
第一维是input 的name
第二维 如下
name => nv.jpg  文件名
type   => image/jepg  文件类型MIME
tmp_name =>临时地址
error => 0   错误号
size  =>176943   文件的大小
 
三、移动文件
move_uploaded_file($tem_name,$destination):将服务器上的临时文件移动到指定目录下,移动成功返回true ,失败返回false
copy($src,$dst)
 
 
四、服务器端的配置
 
file_uploads = on ,支持HTTP上传
upload_tem_dir = ,临时文件保存的目录
upload_max_filesize = 2m.允许上传文件的最大值
max_file_uploads = 20,允许一次上传的最大文件数
post_max_size = 8M ,POST方式发送数据的最大值
max_execution_time = -1设置了脚本被解析器终止之前的最大执行时间,单位是秒,防止程序写的不好而占据服务器的资源。
max_input_time = 60,脚本解析输入的数据允许的最大时间,单位是秒
max_input_nesting_level = 64,设置输入的变量的嵌套深度。
max_input_vars = 1000,接受多少输入的变量(限制分别应用与$_GET / $_POST)和$_cookie超全局变量,指令的使用减轻了以哈希碰撞来进行拒绝服务器攻击的可能性,如有超过指令数量的变量,将会导致E_WARNING的产生,更多的输入变量将会从请求截断。
memory_limit =128M,最大单线程的独立内存使用量,也就是一个web请求,给予现成线程的最大内存使用量定义。
 
五、错误号
UPLOAD_ERR_OK  0 ,代表没有发生错误,文件上传成功
UPLAOD_ERR_INI_SIZE  1  ,上传的文件超过了php.ini中upload_max_filesize选项限制的值
UPLOAD_ERR_FROM_SIZE 2 ,上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值。
UPLOAD_ERR_PARTIAL  3 ,文件只有部门上传
UPLOAD_ERR_NO_FILE  4  ,没有文件被上传
UPLOAD_ERR_NO_TMP_DIR  6 ,找不到临时文件夹
UPLOAD_ERR_CANT_WRITE   7 ,文件写入失败
UPLOAD_ERR_EXTENSION   8 , 上传的文件被PHP拓展程序中断
 
六、服务器端限制
限制上传文件的大小
if($fileinfo['size']>$maxsize)
限制上传文件的类型
$allowext = array('jpeg','jpg','png','gif','wbmp'); 
$ext = strtolower(end(explode('.',$fileinfo['name'])));
$ext=pathinfo($fileInfo['name'],PATHINFO_EXTENSION)
if(!in_array($ext,$allowext))
{
     
}
检查是否是真实的图片类型
getimagesize($filename) : 得到指定图片的信息,如果是图片返回数组,如果不是返回false
检查是否是HTTP POST 方式上传
if(!is_uploaded_file($fileinfo['tmp_name'])){}
 
七、文件名不重名
$uniName=md5(uniqid(microtime(true),true)).'.'.$ext;
 
八。路径的判断
if(! file_exists($path))
{
     mkdir($path,0777,true);
     chmod($path,0777);
}
 
九。多文件上传
 
function getFiles()
{
    foreach ($_FILES as $file) {
        if (is_string($file['name'])) {
            $files[$i] = $file;
            $i++;
        }elseif (is_array($file['name'])) {
            foreach ($file['name'] as $key => $val) {
                $files[$i]['name'] = $file['name'][$key];
                $files[$i]['type'] = $file['type'][$key];
                $files[$i]['error'] = $file['error'][$key];
                $files[$i]['size'] = $file['size'][$key];
            }
        }
    }
    return $files;
}
十:下载
$filename=$_GET['filename];
header('content-disposition:attachment;filename='.basename($filename));
header('content-length:'.filesize($filename));
readfile($filename);