亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php文件上傳之原理分析與上傳類代碼

2024-09-04 11:44:55
字體:
來源:轉載
供稿:網友

今天研究PHP注冊POST/GET大變量的時候,看到了關于這塊的一些東西,跟蹤了半天,先記錄下來,免得以后再如此麻煩的跟蹤.

處理器注冊:

  1. [mod_php5.c, mod_php5模塊初始化] 
  2. php_init_handler(server_rec *s, pool *p) 
  3.     ->[main/SAPI.c]sapi_startup(&apache_sapi_module) 
  4.         ->[main/SAPI.c] 
  5. sapi_globals_ctor(&sapi_globals) 
  6.             ->[main/php_content_types.c]php_setup_sapi_content_types(TSRMLS_C) 
  7.                 ->[main/php_content_types.c 
  8. php_post_entries如下]sapi_register_post_entries(php_post_entries 
  9. TSRMLS_CC) 
  10.                     ->[main/SAPI.c]sapi_register_post_entry(p 
  11. TSRMLS_CC) 

如下面的代碼,共注冊了倆個處理器,分別處理post數據和文件上傳.

注1:參看在PHP Module中獲取$_GET/$_POST/$_COOKIE的方法研究

  1. [main/rfc1867.h] 
  2.       #define 
  3. MULTIPART_CONTENT_TYPE 
  4. "multipart/form-data" 
  5.  
  6. [main/php_content_types.h] 
  7.      #define 
  8. DEFAULT_POST_CONTENT_TYPE 
  9. "application/x-www-form-urlencoded" 
  10.  
  11. [main/SAPI.c] 
  12. struct 
  13. _sapi_post_entry 
  14. char *content_type; 
  15.         uint 
  16. content_type_len; 
  17.         void 
  18. (*post_reader)(TSRMLS_D); 
  19.         void 
  20. (*post_handler)(char *content_type_dup, void *arg 
  21. TSRMLS_DC); 
  22.     }; 
  23.   [main/php_content_types.c] 
  24. static 
  25. sapi_post_entry 
  26. php_post_entries[] = { 
  27. DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, sapi_read_standard_form_data, php_std_post_handler 
  28. }, 
  29.         { 
  30. MULTIPART_CONTENT_TYPE,    sizeof(MULTIPART_CONTENT_TYPE)-1,    NULL,                         rfc1867_post_handler 
  31. }, 
  32.         { 
  33. NULL, 0, NULL, NULL 
  34. }; 
  1. <?php 
  2. #********************************************************* 
  3. #文件名稱: yl_upload.class.php 
  4. #功能描述: 印像上傳類 
  5. #程序制作:留印(adleyliu) 
  6. #聯系qq  :14339095 
  7. #聯系郵箱:adleyliu@163.com 
  8. #最后更新:     2007-11-11 
  9. #注:轉發時請保留此聲明信息,這段聲明不并會影響你的速度! 
  10. #如有修改請將修改后的文件以郵件形式發送給作者一份,謝謝! 
  11. #********************************************************* 
  12. /* 
  13. //使用說明: 
  14. //聲明一個上傳類 
  15.    $yl_upload = new yl_upload_class();  
  16. //設置參數 
  17.    global $yl_filedata,$yl_directroy,$file_urldirectroy,$yl_settingsnew; 
  18.    global $yl_maxsize,$yl_sizeformat,$yl_arrext,$yl_ext; 
  19.    $yl_filedata = 'filedata';//表單名 
  20.    $yl_directroy = '../upload_file';//上傳主目錄 
  21.    $file_urldirectroy = 'upload_file';//文件url(在編輯器KindEditor中用到,請查看upload.php實例) 
  22.    $yl_settingsnew = 'month_'.date('Ym');//上傳主目錄1按版塊存入不同目錄,2按月份存入不同目錄,3按天存入不同目錄 
  23.    $yl_maxsize = 2097152;  //這里以字節為單位(1024*2)*1024=2097152 = 2M 
  24.    $yl_sizeformat = 'k';   //顯示文件大小單位b,k,m 
  25.    $yl_arrext = array('gif','jpg','jpeg','png','bmp');//允許上傳文件類型 
  26.    $yl_ext = 0;  //0原文件類型上傳,1統一為存為jpg 
  27. //上傳 
  28.    $yl_upload -> yl_uploadfile(); 
  29. */ 
  30. class yl_upload_class 
  31. #********************************************************* 
  32. #創建目錄函數 
  33. #********************************************************* 
  34. function createfolder($yl_path
  35.    if (!file_exists($yl_path)) 
  36.    { 
  37.     $this -> createfolder(dirname($yl_path)); 
  38.     @mkdir($yl_path, 0777); 
  39.    } 
  40.    return $this -> createfolder; 
  41. #********************************************************* 
  42. #獲取文件名稱,大小,類型,臨時文件名 
  43. #********************************************************* 
  44. function yl_getfilename($yl_type
  45.    global $yl_filedata,$yl_directroy,$yl_settingsnew
  46.    global $yl_maxsize,$yl_sizeformat,$yl_arrext,$yl_ext
  47.    return $_FILES[$yl_filedata][$yl_type]; 
  48. #********************************************************* 
  49. #獲取文件大小 
  50. #********************************************************* 
  51. function yl_getfilesize() 
  52.    global $yl_filedata,$yl_directroy,$yl_settingsnew
  53.    global $yl_maxsize,$yl_sizeformat,$yl_arrext,$yl_ext
  54.    if($this -> yl_getfilename('size') == 0){ 
  55.       $this -> alert("請選擇上傳文件!"); 
  56.       exit
  57.    } 
  58.    if($this -> yl_getfilename('size') > $yl_maxsize){ 
  59.          $yl_maxsizek=$yl_maxsize/1024; 
  60.       $this -> alert("上傳文件超出限制范圍$yl_maxsizek.K!"); 
  61.       exit
  62.    } 
  63.    switch (strtolower($yl_sizeformat)){ 
  64.    case 'b'
  65.    return $this -> yl_getfilename('size') . ' B'
  66.    break
  67.    case 'k'
  68.    return ($this -> yl_getfilename('size')/1024) . ' K'
  69.    break
  70.    case 'm'
  71.    return ($this -> yl_getfilename('size'))/(1024*1024) . ' M'
  72.    } 
  73. #********************************************************* 
  74. #獲得文件擴展名 
  75. #********************************************************* 
  76. function yl_getfiletype() 
  77.    global $yl_filedata,$yl_directroy,$yl_settingsnew
  78.    global $yl_maxsize,$yl_sizeformat,$yl_arrext,$yl_ext
  79.      $yl_temp_arr = explode("."$this -> yl_getfilename('name')); 
  80.      $yl_file_ext = array_pop($yl_temp_arr); 
  81.       $yl_file_ext = trim($yl_file_ext); 
  82.      $yl_file_ext = strtolower($yl_file_ext); 
  83.      //檢查擴展名 
  84.      if (in_array($yl_file_ext$yl_arrext) === false) { 
  85.         $this -> alert("上傳文件類型被限制!"); 
  86.         exit
  87.      } 
  88.      return $yl_file_ext
  89. #********************************************************* 
  90. #上傳 
  91. #********************************************************* 
  92. function yl_uploadfile() 
  93.    global $yl_filedata,$yl_directroy,$file_urldirectroy,$yl_settingsnew
  94.    global $yl_maxsize,$yl_sizeformat,$yl_arrext,$yl_ext
  95.    $yl_file_nameold = $this -> yl_getfilename('name');//原文件名 
  96.    $yl_file_namenews = date('Ymd').'_'.md5(date('YmdHis'));//重命名 
  97.    if($yl_ext == 0){ 
  98.       $yl_file_names = $yl_file_namenews.'.'.$this -> yl_getfiletype();//改名 
  99.    }elseif ($yl_ext == 1){ 
  100.       $yl_file_names = $yl_file_namenews.'.jpg';//統一改名為jpg 
  101.       } 
  102.    $yl_tmp_name = $this -> yl_getfilename('tmp_name');//服務器上臨時文件名 
  103.    $yl_file_size = $this -> yl_getfilesize();//獲取文件大小 
  104.    $yl_file_type = $this -> yl_getfiletype();//獲取文件類型 
  105.    $yl_file_path = $yl_directroy.'/'.$yl_settingsnew;//建立一個目錄 
  106.      //檢查目錄是否存在,不存在則創建 
  107.      if(@is_dir($yl_file_path) === false) { 
  108.       $this -> createfolder(''.$yl_file_path.'');//創建目錄 
  109.      } 
  110.      //檢查是否已上傳 
  111.    if(@is_uploaded_file($yl_tmp_name) === false) { 
  112.         $this -> alert("文件已上傳!"); 
  113.         exit
  114.    } 
  115.      //檢查目錄寫權限 
  116.      if (@is_writable($yl_file_path) === false) { 
  117.           $this -> alert("上傳目錄沒有寫權限!"); 
  118.           exit
  119.      } 
  120.    $yl_doupload = @copy($yl_tmp_name''.$yl_file_path.'/'.$yl_file_names.''); 
  121.    if($yl_doUpload === false) 
  122.    { 
  123.     $this -> alert("上傳失敗!"); 
  124.    }else
  125.     echo '上傳成功'
  126.     echo '<br>'
  127.     echo '文件目錄:'.$yl_file_path.''
  128.     echo '<br>'
  129.     echo '原文件名:'.$yl_file_nameold.''
  130.     echo '<br>'
  131.     echo '新文件名:'.$yl_file_names.''
  132.     echo '<br>'
  133.     echo '文件大小:'.$yl_file_size.''
  134.     echo '<br>'
  135.     echo '文件類型:'.$yl_file_type.''
  136.    } 
  137.     return
  138. #********************************************************* 
  139. #*刪除文件  
  140. #********************************************************* 
  141. function delfile() 
  142.    global $yl_filedata,$yl_directroy,$yl_settingsnew
  143.    global $yl_maxsize,$yl_sizeformat,$yl_arrext,$yl_ext
  144.    $yl__dir = dirname(trim($yl_directroy)); 
  145.    if$this->_isDel( $yl__dir ) ) 
  146.    { 
  147.       return @unlink( $yl_directroy ) ? true : false; 
  148.    }else
  149.    return false; 
  150.    } 
  151. #********************************************************* 
  152. #刪除目錄 目錄下如果有文件不能刪除 
  153. #********************************************************* 
  154. function deldir( ) 
  155.    global $yl_filedata,$yl_directroy,$yl_settingsnew
  156.    global $yl_maxsize,$yl_sizeformat,$yl_arrext,$yl_ext
  157.    if$this->_isdel($yl_directroy) && is_dir$yl_directroy ) ) 
  158.    { 
  159.       return @rmdir$yl_directroy ) ? true : false; 
  160.    }else
  161.       return false; 
  162.    } 
  163. #********************************************************* 
  164. #提示 
  165. #********************************************************* 
  166. function alert($yl_msg
  167.     echo '<html>'
  168.     echo '<head>'
  169.     echo '<title>error</title>'
  170.     echo '<meta http-equiv="content-type" c>'
  171.     echo '</head>'
  172.     echo '<body>'
  173.     echo '<script type="text/網頁特效">alert("'.$yl_msg.'");;</script>'
  174.     echo '</body>'
  175.     echo '</html>'
  176.     exit
  177. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲天堂一区二区三区| 欧美国产精品人人做人人爱| 欧美日韩在线观看视频小说| 91精品中国老女人| 亚洲欧美精品一区| 日韩毛片在线观看| 亚洲精品久久久久中文字幕二区| 国产亚洲视频在线观看| 97在线视频免费| 久久最新资源网| 欧美成人自拍视频| 国产精品专区第二| www.日韩系列| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品青青在线观看爽香蕉| 亚洲男人天堂九九视频| 欧美激情精品在线| 欧美一级大片在线免费观看| 伊人伊成久久人综合网站| 亚洲国产97在线精品一区| 欧美成人免费在线观看| 日韩av中文字幕在线免费观看| 91成人在线视频| 亚洲国产精品久久久久| 亚洲欧美日韩中文在线| 欧美肥臀大乳一区二区免费视频| 日本成人在线视频网址| 欧美专区国产专区| 久久精品99久久久香蕉| 国产一区二区在线播放| 日本精品免费一区二区三区| 在线视频欧美日韩精品| 国产成人小视频在线观看| 精品久久久视频| 国产一区av在线| 国产精品丝袜久久久久久高清| 国产亚洲欧洲在线| 影音先锋欧美精品| 69久久夜色精品国产7777| 欧美日韩国产在线| 国a精品视频大全| 亚洲欧美另类自拍| 国产成人精品午夜| 人九九综合九九宗合| 日韩欧美在线播放| 国产精品久久久久久久av电影| 伊人成人开心激情综合网| 在线视频精品一| 国产丝袜高跟一区| 亚洲桃花岛网站| 亚洲精品456在线播放狼人| 色婷婷综合久久久久| 亚洲色无码播放| 欧美大奶子在线| 国内精品国产三级国产在线专| 欧美激情综合亚洲一二区| 欧美大片va欧美在线播放| 爱福利视频一区| 4444欧美成人kkkk| 国产精品久久久一区| 国产成人精彩在线视频九色| 亚洲大胆人体av| 亚洲国产天堂久久综合| 日韩av最新在线观看| 色老头一区二区三区在线观看| 久久精品免费播放| 国产精品电影久久久久电影网| 91成人性视频| 国产热re99久久6国产精品| 国产亚洲美女精品久久久| 欧美激情欧美激情在线五月| 欧美诱惑福利视频| 久久九九全国免费精品观看| 日韩欧美在线一区| 成人av电影天堂| 亚洲最新视频在线| 日韩精品免费看| 欧美日韩亚洲一区二区| 欧美日韩美女在线观看| 欧美一区二区三区四区在线| 欧美日韩一区二区三区在线免费观看| 日韩在线观看高清| 亚洲91精品在线观看| 欧美日韩亚洲精品内裤| 欧美日韩一区二区三区在线免费观看| 亚洲电影第1页| 国产不卡一区二区在线播放| 亚洲老司机av| 欧美激情中文字幕在线| 黑人极品videos精品欧美裸| 亚洲精品丝袜日韩| 欧美激情精品久久久久久变态| 成人久久精品视频| 欧美日韩免费看| 亚洲欧美资源在线| 亚洲综合在线播放| 国产91精品最新在线播放| 国产亚洲视频中文字幕视频| 欧美精品videofree1080p| 久久久www成人免费精品张筱雨| 丝袜一区二区三区| 91国内免费在线视频| 亚洲缚视频在线观看| 久久久成人的性感天堂| 久久激情五月丁香伊人| 日韩经典第一页| 亚洲男子天堂网| 亚洲欧美在线看| 日韩欧美亚洲综合| 亚洲美女性生活视频| 色综合久久悠悠| 亚洲老头同性xxxxx| 国产成人综合久久| 77777少妇光屁股久久一区| 亚洲一区二区日本| 最好看的2019的中文字幕视频| 91九色综合久久| 久久伊人精品天天| 亚洲国产高清高潮精品美女| 亚洲激情第一页| 日韩视频免费大全中文字幕| 91香蕉嫩草神马影院在线观看| 夜夜嗨av一区二区三区免费区| 国产成人在线亚洲欧美| 国产精品一区二区久久国产| 国产精品一二三视频| 久久精品国产欧美亚洲人人爽| 曰本色欧美视频在线| 久久久久久久电影一区| 亚洲成人免费网站| 69av视频在线播放| zzijzzij亚洲日本成熟少妇| 日韩精品视频在线播放| 欧美一级成年大片在线观看| 成人黄色av网| 亚洲一区二区少妇| 欧美最顶级的aⅴ艳星| 91国内精品久久| 精品国产91久久久| 久久久国产精品免费| 欧美日韩免费一区| 亚洲18私人小影院| 国产精品wwwwww| 欧美尺度大的性做爰视频| 亚洲国产高清高潮精品美女| 国产精品视频不卡| 2021国产精品视频| 色偷偷综合社区| 综合网日日天干夜夜久久| 清纯唯美亚洲综合| 国产成人精品亚洲精品| 久久99久久99精品中文字幕| 久久在线免费视频| 亚洲第一页中文字幕| 国产亚洲美女久久| 性欧美亚洲xxxx乳在线观看| 国产精品18久久久久久首页狼| 欧美精品九九久久| 欧美一级淫片播放口| 亚洲精品女av网站| 日韩激情av在线免费观看| 午夜精品美女自拍福到在线| 亚洲国产精品视频在线观看| 欧美一区二区视频97|