




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PHP文件上传机制,与文件系统和服务器的交互,文件上传 使用目录函数 与文件系统的交互 使用程序执行函数 与环境变量交互,文件上传,在B/S程序中文件上传已经成为一个常用功能。其目的是客户可以通过浏览器(Browser)将文件上传到服务器(Server)上的指定目录。 PHP中文件上传的基础知识 表单提交 对文件的操作,何为文件上传? 传统上的HTML表单只能提交普通文本内容或数值信息。如: 这种方法无法实现某些系统功能: 如:带附件的电子邮件等。 为了满足传递文件信息的需要:HTTP协议实现了文件上传机制,从而可以将客户端的文件通过自己的浏览器上传到服务器上指定目录存放。,HTML规范规定上
2、传文件时表单头必须使用 文件上传 上传文件:提交: ,显示在浏览器上效果如下:,POST方法: 表单最常用的功能,向目标页面传递变量,我们在上传文件的时候,会在表单中设置相应的属性,来完成文件的传递 注意几个特征属性: enctype=multipart/form-data 这样服务器就会知道,我们要传递一个文件,这样服务器可以知道上载的文件带有常规的表单信息。 MAX_FILE_SIZE 控制最大的传递文件的大小(字节) ?真的可以控制吗 设置浏览器浏览按钮效果,MAX_FILE_SIZE的值只是对浏览器的一个建议,实际上可以被简单的攻击,我们不要对浏览器端的限制寄予什么希望,它只能避免君子
3、的错误输入,对于普通的web工程师都会跳过浏览器端的限制。 但是最好还是在表单上使用MAX_FILE_SIZE,因为对于善意的错误我们可以帮助纠正,避免用户花费很长的时间等待大文件上传,传了半天,才发现无法上传。,表单提交以后,数据被发送给action的属性指定的PHP程序,这时表单已经完成了它的任务。 静态表单与程序脚本之间的沟通仅仅通过action属性,因此表单可以在任何地方被伪造,如果您的程序完全相信表单提交的数据,就会被 我们在服务器端的php.ini中设置对表单传递的数据进一步判断 file_uploads = On /Off 是否允许文件上传 upload_max_filesize
4、 = 2M 上传的文件的最大大小 post_max_size = 8M POST 数据所允许的最大大小 表单传递的数据,文件只是其中的一部分 所以设置时,upload_max_filesize应该小于post_max_size,超级全局数组$_FILES PHP程序中,需要处理的上传数据保存在全局数组中$_FILES(超级全局数组) 保存$_FILES数组中的元素,将HTML表单的type=file标记的名称name=userfile 存放在数组中。 1:存储在$_FILESuserfilename中的值就是: 客户端文件系统的文件的名称 2:存储在$_FILESuserfiletype中的值
5、就是: 客户端传递的文件的类型,超级全局数组$_FILES 3:存储在$_FILESuserfilesize中的值就是: 文件的字节的大小 4:存储在$_FILESuserfiletmp_name中的值就是: 文件被上传后在服务器存储的临时全路径 5:存储在$_FILESuserfileerror中的值就是: 文件上传的错误代码php 4.2以后增加的功能,存储在$_FILESuserfileerror中的值,在$_FILESuserfileerror中返回的错误代码是在PHP4.2.0版本中引入的。具体如下: 值为0:表示没有发生任何错误。 值为1:表示上载文件的大小超出了约定值。文件大小的
6、最大值是在PHP配置文件中指定的,该指令是:upload_max_filesize。 值为2:表示上载文件大小超出了HTML表单的MAXFILESIZE元素所指定的最大值。 值为3:表示文件只被部分上载。 值为4:表示没有上载任何文件。,文件上传后的临时存放目录 上传的文件被放置到服务器端临时目录:/tmp目录里面命名为一个唯一的,随机生成的临时文件名。注:该文件在程序执行完后将自动被删除掉。在删除前可以像本地文件一样操作。 /tmp目录是默认的上传临时文件存放地点,如果需要更改这个目录:可以编辑/etc/php.ini 文件 File Uploads 段的upload_tmp_dir 属性值
7、。,上传后的文件处理 使用is_uploaded_file( )函数来检查此文件是否是上传文件。 应该使用move_uploaded_file( ) 函数将存放在临时目录下的上传文件拷贝出来。 当配置文件php.ini的register_globals属性被设置成on的情况 将生成全局变量:$myfilename等,文件上传后的处理页面 上传文件. 上传文件. 0) echo 上传错误: ; switch ($_FILESuserfileerror) case 1: echo 上传文件大小超出了PHP配置文件中的约定值:upload_max_filesize; break; case 2: e
8、cho 上传文件大小超出了表单中的约定值: max_file_size; break; case 3: echo 文件只被部分上载; break; case 4: echo 没有上传任何文件; break; exit; ,if ($_FILESuserfiletype != text/plain) echo 问题: 文件不是一个文本文件。; exit; $upfile = ./uploads/.$_FILESuserfilename; if (is_uploaded_file($_FILESuserfiletmp_name) /判断是否为上传文件 if (!move_uploaded_file
9、($_FILESuserfiletmp_name, $upfile)/移动文件 echo 问题: 不能将文件移动到指定目录。; exit; else echo 问题: 上传文件不是一个合法文件: ; echo $_FILESuserfilename; exit; echo 文件上传成功!; ? ,当需要上传多个文件的情况,有两种实现的解决方法:使用不同的表单元素使用数组格式的表单元素,使用目录函数,在用户上载一些文件之后,能够看到所上传的文件,并可以操作这些文件的内容对他们来说是非常必要的。PHP提供了一系列目录函数与文件系统函数,他们都是实现此功能的非常有用的工具。 从目录读取: opend
10、ir-打开目录句柄 resource opendir ( string path , resource context ) closedir-关闭目录句柄 void closedir ( resource dir_handle ) readdir-从目录句柄中读取条目 string readdir ( resource dir_handle ), 浏览上传目录 浏览 上传目录是: $current_dir; echo 上传列表:; while ($file = readdir($dir) echo $file; echo ; closedir($dir); ? ,创建和修改目录 mkdir-新
11、建目录 bool mkdir ( string pathname , int mode ) 如:mkdir(/path/to/my/dir, 0700); rmdir-删除目录 bool rmdir ( string dirname ) 注意:权限问题,有可能不成功。,13.3与文件系统的交互,除了能够查看并获得与目录有关的信息,我们还可以获得Web服务器上文件的信息,并且与这些文件进行交互。前面我们已经了解了如何读文件和写文件。我们还可以使用许多其他的文件函数。 获取文件信息: 如下页实例:文件状态函数和他们的运行结果, 显示上传目录下文件的相关属性信息 Details of file: .
12、$file.; $file = $current_dir.$file; echo File data; echo File last accessed: .date(j F Y H:i, fileatime($file).; echo File last modified: .date(j F Y H:i, filemtime($file).; $user = posix_getpwuid(fileowner($file); echo File owner: .$username.; $group = posix_getgrgid(filegroup($file); echo File gro
13、up: .$groupname.;,echo File permissions: .decoct(fileperms($file).; echo File type: .filetype($file).; echo File size: .filesize($file). bytes; echo File tests; echo is_dir: .(is_dir($file)? true : false).; echo is_executable: .(is_executable($file)? true : false).; echo is_file: .(is_file($file)? t
14、rue : false).; echo is_link: .(is_link($file)? true : false).; echo is_readable: .(is_readable($file)? true : false).; echo is_writable: .(is_writable($file)? true : false).; ? ,使用程序执行函数,现在,我们要将视线从文件系统函数转移到能够运行服务器命令的函数。有4种主要的技术在Web服务器上执行命令。这些技术都非常相似,但有微小区别。 exec( ) 函数可以将要执行的命令作为参数。 passthru( ) 结果直接输出显示到浏览器。 System( )也是直接输出显示到浏览器,但有返回值 Bakdtichs 实际上是可执行的超作符。结果返回。,; exec(ls -la, $result); foreach ($result as $
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年汽车维修工分析与判断能力试题及答案
- 2024药理学考试的策略选择试题及答案
- 2025年初中人教九年级化学上册第六单元 课题2 《二氧化碳的制取》说课稿
- 2025年化学材料:灌浆料合作协议书
- 深入探讨统计学主题2024年考试试题及答案
- 2024年宠物营养师考试必考技巧及试题答案
- 2024年公务员考试认知能力评估试题及答案
- 工商实习报告(4篇)
- 2024年二手车市场政策趋势试题及答案
- 2024年食品质检员备考必读资料
- (3月省质检)福建省2025届高三毕业班适应性练习卷英语试卷(含答案)
- 专业网格员测试题及答案
- 2025年上半年贵州黔东南州各县(市)事业单位招聘工作人员1691人笔试易考易错模拟试题(共500题)试卷后附参考答案
- 湖南省长沙市雅礼教育集团2024-2025学年高一上学期期末考试英语试卷含答案
- 2025年广东深圳高三一模英语试题及词汇解析
- 钕铁硼项目可行性分析报告(模板参考范文)
- 甘肃开放大学2024年《信息技术与信息管理》形考作业1-4答案
- 仓库主管每周工作总结范文
- 《阻燃材料与技术》课件 第7讲 阻燃橡胶材料
- DB13-T 5996-2024 公路基层病害聚合物注浆处治技术规程
- 食品安全规章制度目录清单
评论
0/150
提交评论