VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • PHP的文件上传处理验证示例

文件上传中有一块非常重要的就是安全验证了,如果验证不合理就很容易给一些人把此利用上传非常的黑客文件了,那么对于新学php新手文件上传验证有多了解呢?如果不懂可以看看本文章.

最近遇到一个事,把自己坑了好久,我想说说我开始的想法,PHP的上传机制封装的很完全,基本几行代码就能实现,他的实现流程是这样的:

UPLOAD到文件到临时目录中?>使用move_uploadde_file()到指定的目录

这就是PHP上传流程,或者你在中途再进行一些验证,例如判断是不是通过upload方式提交的文档,或者文件的扩展是不是我们允许的等等一系列验证,我给出简单的代码也算是抛砖引玉了.

  1. $targetFolder = '/uploads'// 定义根目录 
  2.  
  3. if (!emptyempty($_FILES)) { 
  4.  
  5.     $tempFile = $_FILES['Filedata']['tmp_name']; 
  6. //开源软件:phpfensi.com 
  7. if(is_uploaded_file($tempFile)) 
  8.  
  9.  
  10.     $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder
  11.  
  12.     $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name']; 
  13.  
  14.     $fileTypes = array('jpg','jpeg','gif','png'); // 允许的后缀扩展 
  15.  
  16.     $fileParts = pathinfo($_FILES['Filedata']['name']); 
  17.  
  18.     if (in_array($fileParts['extension'],$fileTypes)) { 
  19.  
  20.         move_uploaded_file($tempFile,$targetFile); 
  21.  
  22.         echo '1'
  23.  
  24.     } else { 
  25.  
  26.         echo '非法上传文档.'
  27.  
  28.     } 
  29.  
  30. }else 
  31.  
  32.  
  33.    echo "非法上传文件"
  34.  
  35.  

上面的这种方式基本就满足了文件上传,但我需要的不是这样的.

上传功能

需求:先点击上传文档,然后选择上传文件,JS上传后会返回一个值,显示当前时间戳问名称的文件在文档名称这个框框中.

然后点击提交后,提交表单,服务器处理提交的表单,对上传的文件进行重命名,问题也随之而来了,服务器是IIS的,然后它是用的映射的方式实现的虚拟跟目录.

这样的话$_SERVER[‘DOCUMENT_ROOT’]就不在PHP站点的根目录,虽然完成了上传的功能,但无法下载这个文件,从服务器的安全考虑,还是打算把文件放在PHP站点内.

然后我就陷进了一个思维局限中.

再仔细想一想:为何我不用实现PHP的上传机制的方式在重复一次,PHP不是将文件先放到临时目录里面吗?然后我为嘛假设JS上传成功后的目录也是一个临时目录,然后在再一次提交表单的时候进行文件复制,到指定的目录这样就完成了需要的功能.

PHP有一个文件复制函数Copy(); 然后在配合rename()函数,这样就可以完成上传后文件的第二次移动和重命名了.

注意:在window平台下如果复制一个零字节的文件,copy() 将返回 FALSE,但文件也会被正确复制.

然后PHP在文件处理上,积极的参考了Liunx的文件处理机制,PHP的文件操作效率,这跟I/O对写和操作系统有关.

总结:其实解决问题的方式很多,而且不要给自己画圈从而限定自己的思维.

 



出处:http://www.phpfensi.com/php/20150413/9224.html


相关教程