English
 电子信箱
 加入收藏

  威盾防火墙 >> 新闻中心 >> 威盾新闻 >> PHP文件上传的原理及实现

 

PHP文件上传的原理及实现

威盾防火墙 2015-02-25

 

在PHP中,文件上传功能是使用PHP提供的文件函数来实现的。下面通过例子使读者直观地了解上传的原理以及程序编码的实现。

1.客户端上传

创建一个文件upload.html,这是一个最基本的上传的表单代码,代码如下:

  1. <html xmlns="undefined"> 
  2. <head> 
  3. <title>文件上传页面</title> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
  5. <meta name="description" content="文件上传页面" /> 
  6. <style type="text/css"> 
  7. body,td{font-family:tahoma,verdana,arial;font-size:11px;line-height:  
  8. 15px;background-color:white;color:#666666;  
  9. strong{font-size:12px;}  
  10. a:link{color:#0066CC;}  
  11. a:hover{color:#FF6600;}  
  12. a:visited{color:#003366;}  
  13. a:active{color:#9DCC00;}  
  14. a{TEXT-DECORATION:none}  
  15. td.irows{height:20px;background:url("index.php?i=dots") repeat-x bottom}  
  16. </style> 
  17. </head> 
  18. <body bgcolor="#FFFFFF"> 
  19. <center> 
  20.   <form enctype="multipart/form-data" method="post" name="upform"   
  21.   action=""> 
  22.     <table border="1" width="55%" id="table1" cellspacing=0> 
  23.       <tr> 
  24.         <td colspan="2"> 
  25.             <p align="center">上传文件:  
  26.         </td> 
  27.       </tr> 
  28.       <tr> 
  29.         <td width="10%"></td> 
  30.         <td width="71%"> 
  31.             <input type="hidden" name="max_file_size" value="100000">   
  32.             <input name="userfile" type="file"> 
  33.             <input type="submit" value="上传文件"> 
  34.         </td> 
  35.       </tr> 
  36.     </table> 
  37.  </form> 
  38. </center> 
  39. </body> 
  40. </html> 

在浏览器中加载upload.html文件,效果如图7.1所示。

 
图7.1  文件上传表单预览
要实现文件的上传,需要在表单标签中设置以下选项,以确保匿名上传文件的正确编码。
  1. enctype="multipart/form-data" 

【代码解读】

表单选项MAX_FILE_SIZE的隐藏值域,通过设置Value值的大小可以限制上传文件的尺寸。当然,MAX_FILE_SIZE的值相对于浏览器只是一个参考值,实际上它可以被轻易地绕过。实际应用中是通过在PHP配置文件中设置上传文件最大值,来做上传文件的限制的。在表单中加上MAX_FILE_SIZE,可以及时发现上传文件尺寸过大的问题。

2.服务器端上传

创建服务器端上传处理文件upload.php,代码如下:

  1. <?php 
  2.     $file = &$HTTP_POST_FILES ['userfile']; //接收表单信息  
  3.     $dest_dir = 'up';                           //设定上传目录  
  4.     $dest = $dest_dir . time () . $file ['name'];    

    //设置文件名为时间加文件名,这样可有效避免重复  
  5.     if (! $file) {  
  6.         echo "<font color='red'>移动文件出错!</a>";  
  7.         exit ();  
  8.     } else {  
  9.         $r = move_uploaded_file ( $file ['tmp_name'], $dest );  
  10.         //chmod($dest, 0755);   //设定上传的文件的属性   
  11.         echo "<font color='red'>恭喜文件" . $dest . "上传成功!</a>";  
  12.     }  
  13. ?> 

【代码解读】

当文件上传成功后,系统会提示文件上传成功的信息。上面例子中$_FILES['userfile']数组的内容含义如下所示。

$_FILES['userfile']['name']:客户端机器文件的原名称。

$_FILES['userfile']['type']:文件的MIME类型,例如"image/gif"。

$_FILES['userfile']['size']:已上传文件的大小,单位为B。

$_FILES['userfile']['tmp_name']:文件被上传后在服务端储存的临时文件名。

$_FILES['userfile']['error']:该文件上传相关的错误代码。

其中,错误代码的含义如下所示。

值0:没有错误发生,文件上传成功。

值1:上传的文件超过了php.ini中upload_max_filesize选项限制的值。

值2:上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值。

值3:文件只有部分被上传。

值4:没有文件被上传。



相关内容: 最新内容:
PHP文件下载的原理及实现[2015-02-25]
利用ADODB.Stream 防盗链[2015-02-25]
流媒体服务器防盗链插件-Auth Plug[2015-02-25]
Web应用常见的安全威胁分析[2015-02-25]
WEB应用风险扫描的研究与应用[2015-02-25]
Java语言实现Web服务请求[2015-02-25]