PHP操作文件上传

简介: PHP操作文件上传

一.文件上传介绍


在我们日常使用中经常会遇到很多种这样的情况:


QQ空间里面上传图片呀


微信朋友圈上传图片


发邮件里面上传邮件资料附件


认证的时候要求上传照片或身份证


而这些上传文件的操作用php也可以实现(很多就是用的php),而且php的文件上传操作时每个程序员都要会的,通过本章学习,你将看到文件上传的本质


二.文件上传的相关配置问题


在正式讲解文件上传之前,第一个事情是要观察php.ini文件,这个文件就是文件上传的配置文件,里面有很多的配置项,这里给出一个php中文网的例子,我们先简单了解几个


28d18ab264782de9967c8f36cb37bdea.png


此外还有一个需要注意的就是脚本执行时间这个参数(即设定脚本的最大执行时间)


// max_execution_time,这什参数的单位为秒。

以上参数基本都有默认值,如果默认值不能满足需要时再去修改即可


三.文件上传步骤


为了方便大家的理解,这里我将php的文件上传分成了六个步骤


1.判断是否有错误码


f980f4e5c39f611bb9f032a3fdb8c507.png


注意:错误码并不会有5


2. 自定义判断是否超出文件大小范围


在编写开发上传功能的时候除了php.ini中规定的上传的最大值外,我们还自定义判断是否超出文件大小范围用于限制实际业务中我们想要规定的上传的文件大小


3、判断后缀名和mime类型是否符合


有时候为了防止用户上传上来的图片带有病毒或者其他文件,就可以对文件的后缀或者mine类型进行判断,如果不符合要求就不让其进行上传,这也是白名单的一种做法


MIME(Multipurpose Internet Mail Extensions)是多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。


每种后缀都有对应的mine类型,这个大家可以自行去查,这里就不做太多讲解了


4、生成文件名


文件成功上传后需要我们进行保存,但很多时候都不会保存用户上传的原名,这里我们就可以采用date()、mt_rand()或者unique()生成随机的文件名。


5、判断是否是上传文件


文件上传成功时,系统会将上传的临时文件上传到系统的临时目录中。产生一个临时文件。


同时会产生临时文件名。我们需要做的事情是将临时文件移动到系统的指定目录中。


而移动前不能瞎移动,或者移动错了都是不科学的。移动前我们需要使用相关函数判断上传的文件是不是临时文件。


is_uploaded_file()传入一个参数($_FILES中的缓存文件名),判断传入的名称是不是上传文件。


6、移动临时文件到指定位置


临时文件是真实的临时文件,我们需要将其移动到我们的网站目录下面了。


让我们网站目录的数据,其他人可以访问到。


我们使用:move_uploaded_file()。


这个函数是将上传文件移动到指定位置,并命名。


传入两个参数:


第一个参数是指定移动的上传文件;


第二个参数是指定的文件夹和名称拼接的字符串。


四:表单注意事项


文件上传必须需要表单,form表单也为文件内容准备了一个专用的类。下面给出一个文件上传的前端html页面的简单例子


<html>
   <head>
       <meta charset="utf-8" />
       <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>

这个html页面有两个需要注意的点,


form 表单中的参数method 必须为post。若为get是无法进行文件上传的


enctype须为multipart/form-data


上面的表单我们可以看出提交地址是file.php ,这里的file.php其实主要做的就是对上传的文件进行审核,存放等操作,代码如下


<?php 
//print_r($_FILES["upfile"]); 
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){ 
$upfile=$_FILES["upfile"]; 
//获取数组里面的值 
$name=$upfile["name"];//上传文件的文件名 
$type=$upfile["type"];//上传文件的类型 
$size=$upfile["size"];//上传文件的大小 
$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径 
//判断是否为图片 
switch ($type){ 
case 'image/pjpeg':$okType=true; 
break; 
case 'image/jpeg':$okType=true; 
break; 
case 'image/gif':$okType=true; 
break; 
case 'image/png':$okType=true; 
break; 
} 
if($okType){ 
/** 
* 0:文件上传成功<br/> 
* 1:超过了文件大小,在php.ini文件中设置<br/> 
* 2:超过了文件的大小MAX_FILE_SIZE选项指定的值<br/> 
* 3:文件只有部分被上传<br/> 
* 4:没有文件被上传<br/> 
* 5:上传文件大小为0 
*/ 
$error=$upfile["error"];//上传后系统返回的值 
echo "================<br/>"; 
echo "上传文件名称是:".$name."<br/>"; 
echo "上传文件类型是:".$type."<br/>"; 
echo "上传文件大小是:".$size."<br/>"; 
echo "上传后系统返回的值是:".$error."<br/>"; 
echo "上传文件的临时存放路径是:".$tmp_name."<br/>"; 
echo "开始移动上传文件<br/>"; 
//把上传的临时文件移动到up目录下面 
move_uploaded_file($tmp_name,'up/'.$name); 
$destination="up/".$name; 
echo "================<br/>"; 
echo "上传信息:<br/>"; 
if($error==0){ 
echo "文件上传成功啦!"; 
echo "<br>图片预览:<br>"; 
echo "<img src=".$destination.">"; 
//echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">"; 
}elseif ($error==1){ 
echo "超过了文件大小,在php.ini文件中设置"; 
}elseif ($error==2){ 
echo "超过了文件的大小MAX_FILE_SIZE选项指定的值"; 
}elseif ($error==3){ 
echo "文件只有部分被上传"; 
}elseif ($error==4){ 
echo "没有文件被上传"; 
}else{ 
echo "上传文件大小为0"; 
} 
}else{ 
echo "请上传jpg,gif,png等格式的图片!"; 
} 
} 
?>

这就是今天的全部内容了,希望大家下去可以多自己尝试一下,php中的文件上传是非常常见的,加油哇。

相关文章
|
1月前
|
PHP
php的foreach神操作
php的foreach神操作
22 0
|
7月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
81 0
|
2月前
|
PHP
从建站打拿站 -- PHP(文件上传)
从建站打拿站 -- PHP(文件上传)
12 0
|
7月前
|
关系型数据库 MySQL 数据库连接
PHP 原生操作 Mysql 增删改查案例
PHP 原生操作 Mysql 增删改查案例
87 0
|
3月前
|
SQL PHP 数据库
PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)
PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)
PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
原生php实现自定义表单(支持基本类型+file类型(单文件上传))
原生php实现自定义表单(支持基本类型+file类型(单文件上传))