PHP文件上传——纯粹使用PHP以及借助Zend框架
2014-03-22 00:01
447 查看
在PHP中最通用和简单的文件上传方式便是通过表单提交数据,本文提供纯粹使用php脚本文件处理表单文件上传以及借助Zend框架处理表单文件上传。
(1)通过php.ini 配置php以配合文件上传,一些常见指令如下:
file_uploads:启用或关闭PHP的文件上载功能。默认情形下会被启用,即设置为:ON;
upload_max_filesize:定义上载文件的最大尺寸。在默认情形下被设置为2M;
upload_tmp_dir:定义了PHP临时存储上传文件的目录,被上传的文件会临时存放于服务器的该路径下,可以由开发人员指定。在Xmapp中,该路径是/xmapp/tmp;
post_max_size:设定POST 数据所允许的最大大小。默认设置为2M。
max_execution_time:定义了PHP脚本的执行时间,默认为30秒。因此对于尺寸较大,需要较长时间才能传输到服务器的文件来说,可以考虑其设置为较大的值。
(2)在前端html文件中创建文件上传的表单
无论是在Zend框架中,还是普通的使用PHP的脚本文件,表单的设计基本上没有区别,只是在使用Zend Framework时,可以不用为form表单设置Action属性,框架会自动将表单提交到对应的Action();在不使用Zend框架的情况下,需要为表单设定Action属性值,即要提交的到php文件。
如下便是简单的文件上传的表单程序片段,在zend框架下,第一行可以被
<form enctype="multipart/form-data" method="post">
替代。
<form enctype="multipart/form-data" method="post" action="/admin/upload.php"> <p> Select File<br /> <input type="file" name="file" id = "file" size="40" /> </p> <p> <input type="submit" name="submit" class="submit" value="Upload Video" /> </p> </form>
其中表单属性中的enctype属性指定表单上传时的编码方式,该程序片段中使用的multipart/form-data是指不对表单进行编码,在表单中有文件上传时必须使用该属性;
file类型的input输入框用来在客户端文件系统中选择特定的文件进行上传;
之后提交类型的input输入框在点击时提交表单自动将表单提交到对应的php脚本文件(Action指定)或者对应控制器下的对应Action(Zend框架)。
(3)使用普通的php文件处理通过表单提交的文件:
使用php的全局数组$_FILES来实现对上传文件的处理
具体见:点击打开链接
有以下几点需要注意:
A、使用$_FILES["file"]["error"] - 由文件上传导致的错误代码,常见的情况包括:
UPLOAD_ERR_OK :值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE :值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL 值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE 值:4; 没有文件被上传。 值:5; 上传文件大小为0.
B、该文件被保存在临时文件夹中,如果在对应的脚本文件中不进行处理,在离开脚本时该临时文件会被删除
C、最基本的处理方式是经过一些列的检查之后,将该文件使用move_uploaded_file()将文件转移到特定的文件夹,具体见:点击打开链接
(4)使用Zend框架处理表单提交的文件:
如下是最基本的处理上传文件的代码片段:
if ($this->getRequest()->isPost()) { $upload = new Zend_File_Transfer_Adapter_Http(); $upload->setDestination($dir); if ($upload->receive()) { echo "The file has been uploaded!"; } }
其中首先调用Zend_File_Transfer类组件的处理通过表单提交数据的适配器;
之后设置文件的最终上传地址,直接传出一个dir地址即可;
通过适配器->receive() 接收文件;
同时可以为适配器添加addValidator来对上传进行一定和设置,或者添加addFilter实现对文件的重命名
同时可以使用getFileInfo()获取上传文件的信息
$adapter = new Zend_File_Transfer_Adapter_Http(); $adapter->setDestination($dir);//设置上传文件的目的路径 $adapter->addValidator('Extension',false,'gif,jpeg,png');//设置上传文件的后缀名 $adapter->addValidator('Count',false,array('min'=>1,'max'=>5));//设置上传文件的个数 $adapter->addValidator('ImageSize',false,array('minwidth'=>0, 'maxwidth'=>1300,'minhight'=>0, 'maxhight'=>1300));//设置上传图片的大小 $adapter->addValidator('FilesSize',false,array('min'=>'10KB','max'=>'1024KB'));//设置上传文件的大小 $fileInfo = $upload->getFileInfo();//获取文件信息 foreach ( $fileInfo as $file=>$info ){ if( $upload->isValid($file) ){//检查是否合法 echo $file.'<br/>'; //添加过滤器来修改上传文件的名称 $upload->addFilter('Rename',array('target'=>time().mb_convert_encoding($info['name'],'gbk','utf-8'),'overwrite'=>true),$file); $upload->receive($file); }else { //对不能上传的文件删除错误信息 echo $upload->getMessages(); } }
相关文章推荐
- 使用php完成一个用户注册以及管理的demo(php实现单文件与多文件的上传)
- 使用HttpClient进行POST和GET请求以及文件上传和下载
- 七牛php-sdk使用-文件上传
- [volley文件上传]Android中自定义MultipartEntity实现文件上传以及使用Volley库实现文件上传
- 使用PHP实现文件上传
- 简单快速PHP上传文件使用方法总结
- extjs实现简单的多文件上传(不借助任何插件),以及包含处理上传大文件的错误的各种处理办法
- 关于 HTML5 的文件上传处理,兼容,以及 BLOB 对象的使用
- php使用ereg验证文件上传的方法
- php实现SAE上使用storage上传与下载文件的方法
- 在php.ini中设置表单上传文件的大小,以及获取设置的值的方法 .
- PHP基础之在Dreamweaver下使用PHP实现文件上传
- windows下使用IIS配置的PHP无法上传文件的解决方法
- PHP修改上传大文件以及应当注意的事项----记录地理所joomla后台更改
- PHP使用curl请求实现post方式上传图片文件功能示例
- C# 使用HttpWebRequest通过PHP接口 上传文件
- 使用curl对文件上传关于php版本区别
- linux 下借助CRT 使用sz rz 进行上传和下载文件
- 使用PHP和HTML5 FormData实现无刷新文件上传教程
- #舍得Share#php开发笔记-使用curl查看网页源码/自动跳转/显示头信息/显示通信过程/发送表单信息/文件上传/Referer字段/User Agent