用PHP文件上传的具体思路及实现

时间:2010-01-14 09:53:31   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:个站点都可能会对上传文件有许多的限制,这些限制会包括 文件类型,文件大小,扩展名,以及上传目录的存在与否,上传文件的存在与否,目录的可写性,可读性,上传文件的改名及怎样把文件从缓存当中复制到你所需要的目录当中。        当然出错的预处理也是我们不容忽视的!如果再深一步的讨论我们还可以对文件的操作起用事件日志的记录。  ...
  正文:

文件上传我们需要用到HTML里面表单的type=file类型,及其enctype属性。这是我们大家必须要用的。当然了PHP函数库当中的FILE函数库,字符串类型函数库,目录函数库及$_FILES[]的使用是我们必须要用到的。
  
    也许每一个站点都可能会对上传文件有许多的限制,这些限制会包括 文件类型,文件大小,扩展名,以及上传目录的存在与否,上传文件的存在与否,目录的可写性,可读性,上传文件的改名及怎样把文件从缓存当中复制到你所需要的目录当中。
  
    当然出错的预处理也是我们不容忽视的!如果再深一步的讨论我们还可以对文件的操作起用事件日志的记录。
  
    下面我们通过一段程序来实现这些功能:
    
    首先是我们预设的变量值,它包括文件大小,文件扩展名类型,MIMI类型,及是否删除的开关变量
  
  $MAX_SIZE = 2000000;
  $FILE_MIMES = array('image/jpeg','image/jpg','image/gif'
  ,'image/png','application/msword');
  
  $FILE_EXTS = array('.zip','.jpg','.png','.gif');
  
  $DELETABLE = true;
  
    下一部就是设置浏览器访问变量及目录访问变量:
  
  $site_name = $_SERVER['HTTP_HOST'];
  $url_dir = http://.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  $url_this = http://.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  
  $upload_dir = files/;
  $upload_url = $url_dir./files/;
  $message =;
  
    建立上传目录并相应改变权限:
  
  if (!is_dir(files)) {
   if (!mkdir($upload_dir))
    die (upload_files directory doesn't exist and creation failed);
   if (!chmod($upload_dir,0755))
    die (change permission to 755 failed.);
  }
  
    用户请求的处理:
  
  
  if ($_REQUEST[del] && $DELETABLE) {
   $resource = fopen(log.txt,a);
   fwrite($resource,date(Ymd h:i:s).DELETE - $_SERVER[REMOTE_ADDR].$_REQUEST[del]n);
   fclose($resource);
  
   if (strpos($_REQUEST[del],/.)>0); //possible hacking
   else if (strpos($_REQUEST[del],files/) === false); //possible hacking
   else if (substr($_REQUEST[del],0,6)==files/) {
    unlink($_REQUEST[del]);
    print <script>window.location.href='$url_this?message=deleted successfully'</script>;
   }
  }
  else if ($_FILES['userfile']) {
   $resource = fopen(log.txt,a);
   fwrite($resource,date(Ymd h:i:s).UPLOAD - $_SERVER[REMOTE_ADDR]
   .$_FILES['userfile']['name'].
   .$_FILES['userfile']['type'].n);
   fclose($resource);
  
   $file_type = $_FILES['userfile']['type'];
   $file_name = $_FILES['userfile']['name'];
   $file_ext = strtolower(substr($file_name,strrpos($file_name,.)));
  
   //文件大小的检查:
  
   if ( $_FILES['userfile']['size'] > $MAX_SIZE)
    $message = The file size is over 2MB.;
    //File Type/Extension Check
   else if (!in_array($file_type, $FILE_MIMES)
  && !in_array($file_ext, $FILE_EXTS) )
    $message = Sorry, $file_name($file_type) is not allowed to be uploaded.;
   else
    $message = do_upload($upload_dir, $upload_url);
  
   print <script>window.location.href='$url_this?message=$message'</script>;
来源:http://www.002pc.com/master/College/Programming/PHP/11847.html

收藏到:

关于《用PHP文件上传的具体思路及实现》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td