PHP文件上传——纯粹使用PHP以及借助Zend框架

在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(); 
	} 
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值