php简单文件上传$_FILES与move_uploaded_file实现文件上传

php简单文件上传$_files与move_uploaded_file实现文件上传.

$_files["file"]["name"] - 被上传文件的名称

$_files["file"]["type"] - 被上传文件的类型

$_files["file"]["size"] - 被上传文件的大小,以字节计

$_files["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称

$_files["file"]["error"] - 由文件上传导致的错误代码

这是一种非常简单文件上传方式,基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制.

注释:对于 ie,识别 jpg 文件的类型必须是 pjpeg,对于 firefox,必须是 jpeg.

  1. /*
  2. *$formname html上传表单名称
  3. *$allowtype_array 允许上传的文件类型数组
  4. *$allow_size 允许上传的文件最大大小,默认是1mb
  5. *$isrename 是否需要重命名被上传的文件
  6. */
  7. function upload_file($formname,$path,$allowtype_array,$allow_size='1048576',$isrename=true){
  8. if($_files[$formname]['tmp_name']=='' || $_files[$formname]['name']=='' || $_files[$formname]['size']==0){
  9. return false;
  10. }
  11. if(!file_exists('../uploadfiles/'.$path)){
  12. if(!mkdir('../uploadfiles/'.$path,0777)){
  13. writeerrmsg('创建上传文件保存文件目录失败,请联系管理员检查目录权限');
  14. }
  15. }
  16. if($_files[$formname]['size']>$allow_size){
  17. writeerrmsg('上传文件过大,请将上传文件限制在'.number_format($allow_size/1048576,'2','.','').'mb以内');
  18. }
  19. $file_name_array=explode('.',$_files[$formname]['name']);
  20. $file_type=strtolower($file_name_array[count($file_name_array)-1]);
  21. if(!in_array($file_type,$allowtype_array)){
  22. writeerrmsg('上传文件类型错误,仅允许上传后缀名为 .'.implode(' .',$allowtype_array).'的文件');
  23. }
  24. $save_name=$isrename?randomname().'.'.$file_type:$_files[$formname]['name'];
  25. if(!move_uploaded_file($_files[$formname]['tmp_name'],'../uploadfiles/'.$path.'/'.$save_name)){
  26. writeerrmsg('文件上传过程中发生错误,请重新上传');
  27. }
  28. switch($_files[$formname]['error']){
  29. case 0:
  30. return $save_name;
  31. break;
  32. case 1:
  33. writeerrmsg('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值');
  34. break;
  35. case 2:
  36. writeerrmsg('上传文件的大小超过了 html 表单中 max_file_size 选项指定的值');
  37. break;
  38. case 3:
  39. writeerrmsg('文件只有部分被上传');
  40. break;
  41. case 4:
  42. writeerrmsg('没有文件被上传');
  43. break;
  44. default: //开源代码phpfensi.com
  45. writeerrmsg('能出现这条错误提示,日子也该混到头了');
  46. break;
  47. }
  48. }

move_uploaded_file

本函数检查并确保由 file 指定的文件是合法的上传文件,即通过 php 的 http post 上传机制所上传的,如果文件合法,则将其移动为由 newloc 指定的文件.

如果 file 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 false.

如果 file 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 false,此外还会发出一条警告.

这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话.