VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • PHP单文件上传原理及上传函数的封装操作示例

这篇文章主要介绍了PHP单文件上传原理及上传函数的封装操作,结合实例形式详细分析了php文件上传的原理、步骤及相关函数封装操作技巧,需要的朋友可以参考下

本文实例讲述了PHP单文件上传原理及上传函数的封装操作。分享给大家供大家参考,具体如下:

表单:

0.php:

  1. <!doctype html> 
  2. <html> 
  3. <head> 
  4. <meta charset="utf-8"> 
  5. <title>无标题文档</title> 
  6. </head> 
  7. <body> 
  8. <form action="000.php" method="post" enctype="multipart/form-data"> 
  9. 请选择您要上传的文件<input type="file" name="myfile"/> 
  10. <input type="submit" value="上传文件"/> 
  11. </form> 
  12. </body> 
  13. </html> 

单文件上传函数的封装:

00.php:

  1. <?php 
  2. //单文件上传函数的封装 
  3. //文件上传原理:将客户端的文件上传到服务器端,再将服务器端的临时文件移动到指定目录即可。 
  4. //文件的方向:客户端——>服务器(临时文件)——>指定目录,当文件进入服务器时它就是临时文件了,这时操作中要用临时文件的名称tmp_name。 
  5. //在客户端设置上传文件的限制(文件类型和大小)是不安全的,因为客户能通过源代码修改限制,所以在服务端这里设置限制。 
  6. //设置编码为UTF-8,以避免中文乱码 
  7. header('Content-Type:text/html;charset=utf-8'); 
  8. //通过$_FILES接收上传文件的信息 
  9. //$fileInfo = $_FILES['myFile']; 
  10. function uploadFile($fileInfo,$uploadPath='uploads',$flag=true,$allowExt=array('jpeg','jpg','png','gif'),$maxSize = 2097152){ 
  11. //判断错误号,只有为0或者是UPLOAD_ERR_OK,没有错误发生,上传成功 
  12.     if($fileInfo['error']>0){ 
  13.         //注意!错误信息没有5 
  14.         switch($fileInfo['error']){ 
  15.             case 1: 
  16.                 $mes'上传文件超过了PHP配置文件中upload_max_filesize选项的值'
  17.                 break
  18.             case 2: 
  19.                 $mes'超过了HTML表单MAX_FILE_SIZE限制的大小'
  20.                 break
  21.             case 3: 
  22.                 $mes'文件部分被上传'
  23.                 break
  24.             case 4: 
  25.                 $mes'没有选择上传文件'
  26.                 break
  27.             case 6: 
  28.                 $mes'没有找到临时目录'
  29.                 break
  30.             case 7: 
  31.                 $mes'文件写入失败'
  32.                 break
  33.             case 8: 
  34.                 $mes'上传的文件被PHP扩展程序中断'
  35.                 break
  36.         } 
  37.         exit($mes); 
  38.         return false; 
  39.     } 
  40.     $ext=pathinfo($fileInfo['name'],PATHINFO_EXTENSION); 
  41.     //$allowExt=array('jpeg','jpg','png','gif'); 
  42.     //检测上传文件的类型 
  43.     if (! in_array ( $ext$allowExt )) { 
  44.         exit ( '非法文件类型' ); 
  45.     } 
  46.     //检测上传文的件大小是否符合规范 
  47.     //$maxSize = 2097152;//2M 
  48.     if($fileInfo['size']>$maxSize){ 
  49.         exit('上传文件过大'); 
  50.     } 
  51.     //检测图片是否为真实的图片类型 
  52.     //$flag=true; 
  53.     if($flag){ 
  54.         if(!getimagesize($fileInfo['tmp_name'])){ 
  55.             exit('不是真实的图片类型'); 
  56.         } 
  57.     } 
  58.     //检测是否是通过HTTP POST方式上传上来 
  59.     if (! is_uploaded_file ( $fileInfo ['tmp_name'] )) { 
  60.         exit ( '文件不是通过HTTP POST方式上传上来的' ); 
  61.     } 
  62.     //$uploadPath='uploads'; 
  63.     //如果没有这个文件夹,那么就创建一个 
  64.     if(!file_exists($uploadPath)){ 
  65.         mkdir$uploadPath, 0777, true); 
  66.         chmod$uploadPath, 0777 ); 
  67.     } 
  68.     //新文件名唯一 
  69.     $uniName = md5 ( uniqid( microtime(true),true) ).'.'.$ext
  70.     $destination = $uploadPath.'/'.$uniName
  71.     //@符号是为了不让客户看到错误信息 
  72.     if(! @move_uploaded_file($fileInfo['tmp_name'], $destination )){ 
  73.         exit('文件移动失败'); 
  74.     } 
  75.     //echo '文件上传成功'; 
  76.     //return array( 
  77.     //    'newName'=>$destination, 
  78.     //    'size'=>$fileInfo['size'], 
  79.     //    'type'=>$fileInfo['type'] 
  80.     //); 
  81.     return $destination
  82. ?> 

服务端操作上传的文件:

000.php

  1. <?php 
  2. header('content-type:text/html;charset=utf-8'); 
  3. include_once '00.php'
  4. $fileInfo=$_FILES['myfile']; 
  5. $allowExt=array('jpeg','jpg','png','gif','html','txt');//修改允许上传文件的类型,为('jpeg','jpg','png','gif','html','txt'),也可以增加新的,如pdf,pptx等等 
  6. $newName=uploadFile($fileInfo,'imooc',false,$allowExt);//修改上传保存的文件夹为本地的'imooc',如果没有这个文件夹,那么就创建一个;//'false'参数:不要检查上传的文件是否为真实的图片,因为要允许上传除开图片类型外的其他类型文件,如html、txt 
  7. echo $newName
  8. ?> 

最后,PHP的文件上传还有更智能的,功能更健全的  PHP单文件、多个单文件、多文件上传函数的封装。

 

出处:http://www.phpfensi.com/php/20211213/19068.html


相关教程