1、文件上传原理2、超全局变量数组 $_FILES3、上传文件错误代码4、查看上传的临时文件位置5、将上传文件移动到新位置6、上传文件的相关配置(php.ini)7、获取文件路径信息 pathinfo()8、检查数组中是否存在某个值 in_array()9、生成唯一ID uniqid()实操单个文件上传htmlphp多个文件上传htmlphp 1、文件上传原理ü 上传文件,就是将文件从浏览器端传到服务器端;ü 上传文件,必须使用标记来向服务器端发数据;ü 上传文件,标记的method属性值必须是POST;ü 上传文件,标记的enctype属性值必须是multipart/form-data;ü 上传文件,必须使用标记实现。 2、超全局变量数组 $_FILESØ $_POST数组中保存的是普通表单元素数据;Ø $_FILES数组中保存的是上传文件的信息。 3、上传文件错误代码提示:0、1、4比较重要。 4、查看上传的临时文件位置ü 上传文件的默认临时目录,如果没有指定php.ini配置项upload_tmp_dir的值,则使用操作系统临时目录(c:\windows\temp)。通过phpinfo()函数查看。ü 为什么在 c:\windows\temp 中看不到上专文件呢?因为临时文件是短暂存在的,也就是在脚本执行完毕后,就消失了。 5、将上传文件移动到新位置ü 描述:本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。最好在临时文件没有消失前移动。ü 语法:bool move_uploaded_file ( string $filename , string $destination )ü 参数:$filename,指定上传的临时文件名;$destination,指定新的文件名路径;ü 注意:如果文件已经存在,则会覆盖操作。 6、上传文件的相关配置(php.ini)ü upload_max_filesize配置:上传单个文件的大小限制,默认为2MB。ü post_max_size配置:规定上传多个文件的总大小,默认为8MB。ü max_file_uploads配置:规定最多上传的文件个数,默认为20个。 7、获取文件路径信息 pathinfo()ü 描述:返回文件路径的信息 ;ü 语法:mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )ü 参数:þ $path,要解析的路径。 þ $options,如果省略,返回全部单元;þ PATHINFO_DIRNAME,目录名称;þ PATHINFO_BASENAME,文件名称;þ PATHINFO_EXTENSION,扩展名;þ PATH_FILENAME,文件名。 8、检查数组中是否存在某个值 in_array()ü 描述:检查数组中是否存在某个值ü 语法:bool in_array ( mixed $needle , array $arr )ü 参数:$needle检索的值,$arr原数组。 9、生成唯一ID uniqid()ü 描述:生成一个唯一IDü 语法:string uniqid ([ string $prefix = “” [, bool $more_entropy = false ]] )ü 参数:þ $prefix前缀字符串,如果省略,返回字符串长度为13;þ $more_entropy后缀字符串,如果为true,返回字符串长度为23。 实操 单个文件上传 html<!DOCTYPE html><html><head><meta charset="utf-8"><title>文件上传原理</title></head><body><form name="form1" method="post" enctype="multipart/form-data" action="upload.php">上传图片:<input type="file" name="uploadFile"><input type="submit" value="提交"><input type="hidden" name="token" value="upload"></form></body></html> php<?php//判断表单是否合法提交if(isset($_POST['token']) && $_POST['token']=='upload'){ print_r("<pre/>"); print_r($_FILES); /* (1)判断上传文件有没有错误发生 (2)判断上传文件是否超过2MB大小 (3)判断上传文件是不是图片 (4)移动临时文件到虚拟目录中:取出文件扩展名、文件名唯一性 */ //(1)判断上传文件有没有错误发生 if($_FILES['uploadFile']['error']!=0) { echo "<h2>上传文件发生了错误!</h2>"; die(); } //(2)判断上传文件大小是否超过2MB if($_FILES['uploadFile']['size']>2*1024*1024) { echo "<h2>文件大小超出php.ini中的限制!</h2>"; die(); } //(3)判断上传文件是不是图片 $arr = array('image/jpeg','image/png','image/gif'); $type = $_FILES['uploadFile']['type']; if(!in_array($type,$arr)) { echo "<h2>必须上传图像!</h2>"; die(); } //(4)移动临时文件,到./upload目录中 $ext = pathinfo($_FILES['uploadFile']['name'],PATHINFO_EXTENSION); //jpg $tmp_name = $_FILES['uploadFile']['tmp_name']; $dst_name = "./upload/".uniqid().".".$ext; move_uploaded_file($tmp_name,$dst_name); echo "<h2>文件上传成功</h2>"; die();}else{ echo "非法操作";} 多个文件上传 html<!DOCTYPE html><html><head><meta charset="utf-8"><title>文件上传原理</title></head><body><form name="form1" method="post" enctype="multipart/form-data" action="upload.php">上传图片1:<input type="file" name="uploadFile[]"><br>上传图片2:<input type="file" name="uploadFile[]"><br>上传图片3:<input type="file" name="uploadFile[]"><br><input type="submit" value="提交"><input type="hidden" name="token" value="upload"></form></body></html> php<?php//判断表单是否合法提交if(isset($_POST['token']) && $_POST['token']=='upload'){ print_r("<pre/>"); print_r($_FILES); //将三维数组,转成二维数组 $arrs = $_FILES['uploadFile']; //循环判断,只需要移动有文件上传的 foreach($arrs['name'] as $key=>$name) { //如果文件不则,则移动文件 if($name != "") { $ext = pathinfo($name,PATHINFO_EXTENSION); print_r($ext);echo "<br>"; $tmp_name = $arrs['tmp_name'][$key]; print_r($tmp_name);echo "<br>"; $dst_name = "./upload/".uniqid().".".$ext; print_r($dst_name);echo "<hr>"; move_uploaded_file($tmp_name,$dst_name); } }}else{ echo "非法操作";}