文件上传的总体思路是:首先判断文件格式和大小是否符合要求,其次判断文件名是否相同,在这中间我们还需要根据编码格式的差异设置文件的编码格式,当文件的格式、大小、文件名不同时,才能够允许文件保存到相应的目录下
在利用PHP进行文件上传时,我们需要先建立一个form表单,利用form表单向服务器传送相关书据,代码如下:
<form action="chuli.php" method="post" enctype="multipart/form-data"> //在这里。form表单是用来上传文件的,因此我们需要增加一个额外的属性:enctype.enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。在这里我们进行的是文件的上传,所以我们选用multipart/form-data <input type="file" name="file" /> //在input标签里,我们之前在连接数据库,对数据库进行操作时,我们对type属性进行设置,可以实现不同的功能,比如文本框、密码框、文本域等等。在这里,我们将type属性设置为file,以便进行文件上传 <input type="submit" value="上传" /> </form>
在前台的上传操作制作完毕后,我们需要提交到后台进行处理,例如判断要上传的文件是否存在,是否是系统支持的文件格式,遇到文件重名是怎么办等等,代码如下:
<?php var_dump($_FILES["file"]);//在之前的练习中,我们使用最多的是用POST方法来获取数据,但是在这里,我们用FILES。在这里,我们可以用var_dump($_FILES["file"])来查看要上传文件的一些信息,比如文件大小、文件格式、文件名等
//总体上讲,在进行文件上传时,我们需要特别注意以下4个问题: //1.控制上传文件的类型和大小 //2.如果文件名重复出现覆盖 //3.减少文件重名的概率 修改文件名 建文件夹 //4.关于中文乱码问题 if(($_FILES["file"]["type"] == "image/jpeg" || $_FILES["file"]["type"] == "image/png") && $_FILES["file"]["size"]<=102400) {//我们根据$_Files["file"]数组来取得文件数据后,判断文件类型是否符合要求,至于关于文件格式的写法,我们前面已经获取到,所以具体的判断条件的写法如上面代码 //上传操作 //造一个存储路径 $yuan = $_FILES["file"]["tmp_name"];//我们之前在用var_dump($_FILES["file"])//查看文件的各项信息时,我们看到有一个tmp_name,这里面显示的是在文件上传过程中,文件的临时存储路径 $filename = "./img/".date("YmdHis").$_FILES["file"]["name"];//为了防止重名,我们给文件名加上一个时间戳,精确到秒。 //将存储路径的编码格式变为国标 $filename = iconv("UTF-8","gb2312",$filename);//在设置文件的编码格式时,要用到iconv函数,从左到右它需要三个参数,分别表示:文件当前的编码格式、转换后的编码格式、文件名,这三者之间用逗号隔开 //判断文件是否存在 if(file_exists($filename))//file_exists用于检查文件或者目录是否存在 { die("文件已存在"); } //移动文件 move_uploaded_file($yuan,$filename);
//当文件符合设定的各项要求后,将会从练市存储路径转移到设定好的存储目录下,在这一过程中,需用到move_uploaded_file函数,它有两个参数:上传文件的文件名,要移动到的位置 } else { echo "上传的文件不符合要求"; } ?>