PHP文件上传在网站开发中应用十分广泛,例如用户上传头像、在文章中插入图片、上传附件等等。今天就讲讲如何使用PHP上传文件。
首先创建一个HTML表单,用于提交上传的文件, 这里需要注意的是,在上传文件的表单中,必须使设置enctype='multipart/form-data'来确保匿名上载文件的正确编码。
action='./upload.php'name='upload_form'method='post'enctype='multipart/form-data'>type='file'name='img'>type='submit'name='submit'value='上传'>
input标签的 type='file' 属性规定了应该把输入作为文件来处理。
用户选择好需要上传的文件以后,点击上传按钮。通过post方式提交给upload.php文件。
当upload.php接收到提交过来的文件时,PHP会用一个全局数组 $_FILES 来储存被上传的文件的一些信息,当我们使用 var_dump() 函数打印 $_FILES 数组可以获得以下信息$_FILES['img']['name'] - 被上传文件的名称
$_FILES['img']['type'] - 被上传文件的类型
$_FILES['img']['size'] - 被上传文件的大小,以字节计
$_FILES['img']['tmp_name'] - 存储在服务器的文件的临时副本的名称
$_FILES['img']['error'] - 由文件上传导致的错误代码
我们在upload.php文件中输出这些信息:
这是一种非常简单文件上传方式。但是基于安全方面的考虑,我们应该做一些限制,例如限制用户只能上传格式为.png 或者 .gif 的图片,且大小必须小于100kb。
if($_FILES['img']['size']<10000&&$_FILES['img']['type']=='image/png'||$_FILES['img']['type']=='image/gif'){if($_FILES['img']['error']>0){//当error为0表示上传成功echo'错误信息: '.$_FILES['img']['error'].'
';}else{echo'文件名称: '.$_FILES['img']['name'].'
';echo'文件类型: '.$_FILES['img']['type'].'
';echo'文件大小: '.($_FILES['img']['size']/1024).' Kb
';echo'文件临时存储路径: '.$_FILES['img']['tmp_name'];}}else{echo'无效的文件!';}
上面的例子虽然输出了文件的信息,但是并没有将文件储存在服务器上,只是将被上传的文件放在了服务器的一个临时目录。接下来我们要做的就是使用 move_uploaded_file()函数,把文件从临时目录中移动到我们指定的目录下面。
move_uploaded_file()语法:
move_uploaded_file('需要移动的文件', '文件的新位置')
phpif($_FILES['img']['size']<10000&&$_FILES['img']['type']=='image/png'||$_FILES['img']['type']=='image/gif'){if($_FILES['img']['error']>0){//当error为0表示上传成功echo'错误信息: '.$_FILES['img']['error'].'
';}else{echo'文件名称: '.$_FILES['img']['name'].'
';echo'文件类型: '.$_FILES['img']['type'].'
';echo'文件大小: '.($_FILES['img']['size']/1024).' Kb
';echo'文件临时存储路径: '.$_FILES['img']['tmp_name'].'
';move_uploaded_file($_FILES['img']['tmp_name'],'upload/'.$_FILES['img']['name']);echo'移动后的路径: '.'upload/'.$_FILES['img']['name'];}}else{echo'无效的文件!';}?>