upload.inc.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. /*************************************************
  3. * 本单元写于 :
  4. * 作者 : 李腾秋
  5. * E-Mail : litqqs@163.com
  6. * 版权所有 : 李腾秋
  7. *************************************************/
  8. /*************************************************
  9. 上传处理相关函数
  10. 例子:
  11. require 'upload.inc.php';
  12. $save_dir='./upload/';
  13. $save_url='./upload/';
  14. $file_field_name='file';
  15. $max_size=1024*1024;
  16. $exts='';
  17. echo json_encode(uploadFile($save_dir, $save_url, $file_field_name, $max_size,$exts));
  18. *************************************************/
  19. /**
  20. * 处理上传文件
  21. * 返值结构
  22. * -error 出错代码,0表示成功
  23. * -message 出错信息
  24. * -url 保存后的网址
  25. * -file 相对保存目录的文件路径
  26. * -name 原始文件名
  27. * -ext 上传文件的后缀小写形式,如".jpg"
  28. * @param string $save_dir 保存文件目录
  29. * @param string $save_url 目录的web访问网址
  30. * @param string $file_field_name 表单名
  31. * @param int $max_size 文件最大尺寸
  32. * @param bool $auto_create_sub_dir 是否将自动建子目录来保存文件
  33. * @param string $exts 允许后缀,多个后缀用分号";"隔开,"*"表示所有. 图片后缀例: "jpg;gif;png"
  34. * @return array
  35. */
  36. function uploadFile($save_dir, $save_url, $file_field_name='file', $max_size=0, $exts='*', $auto_create_sub_dir=true)
  37. {
  38. $result=array();
  39. $result['error']=0;
  40. $result['message']='';
  41. $result['url']='';//上传后文件网址
  42. $result['file']='';//相对保存目录的文件路径
  43. $result['name']='';
  44. $result['ext']='';//上传文件的后缀小写形式,如".jpg"
  45. //$result['exec_js']='';
  46. if(!isset($_FILES[$file_field_name]['tmp_name']) || !is_uploaded_file($_FILES[$file_field_name]['tmp_name'])){
  47. $result['error']=1;
  48. $result['message']='失败:上传失败';
  49. return $result;
  50. }
  51. //检查大小
  52. if($max_size>0 && $_FILES[$file_field_name]['size']>$max_size){
  53. $result['error']=2;
  54. if($max_size>1048576)//1M
  55. {
  56. $size = round($max_size / 1048576,2) .'MB';
  57. }elseif($max_size>1024){
  58. $size = round($max_size / 1024,2) .'KB';
  59. }else{
  60. $size = $max_size .'B';
  61. }
  62. $result['message']='失败:文件太大, 请上传小于 '.$size.' 的文件.';
  63. return $result;
  64. }
  65. $result['name'] = $_FILES[$file_field_name]['name'];
  66. $ext = $result['ext'] = '.'.strtolower(substr(strrchr($_FILES[$file_field_name]['name'],'.'),1));
  67. //文件后缀检查
  68. if($exts!='*.*' && $exts!='*'){
  69. $exts= explode(';',strtolower($exts));
  70. if(!in_array(substr($ext,1),$exts)){
  71. $result['error']=3;
  72. $result['message']='失败:请上传(*.'.implode(';*.',$exts).')格式文件';
  73. return $result;
  74. }
  75. }
  76. $p = $auto_create_sub_dir ? date('Ym/d/') :'';
  77. if(!is_dir($save_dir . $p) && !mkdir($save_dir . $p, 0755, true)){
  78. $result['error']=4;
  79. $result['message']='失败:建目录['.UPLOAD_DIR . $p.']失败';
  80. return $result;
  81. }
  82. $f = $p.time().$ext;
  83. while(is_file($save_dir.$f)){
  84. $f = $p.time().'_'.uniqid().$ext;
  85. }
  86. if(!move_uploaded_file($_FILES[$file_field_name]['tmp_name'], $save_dir.$f)){
  87. $result['error']=5;
  88. $result['message']='失败, 写入文件['.$save_dir.$f.']失败.';
  89. return $result;
  90. }
  91. $result['url'] = $save_url . $f;
  92. $result['file'] = $f;
  93. return $result;
  94. }
  95. //上传图片
  96. function uploadImage($save_dir, $save_url, $file_field_name='file', $max_size=2097152, $exts='jpg;gif;png', $auto_create_sub_dir=true)
  97. {
  98. $result=uploadFile($save_dir, $save_url, $file_field_name, $max_size, $exts, $auto_create_sub_dir);
  99. $result['width']=0;
  100. $result['height']=0;
  101. if($result['error']==0){
  102. $size_info = @getimagesize($save_dir.$result['file']);
  103. if(false==$size_info){
  104. return $result;
  105. }
  106. $result['width']=$size_info[0];
  107. $result['height']=$size_info[1];
  108. //list($width,$height,$type,$text)
  109. }
  110. return $result;
  111. }