国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP文件上傳的具體思路及實現

2024-05-04 23:00:07
字體:
來源:轉載
供稿:網友


最近一段時間對php文件處理方面很感興趣,因此在許多站點上看了許多的文件處理的文章,但是國內許多的站點上的php文件處理方面的知識大多數是你抄我的我抄你的,用baidu.com或者是google.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("http://","",$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 >citypost.ca</a>
   </sup></small>
</center>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鸡西市| 克什克腾旗| 绥宁县| 清流县| 隆尧县| 龙胜| 卢氏县| 栾城县| 区。| 乌拉特后旗| 黔南| 姜堰市| 六盘水市| 喀喇沁旗| 葫芦岛市| 抚州市| 连城县| 祁门县| 伽师县| 麻江县| 日喀则市| 惠东县| 崇礼县| 卫辉市| 秦安县| 衡东县| 宁强县| 精河县| 禹州市| 工布江达县| 桐柏县| 临江市| 丰原市| 宁安市| 长兴县| 清远市| 拜泉县| 鄄城县| 拉孜县| 嘉禾县| 常宁市|