首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

深入显出PHP下的文件上传

2013-10-16 
深入浅出PHP下的文件上传来源:http://www.360weboy.com/php/upload.html?文件作为一种特殊的表单数据,通过

深入浅出PHP下的文件上传


来源:http://www.360weboy.com/php/upload.html

?

文件作为一种特殊的表单数据,通过http post请求方式提交至服务器的时候,php会生成一个$_FILES全局数组,相关的文件信息会存放在这个全局数组中。我将在这篇文章中通过一些示例代 码来阐述php下的文件上传,并且深入看下关于文件上传内部的实现机制,最后简单说下如何加强这方面的安全性!

文件上传

为了让客户端的用户能够上传文件,我们必须在用户界面中提供一个表单用于提交上传文件的请求。由于上传的文件是一种特殊数据,不同于其它的post数据,所以我们必须给表单设置一个特殊的编码:

图1. 显示在在firefox中的上传表单

当这个表单提交的时候,http请求会被发送到upload.php。为了显示具体哪些信息可以在upload.php中使用,我在upload.php将其打印出来:

Content-Type: text/plain

360weboy

360days

Life Of A Web Boy
-----------------------------24464570528145--

从上面的请求格式中有几个字段我们要关注下的,分别是name, filename以及Content-Type.它们分别表示上传文件框在form表单中的字段名-attachment,用户从本地硬盘中上传的文件名 – test.txt,以及上传的文件格式 – text/plain(代表文本文件)。然后,我们看到一行空行下面的,就是这个上传文件中的具体内容。

安全性的加强

为了加强文件上传中的安全性,我们需要检查下$_FILES全局数组中的tmp_name和size。为了确保tmp_name指向的文件确实是刚 刚用户在客户端上传的文件,而不是指向的类似/etc/passwd,可以使用php中的函数is_uploaded_file()来进行下判断:

1
2
3
4
5
6
7
8
9
10<?php
?
$tmp_filename = $_FILES['attachment']['tmp_name'];
$filename = '/path/to/attachment.txt';
?
if (move_uploaded_file(tmp_filename, $filename)) {
? ? /* $temp_filename 保存在临时目录中的上传文件, 然后成功将其保存到对应目录下的attachment.txt文件中. */
}
?
?>

你也许还要对上传文件的大小进行限制,那么你可以通过filesize函数来获取上传文件的大小,进行判断后做进一步处理,这具体就不在这将了,自己去折腾吧。

?

热点排行