用PHP实现文件上传

2016-02-19 12:38 20 1 收藏

下面请跟着图老师小编一起来了解下用PHP实现文件上传,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - Web开发 】


在WebDev站点上经常看到的一个问题是关于文件上传的。在这篇文章里我将解释如何用PHP实现文件
上传。 设计上传表格

我们主要的目标是完成文件从本地计算机上传到服务器上去。为了做到这一点,我们需要做一个表
格,允许用户选择一个文件并可以提交它。下面是一个例子:

HTML
HEAD
TITLE文件上传表格/TITLE
/HEAD
BODY
TABLE
FORM ENCTYPE="multipart/form-data" NAME=MyForm
ACTION=submit.php3
METHOD="POST"
TRTD选择上传文件/TDTDINPUT NAME="MyFile"
TYPE="File"/TD/TR
TRTD COLSPAN="2"INPUT NAME="submit" VALUE="上传"
TYPE="submit"/TD/TR
/TABLE
/BODY
/HTML

注意表格中的ENCTYPE="multipart/form-data"部分。这个一定不能错,否则服务器将不知道你在上
传文件。

设计上传程序

现在我们已经完成了前台部分,让我们再仔细地考虑后台是如何接收文件并保存它到我们指定的目
录下去。下面就开始用PHP了。这是submit.php3的程序:

?
If($MyFile != "none") {
copy($MyFile,"/home/berber/$MyFile_name");
unlink($MyFile);
}
else {
echo"你没有上传任何文?;
}
?

不管你信不信,这就是整个处理过程。我们在程序中所做的就是:

1. 检查是否一个文件已经上传到服务器,通过If($MyFile != "none");
2. 拷贝文件到指定位置。
3. 删除临时文件。

当你按下了提交按钮后,文件将会从你的计算机上传到服务器的临时目录下。在临时目录下的文件
名为一个临时文件。应该使用file字段的name值来访问它,在这里为$MyFile。真正的文件名使用file
字段的name值加上"_name"来访问它,在这里为$MyFile_name。使用copy()函数,将临时文件$MyFile拷
贝到指定目录下,拷贝后的文件名为$MyFile_name。完成后不要忘了删除临时文件,不然你会有许多你
不想要的文件。

设置文件名

一个可能让程序员睡不着觉的事情就是试图改变file字段的VALUE属性的值。并不是很多人知道它
是不可能的。尽管W3C说可以,但实际上,象IE和Netscape都不允许设置VAUE属性的值。听上去有点可
笑,为什么我不能设置一个初始值,这样让用户使用起来更方便呢?如果你那样做,那你就会发现你带
来了一个安全上的漏洞。可以设想一下,你登录到我的网站,我可以改变一个表格中的file字段的值。
那么有许能阻止我把你的/etc/passwd文件上传呢?更进一步的,我不需要你按下提交按钮,我可先设
置file字段的值,然后通过一段JavaScript程序来模拟提交动作...哇呜...我可以处理你机器上的任何
文件了。因为这个原因,浏览器简单地把INPUT标记中的file字段的VALUE字段给忽略了。

限制文件大小

另一个酷的特性是限制上传文件的大小选项。只要增加一个INPUT标记就可以了:

INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000"

这个将不允许用户上传超过100KB的文件。

显示文件大小

为了显示文件大小,可以通过file字段name属性值加上"_size"这个变量来访问。在我们的例子中
就是使用$MyFile_size。所以,如果你想告诉用户上传文件的大小,你可以象下面那样去做:

echo "You have just uploaded $MyFile_name";
echo "The size of the file is $MyFile_size";

权限

很明显你需要对目标目录的写的权限。如果一个用户用匿文上传文件,那他的用户名应该是
"bobody"。这个用户必须有对目标目录写的权限否则你可能得到一个象下面的信息:

Warning: Unable to create '/home/berber/berber.txt':
Permission denied
in /home/berber/submit.php3 on line 5

来源:https://www.tulaoshi.com/n/20160219/1601372.html

延伸阅读
标签: Web开发
这个插件支持多个文件选取功能,很不错,而且代码简单 代码如下: $("#fileUpload").fileUpload({ 'uploader': 'style/uploader.swf', 'cancelImg': 'style/img/cancel.png', 'folder': '/mbs/fileUpload', 'script': '/mbs/FileUpload', 'buttonText': 'Durchsuchen', 'fileDesc': '*.jpg;*.gif;*.png', 'fileExt': '*.jpg;*.gif;*.p...
标签: ASP
  '================================================================== ' '  用ASP实现无组件上传/下载文件 ' ' 功能简介 ' 将上传的文件数据保存到数据库中,可以处理表单中的多个上传文件的情况 ' 适用于各种数据库,使用ADO的方法连接数据库 ' 本示例中使用的是ACCESS数据库:zj.mdb ' 表:tb_img(id int(自增列),path text(255)...
VisualBasic作为一个集应用程序开发、测试、查错功能于一体的集成式开发环境,越来越受到程序员的青睐。笔者在开发某数据库维护系统的过程中,选择了VB5.0作为开发平台,Unix作为服务器端操作系统,Informix作为服务器数据库。 问题的出现 在开发该维护系统的过程中,注意到Informix数据库的字段类型CLOB填入数据时需要函数FILETOCLOB("FILEN...
标签: PHP
7. 文件上传   你可以利用PHP实现文件的上传功能,注意客户端的浏览器应该是Netscape3以上或者IE3以上的版本。同时,因为本程序与你的PHP配置文件(PHP3为php3.ini,PHP4为php.in)设置有关。在执行该程序之前请先检查您的PHP配置文件有没有做好如下的设置: 将;upload_tmp_dir该行的注释符,即前面的分号;去掉,使...
标签: Java JAVA基础
  如果你曾用VB编写文件上传的组件的话,那么用JAVA编写文件上传的JAVABEAN十分容易。 下面的例子只是一个简版 package yuanyifileup; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.PageContext; public class yuanyifileup { private ServletReque...

经验教程

818

收藏

83

精华推荐

在Struts 2中实现文件上传

在Struts 2中实现文件上传

小小橄榄枝ok

用php实现广告轮播

用php实现广告轮播

谁的立夏不轻伤

用php实现soap通讯

用php实现soap通讯

扶摇的水草

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部