仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1110|回复: 18
打印 上一主题 下一主题

[学习教程] PHP编程:PHP文件上传的详细思绪及完成

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:09:40 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
兴趣可能会慢慢消亡,所以适当培养兴趣会激发自己无线的乐趣,有了乐趣,编程有啥难的。上传   比来一段工夫对PHP文件处置方面很感乐趣,因而在很多站点上看了很多的文件处置的文章,然而国际很多的站点上的PHP文件处置方面的常识大多半是你抄我的我抄你的,用百度.com或是谷歌.com搜刮出来的器材多是反复的。比来在国外一个站点上盾了一篇文章感到很不错,因而保举给人人浏览。
起首咱们有需要申明一下文件上传的操作流程及用到的常识点:
文件上传咱们需求用到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>";
}
else if (!$_FILES['userfile']);
else
$message = "Invalid File Specified.";
列出咱们上传的文件:
$handle=opendir($upload_dir);
$filelist = "";
while ($file = readdir($handle)) {
   if(!is_dir($file) && !is_link($file)) {
      $filelist .= "<a href='$upload_dir$file'>".$file."</a>";
      if ($DELETABLE)
        $filelist .= " <a href='?del=$upload_dir$file' title='delete'>x</a>";
      $filelist .= "<sub><small><small><font color=grey>  ".date("d-m H:i", filemtime($upload_dir.$file))
                   ."</font></small></small></sub>";
      $filelist .="<br>";
   }
}
function do_upload($upload_dir, $upload_url) {
$temp_name = $_FILES['userfile']['tmp_name'];
$file_name = $_FILES['userfile']['name'];
  $file_name = str_replace("\\","",$file_name);
  $file_name = str_replace("'","",$file_name);
$file_path = $upload_dir.$file_name;
//File Name Check
  if ( $file_name =="") {
   $message = "Invalid File Name Specified";
   return $message;
  }
  $result  =  move_uploaded_file($temp_name, $file_path);
  if (!chmod($file_path,0777))
    $message = "change permission to 777 failed.";
  else
    $message = ($result)?"$file_name uploaded successfully." :
            "Somthing is wrong with uploading a file.";
  return $message;
}
?>
<center>
   <font color=red><?=$_REQUEST[message]?></font>
   <br>
   <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
     Upload File <input type="file" id="userfile" name="userfile">
     <input type="submit" name="upload" value="Upload">
   </form>
   
   <br><b>My Files</b>
   <hr width=70%>
   <?=$filelist?>
   <hr width=70%>
   <small><sup>Developed By
   <a style="text-decoration:none" href="http://tech.citypost.ca">CityPost.ca</a>
   </sup></small>
</center>

实现固定数量的几张图片的上传;再如调试软件ZendStudio的使用,看了很多次老师的应用,但总感觉用的不顺手,不懂那么多的数据值,到底哪一个才是真正的问题所在;还有如数据库语句的封装,我只会用简单的函数来进行封装。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-21 05:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表