PHP单文件上传
目录结构:
静态模板代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>单文件上传</title> </head> <body> <form action="file.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> </body> </html>
php步骤代码:
<?php echo '<pre>'; /** * var_dump()或print_r() * 打印变量的相关信息,将变量的信息详细的展示出来 * */ var_dump($_FILES); echo '</pre>'; /**1、判断错误码 */ if($_FILES['file']['error'] > 0){ switch ($_FILES['file']['error']) { //错误码不为0,即文件上传过程中出现了错误 case '1': echo '文件过大'; break; case '2': echo '文件超出指定大小'; break; case '3': echo '只有部分文件被上传'; break; case '4': echo '文件没有被上传'; break; case '6': echo '找不到指定文件夹'; break; case '7': echo '文件写入失败'; break; default: echo "上传出错<br/>"; } }else{ //错误码为0,即上传成功,可以进行后续处理,处理流程见下文 echo('上传成功,错误码为0'); /** * 2、判断文件是否超出了指定的大小,单位为byte */ $MAX_FILE_SIZE = 100000; if($_FILES['file']['size'] > $MAX_FILE_SIZE){ /** 判断,如果上传的文件,大小超出了我们给的限制范围,退上传并产生错误提示 */ exit("文件超出指定大小"); }else{ /** * 3、判断文件的mime类型是否正确,且符合格式要求 * 当前项目指定上传后缀为.jpg或.gif的图片,则$allowSuffix = array('jpg','gif'); */ //限制当前项目上传文件后缀,例如项目指定上传后缀为.jpg或.gif的图片 $allowSuffix = array('jpg','gif'); //将一个字符串用指定的字符切割,并返回一个数组,这里我们将文件名用'.''切割,结果存在$myImg中,文件的后缀名即为数组的最后一个值 $myImg = explode('.', $_FILES['file']['name']); //数组['蔡徐坤','jpg'] //array_pop返回数组的最后一个值。如果数组是空的,或者非数组,将返回 NULL。 $myImgSuffix = array_pop($myImg);//后缀jpg /* 3-1判断后缀 根据上传文件名获取文件的后缀名 使用in_array()函数,判断上传文件是否符合要求 当文件后缀名不在我们允许的范围内时退出上传并返回错误信息 */ if(!in_array($myImgSuffix, $allowSuffix)){ exit("文件后缀名不符"); } /** * 3-2 判断mime类型 * mime类型和文件后缀名的对应关系,我们可以通过很多途径查询到,为了避免用户自主修改文件后缀名造成文件无法使用。 * mime类型也必须做出限制检查mime类型,是为了防止上传者直接修改文件后缀名导致文件不可用或上传的文件不符合要求。 */ //数组内容为允许上传的mime类型 $allowMime = array( "image/jpg", "image/jpeg", "image/pjpeg", "image/gif" ); //判断上传文件的mime类型是否在允许的范围内 if(!in_array($_FILES['file']['type'], $allowMime)){ exit('文件格式不正确,请检查');//如果不在允许范围内,退出上传并返回错误信息 }else{ /** * 4、生成指定的路径和文件名 * 按照项目的文件安排,生成文件存储路径,为了避免文件名重复而产生的错误,按照一定的格式,生成一个随机文件名 */ //指定上传文件夹 $path = "images/"; /** * 根据当前时间生成随机文件名,本行代码是使用当前时间 + 随机一个0-9的数字组合成文件名, * 后缀即为前面取到的文件后缀名 * date('Y').date('m').date("d").date('H').date('i').date('s') **/ $name = date('Ymd_His').rand(0,9).'.'.$myImgSuffix;//随机文件名 /**5、判断是否是上传文件-使用is_uploaded_file()判断是否是上传文件 */ //tmp_name缓存文件,上传的图片即保存在这里 if(!is_uploaded_file($_FILES['file']['tmp_name'])){ exit('上传文件有误,不是上传文件,请检查'); } /**6、移动文件到指定位置 */ if(move_uploaded_file($_FILES['file']['tmp_name'], $path.$name)){ //提示文件上传成功 echo "上传成功"; }else{ /* 文件移动失败,检查磁盘是否有足够的空间,或者linux类系统中文件夹是否有足够的操作权限*/ echo '上传失败'; print_r($_FILES["file"]); } } } } ?>