admin 管理员组

文章数量: 1087139


2024年4月29日发(作者:delphi linux)

30・ (总0758)PHP开发环境下文件上传的原理与实现 2013年第10期 

文章编号:1003—5850(2013)10—0030—03 

PHP开发环境下文件上传的原理与实现 

李斌 

030024) (国营大众机械厂第一研究所,太原

要:PHP是目前流行的Web应用程序开发技术。对于一个完整的Web应用程序,文件上传是其基本功能之 

首先对PHP做 简要介绍,详细论述了在PHP开发环境下文件上传的原理及实现方法,并给 了对上传文件的格 

关键词:PHP,上传 

中图分类号:TP393.093 文献标识码:A 

式类型及大小进行限制的方法。 

The Principle and Realization 0f File Upload in PHP Development 

1EnVlr0nment n ● 

LI Bin 

(The First Research Institute ofthe State—Owned DazhongMachinery Factory,Taiyuan 030024.China) 

Abstract:PHP is a popular Web application development technologies at present.For a complete 

WEB application,file upload is one of the basic functions.This paper makes brief introduction of PHP at 

irst,fmainly discusses the principle and realization of file upload in PHP development environment,and 

gives the method of limitting the type and the size of the uploaded files. 

Key words:PHP,upload 

引 言 

自20世纪末期以来,计算机网络技术迅猛发 

展,并得到快速推广和普及。随着我国信息化建设 

步伐的加快,利用网络来进行资源共享和信息交流 

的观念更是深入人心。各类Web应用程序也应运 

而生。在基于B/S结构的Web应用程序开发技术 

中,PHP作为一种开源、独立于架构且面向对象的 

开发语言得到了广泛的应用。 

文件上传是Web应用必不可少的功能之一,用 

实现方法,和对上传文件加以必要限制的方法。 

1 PHP简介 

PHP(Hypertext Preprocessor的缩写)是一种运行 

于服务器端并完全跨平台的嵌入式脚本编程语言。 

Internet的盛行带动了PHP语言的应用得以快速发 

展;PHP因其功能强大、可扩展性强、运行速度快及 

开放性好而成为网站开发的首选语言之一。 

PHP吸取了多种程序语言的优点,它具有跨平 

台PHP具有跨平台、支持数据库、内置功能完善、支 

户可根据情况将各类文件上传至服务器,用于显示或 

保存。例如邮件系统中上传邮件附件、BLOG系统中 

上传个人图片、视频网站中上传图片和视频等。同时, 

开发者可对所上传文件的格式类型、容量大小等做出 

限制。本文将讨论在PHP系统中文件上传的原理及 

持XML、运行速度快、面向对象等特点。 

2 PHP文件上传的原理 

PHP支持HrITI1P POST方式的文件上传,可以接 

受IE、Netscape Navigator浏览器以H1TrP POST方式 

收稿日期:2013—06—26,修回日期:2013一O8—28 

料 作者简介:李斌,男,1978年生,丁程师,本科,研究方向:网络编程与网络管理。 

第26卷第l0期 电脑开发与应用 (  ̄0759) ・31・ 

上传的各类文件。POST方式文件上传是结合form表 

单实现的。在表单中必须设置enctype属性,该属性 

表示表单能够接受的文件类型,否则无法行上传。表 

据大小的上限,包括上传文件和其他表单数据元素。 

t 

(6)memory

limi

_

允许脚本使用的内存上限,默认为l6 M。该值应 

单的methord属性需设置为“post”。代码如下: 

<form enctype=”muhipart/form-data’’method=’post’ac— 

tion=’unpload.php’> 

<input type=’file’name=’uploadfile’size=’25’> 

<input type=’submit’value=’上传’> 

</form> 

当用户选定文件后,单击“上传”按钮提交表单, 

浏览器将表单中所有元素中的数据以POST方式传 

递给服务器,包括file类型input元素中指定的上传 

文件,上传文件被保存在由php.ini中upload_tmp_dir 

参数指定的I临时目录中,同时,上传文件的信息被传 

递给表单action属性指定的服务器脚本。 

对于PHP脚本,表单传递的数据中,一般元素中 

的数据被保存在S_POST预定义数组中,以表单元素 

的名称作为数组元素索引名称,而上传文件的信息被 

保存在¥一FILES预定义数组中。 

2.1预定义数组S_FILES 

¥_FILES数组包含了客户端通过POST方式上 

传的文件的相关信息。它是一个二维数组,其中每个 

元素即为一个包含上传文件基本信息的数组,其中包 

含了文件的以下信息: 

Name:文件名称、type:文件类型、tmp_name:在临 

时目录中的文件名、error:是否出错、size:文件的大 

小。 

2.2影响文件上传的php.ini设置 

在PHP配置文件php.ini中,以下参数会对文件 

上传产生影响。 

(1)file_uploads 

是否允许HTrP上传,默认为允许。 

(2)upload_tmp_dir 

保存上传文件的临时目录。默认没有设置,采用 

系统环境变量中定义的系统临时目录。该目录必须 

是所有用户可写的目录。 

(3)upload_max_filesize 

允许上传的最大文件大小,默认情况下为2 M, 

当要上传的文件大于此值时,文件不会上传。 

(4)max_execution—time 

每一个脚本允许的最大执行时间,单位为S,默 

认为30 S。如果该值设置过小,则当对上传文件进行 

处理时,时间可能会超过该值。该值只指脚本本身执 

行花费的时间。 

(5)post_max_size 

表单以POST方式传递数据时,允许传递的最大 

数据。该值应比upload—max_filesize设置值大,因为 

post_max_size是指表单中所有元素中的数据的总数 

该比post_max_size大。 

3 PHP文件上传的实现 

在PHP中,当用户以POST方式提交表单后,文 

件被上传到服务器并保存在临时目录中,需要PHP 

服务器端脚本对文件进行进一步处理,一般是要将 

文件从临时目录移动到指定的目录中。 

PHP中提供了两个专门用于处理上传文件的函 

数:is_uploaded_file()函数和move_uploaded_file()函 

数。 

3.1 is

_

uploaded

_

file()函数 

函数原型:Bool is_upload_file(stirng iflename) 

Is

_

uploaded

_

file()函数用于检查文件是否是通 

过HTrP POST方式上传到服务器的文件。 

如果文件filename是上传文件,则返回TRUE, 

否则返回FALSE。 

3.2 move

_

uploaded

_

file()函数 

函数原型:h00l move_uploaded_file(stirng file— 

name,stirng destination) 

该函数首先检查filename是否是由HTrP POST 

上传机制上传的合法文件。如果是,则将文件移动到 

指定路径,如果文件不合法,则不进行移动,函数返回 

false。如果filename是合法文件,但无法成功移动,则 

返回false。 

参数destination指定新的位置,这个参数必须包 

括文件名,否则函数返回flase。文件名可以和原文件 

名相同,也可不同,在移动文件时,可为上传文件指定 

新的文件名。当destination指定的文件已经存在时, 

自动将原文件覆盖。 

3.3实现示例 

例如,当用户通过前述的表单以POST方式提交 

后,文件上传至临时目录,PHP服务器端脚本将进行 

移动及命名处理。示例代码如下: 

< 

If(S_FILES)//判断表单是否提交 

{ 

¥dest="../upload/”; 

¥file_name=¥dest.¥FILES[‘uploadfile’ name’l; 

If (move—uploaded_file (¥一FIELS 【‘upload_file’】 

【‘tmp_name’】,Stile—name)) 

f 

Echo”文件上传成功!”; 

】 

Else 

f 

32・ (总0760)PHP开发环境下文件上传的原理与实现 2013年第l0期 

Echo“文件上传失败!”; 

} 

l 

> 

前述表单上传文件并提交后,实现如下: 

< 

¥filesize=¥一FILES[‘uploadfile’Ⅱ‘size’】; 

If(¥filesize>2000000) 

{ 

4 对上传文件的限制 

4.1对上传文件格式的限制 

Echo“上传文件大小超过限制,不得上传!”; 

l 

> 

在Web应用程序中,有时需要对上传文件的类 

型加以限定,文件类型可以通过文件的扩展名加以判 

断。例如:在进行文本说明性文字时,可将上传文件 

限制以”.txt”为扩展名的文件。 

当表单提交后,主要通过¥一FILES[I获取文件的 

名称,其中包含扩展名。然后利用strtr()函数截扩展 

名并加以比对。 

< 

5 结束语 

文件上传功能是大多数网站的基本功能。本文 

主要论述了在PHP环境下,文件上传的原理及实现, 

并阐述了如何对上传文件加以必要的限制。对于多 

¥name=¥一FILES[‘uploadfile’】r name’】; 

¥type=strtr(¥name,”.”);/,获取扩展名 

If(¥type!=".txt”) 

( 

文件上传,可在表单中增加file类型的input控件,同 

时在服务器端脚本处理时,可利用¥一FILES[]二维数 

组的特性,使用循环对数组遍历后,对上传的文件逐 

操作来实现。本文所讲述的方法可广泛应用于各 

类用PHP开发的Web应用程序和B/S架构的管理系 

统中,具有很强的通用性和可移植性。 

Echo“文件格式不正确!”; 

} 

> 

参考文献: 

【l】陈争航.PHP 5+MYSQL5WEB应用开发宝典【M】.北京:电 

子丁业出版社,2008. 

4.2对上传文件大小的限制 

为了确保能够充分利用服务器的空间,禁止上传 

过大的文件,给网站维护带来麻烦,就需要对上传文 

件的大小加以限制。 

例如:要求限制上传文件大小不得超过2 MB,用 

[2】许登旺,邹天思.PHP程序开发宝典【M】.北京:人民邮电出 

版社,20o7. 

(上接第29页) 

(1)身份验证:当对XML加密时,任何人都可以 

用公钥对文档加密,但仅仅是签名者能够身份验证; 

(2)校验:加密和签名都提供加密/签名后文档 

的校验,对加密来说,需要接受者的私钥来解密;对签 

名来说,需要发送者的公钥来校验谁是真的发送者; 

(3)完整性:加密和签名都保证文档的完整性, 

因为被签名或加密后,无法篡改操作文档; 

密、先加密再签名。先签名后加密,这保证了签名是 

保护的,但与此同时,为了校验签名总是需要解密消 

息会占用大量的操作处理。先加密后签名,在这方法 

中,如果数据被篡改,由于发送者身份是解密的关键 

词,所以发送者身份被发布给公众,立即知道发送者 

即是篡改者。 

参考文献: 

(4)机密性:XML签名不保证数据的机密性,因 

为数据仍是明文,而XML加密,数据转换为密文的形 

式; 

(5)不可否认性:XML签名提供不可否认性保 

证,因签名关键词的使用,发送者或签名者不能否认 

签署过该文档。 

实际上,将XML签名和XML加密二者组合后, 

提供安全的Web服务,有两个方法:先签名然后加 

【1】王迤冉,陈劲松.基于SOAP协议的Web Services安全性研 

究与实现[J】.煤炭技术,2011,30(6):171—173. 

I2王21曦,张斌,杨艳,等.基于IBAS的SAML路径验证 

协议[J】.计算机T程,2012,38(10):18—21. 

【3】武晓娟,彭新光,李晓燕.Web服务安全风险评估及其辅助 

T具设计[lJ】.电脑开发与应用,2008,21(5):67—70. 


本文标签: 上传 文件 表单 加密 签名