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

首頁 > 語言 > PHP > 正文

php多文件上傳與上傳文件原理分析

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

首先用php的socket函數庫建立一個臨時的http服務器,在某一端口監聽,然后把 ip地址和端口號通知客戶端,客戶端把上傳表單提交(臨時服務器),臨時服務器接受客戶端請求,并讀取post數據,分析并獲取客戶端上傳的文件信息,把文件保存在服務器上,然后關閉臨時服務器,釋放資源,上傳完成,有點繞,不過思路還是簡單的,代碼如下:

  1. <?php
  2. class upload {  
  3. public $up_ext=array(), $up_max=5210, $up_dir;  
  4. private $up_name$up_rename=true, $up_num=0, $up_files=array(), $up_ret=array(); 
  5.  
  6. function __construct($name$ext=array(), $rename=true) {  
  7. if (!emptyempty($name)) {  
  8. $this->up_name = $name;  
  9. !emptyempty($ext) && $this->up_ext = $ext;  
  10. $this->up_rename = $rename;  
  11. $this->up_dir = website_dirroot.  
  12. $globals['cfg_upload_path'];  
  13. $this->initupload();  
  14. else {  
  15. exit('upload文件域名稱為空,初始化失?。?#39;);  
  16. }  
  17.  
  18. private function initupload() {  
  19. if (is_array($_files[$this->up_name])) {  
  20. $up_arr = count($_files[$this->up_name]);  
  21. $up_all = count($_files[$this->up_name], 1);  
  22. $up_cnt = ($up_all - $up_arr) / $up_arr;  
  23. for ($i = 0; $i < $up_cnt$i ++) {  
  24. if ($_files[$this->up_name]['error'][$i] != 4) {  
  25. $this->up_files[] = array(  
  26. 'tmp_name' => $_files[$this->up_name]['tmp_name'][$i],  
  27. 'name' => $_files[$this->up_name]['name'][$i],  
  28. 'type' => $_files[$this->up_name]['type'][$i],  
  29. 'size' => $_files[$this->up_name]['size'][$i],  
  30. 'error' => $_files[$this->up_name]['error'][$i]  
  31. );  
  32. }  
  33. }  
  34. $this->up_num = count($this->up_files);  
  35. else {  
  36. if (isset($_files[$this->up_name])) {  
  37. $this->up_files = array(  
  38. 'tmp_name' => $_files[$this->up_name]['tmp_name'],  
  39. 'name' => $_files[$this->up_name]['name'],  
  40. 'type' => $_files[$this->up_name]['type'],  
  41. 'size' => $_files[$this->up_name]['size'],  
  42. 'error' => $_files[$this->up_name]['error']  
  43. );  
  44. $this->up_num = 1;  
  45. else {  
  46. exit('沒找找到需要upload的文件!');  
  47. }  
  48.  
  49. $this->chkupload();  
  50.  
  51. private function chkupload() {  
  52. if (emptyempty($this->up_ext)) {  
  53. $up_mime = array('image/wbmp''image/bmp''image/gif''image/pjpeg''image/x-png');  
  54. foreach ($this->up_files as $up_file) {  
  55. $up_allw = false;  
  56. foreach ($up_mime as $mime) {  
  57. if ($up_file['type'] == $mime) {  
  58. $up_allw = true; break;  
  59. }  
  60. }  
  61. !$up_allw && exit('不允許上傳'.$up_file['type'].'格式的文件!'); 
  62.  
  63. if ($up_file['size'] / 1024 > $this->up_max) {  
  64. exit('不允許上傳大于 '.$this->up_max.'k 的文件!');  
  65. }  
  66. }  
  67. else {  
  68. foreach ($this->up_files as $up_file) {  
  69. $up_ext = end(explode('.'$up_file['name'])); 
  70.  
  71. $up_allw = false;  
  72. foreach ($this->up_ext as $ext) {  
  73. if ($up_ext == $ext) {  
  74. $up_allw = true; break;  
  75. }  
  76. }  
  77. !$up_allw && exit('不允許上傳.'.$up_ext.'格式的文件!'); 
  78.  
  79. if ($up_file['size'] / 1024 > $this->up_max) {  
  80. exit('不允許上傳大于 '.$this->up_max.'k 的文件!');  
  81. }  
  82. }  
  83.  
  84. $this->uploading();  
  85.  
  86. private function uploading() {  
  87. if (io::dircreate($this->up_dir)) {  
  88. if (chmod($this->up_dir, 0777)) {  
  89. if (!emptyempty($this->up_files)) {  
  90. foreach ($this->up_files as $up_file) {  
  91. if (is_uploaded_file($up_file['tmp_name'])) {  
  92. $file_name = $up_file['name'];  
  93. if ($this->up_rename) {  
  94. $file_ext = end(explode('.'$file_name));  
  95. $file_rnd = substr(md5(uniqid()), mt_rand(0, 26), 6);  
  96. $file_name = date('ymdhis').'_'.$file_rnd.'.'.$file_ext;  
  97. }  
  98. $file_name = $this->up_dir.'/'.$file_name
  99.  
  100. if (move_uploaded_file($up_file['tmp_name'], $file_name)) {  
  101. $this->up_ret[] = str_replace(website_dirroot, ''$file_name);  
  102. else {  
  103. exit('文件上傳失??!');  
  104. }  
  105. }  
  106. }  
  107. }  
  108. else {  
  109. exit('未開啟寫入權限!');  
  110. }  
  111. else {  
  112. exit('上傳目錄創建失?。?#39;);  
  113. }  
  114.  
  115. public function getupload() {  
  116. return emptyempty($this->up_ret) ? false : $this->up_ret;  
  117.  
  118. function __destruct() {}  
  119. }  
  120. ?> 

那么上傳的流程就是如下了:

1.給form標簽的enctype屬性賦值multipart/form-date,這個是必須的,而且也必須指定的,不然文件無法上傳.

2.判斷

這個判斷一般有三個判斷,一個是類型判斷,一個是大小判斷,一個是文件是否存在的判斷,因為這三個判斷是保證安全以及成功上傳的前提.

3.保存上傳的文件

因為文件上傳的時候都被存放在一個臨時的地方,所以要通過方法將其轉移到指定的地方,這樣調用也會很方便.

說了原理和流程,就是實際操作以及一些重要函數了,首先就是指定文件規定類型,但是不能直接指定,必須指定mime類型,不然php會報錯.

上傳的文件的信息一般都包含在一個叫$_files的關聯數組中,它包含了五方面的信息.

$_files['file']['name'] =>要上傳的文件的原名

$_files['file']['type'] =>要上傳的文件的類型

$_files['file']['size'] =>文件的大小

$_files['file']['tmp_name'] =>儲存的臨時文件名,一般是系統默認

$_files['file']['error'] =>上傳相關的錯誤代碼

錯誤代碼可以是一串數字,也可以是一些常量,比如0->upload_err_ok->上傳成功,你可以在這兒看到詳細的對應.

在轉移文件之前,最好使用is_uploaded_file()函數來測試臨時文件是否是通過http post上傳的,也可以檢測文件是否存在,一般用文件的臨時名作為參數,讓后就是使用move_uploaded_file()函數來轉移上傳的文件,這個函數有兩個參數,第一個是指定要轉移的文件,第二個是指定要轉移的文件,要轉移的文件一般是臨時文件,所以用臨時文件名(tmp_name)來指定,而第二參數一般也作為新的文件名,存進數據庫,以后就可以調用了.

這里要說的一個就是大文件上傳,在不借助第三方工具的情況下,可以通過設定php.ini的參數來完成,一個是upload_max_filesize,這個是指定上傳的最大限制,默認是2m,還有一個就是max_input_time,它指定了表單提交的最長時間限制,因為一般大文件上傳比較好時,所以這個也是必須的.

表單還可以有一些其他的控制,比如post_max_size是控制表單能接受的最大值,而memory_list可以指定每個php頁面能占有的最大內存,默認是8m,max_input_time可以指定每個php頁面接受數據的最長時間,默認是60秒.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩成人免费| 中文字幕不卡av| 亚洲第一区在线| 91免费在线视频网站| 欧美激情免费看| 精品久久久久久电影| 亚洲一区二区福利| 亚洲精品欧美日韩| 一区二区三区四区在线观看视频| 波霸ol色综合久久| 最近的2019中文字幕免费一页| 日韩毛片中文字幕| 久久久精品在线观看| 国产亚洲精品91在线| 97久久精品人搡人人玩| 久久亚洲精品毛片| 国产综合色香蕉精品| 欧美精品久久久久久久免费观看| 国产精品扒开腿做爽爽爽视频| 成人国产精品色哟哟| 亚洲美女黄色片| 亚洲国模精品私拍| 久久久精品视频成人| 日本精品一区二区三区在线播放视频| 日产精品99久久久久久| 国产精品偷伦视频免费观看国产| zzijzzij亚洲日本成熟少妇| 久久亚洲精品一区二区| 韩曰欧美视频免费观看| 欧美黄色片在线观看| 欧美性生活大片免费观看网址| 国产精品99久久久久久久久久久久| 久久伊人精品视频| 亚洲精品国产精品国自产在线| 中日韩午夜理伦电影免费| 日韩第一页在线| 97视频在线观看网址| 亚洲欧美日韩第一区| 日韩综合中文字幕| 91av中文字幕| 亚洲国产欧美一区二区三区同亚洲| 韩国福利视频一区| 大桥未久av一区二区三区| 国产美女直播视频一区| 日本久久久a级免费| 亚洲天堂男人天堂| 日韩一区二区三区xxxx| 欧美视频国产精品| 日韩精品极品在线观看| 综合136福利视频在线| 欧美在线激情视频| 成人信息集中地欧美| 国产日韩欧美另类| 91九色综合久久| 午夜欧美不卡精品aaaaa| 亚洲欧美制服第一页| 亚洲国产欧美一区二区三区同亚洲| 久久综合久久美利坚合众国| 精品视频在线播放| 4444欧美成人kkkk| 色偷偷偷亚洲综合网另类| 热99精品只有里视频精品| 国产精品久久久久影院日本| 在线观看国产欧美| 乱亲女秽乱长久久久| 精品国产乱码久久久久久天美| 日韩精品在线视频| 欧美亚洲成人xxx| 精品亚洲一区二区三区四区五区| 欧美夫妻性生活xx| 国产日韩精品综合网站| 欧美日韩福利在线观看| 美女黄色丝袜一区| 九九热这里只有精品6| 2019中文字幕免费视频| 国产精品av在线| 国产综合在线看| 色综合男人天堂| 亚洲黄页网在线观看| 久久久免费精品| 国产成人精品日本亚洲| 国产精品第一视频| 亚洲日本aⅴ片在线观看香蕉| 久久久久成人网| 精品国产乱码久久久久久虫虫漫画| 日韩成人黄色av| 日韩欧美在线视频免费观看| 成人久久久久爱| 91产国在线观看动作片喷水| 亚洲一区二区在线| 国产精品视频在线播放| 中文字幕亚洲一区| 亚洲国产精品大全| 久久全球大尺度高清视频| 国产999精品| 国模私拍一区二区三区| 亚洲第一av在线| 日本19禁啪啪免费观看www| 精品偷拍一区二区三区在线看| 国产精品 欧美在线| 奇米成人av国产一区二区三区| 欧美日韩免费区域视频在线观看| 国产精品视频一区二区高潮| 国产欧美欧洲在线观看| 亚洲激情中文字幕| 欧美黑人一区二区三区| 高清一区二区三区日本久| 久久99久久99精品中文字幕| 欧美日韩激情视频| 日韩电影免费观看中文字幕| 日韩一区在线视频| 精品欧美激情精品一区| 人九九综合九九宗合| 中文字幕日韩精品在线| 精品色蜜蜜精品视频在线观看| 国产精品一区二区三区毛片淫片| 中日韩美女免费视频网站在线观看| 国产成人精品在线视频| 亚洲一区国产精品| 成人激情视频在线播放| 亚洲精品有码在线| 欧美老少配视频| 国产91精品青草社区| 国产一区二区三区视频免费| 亚洲国产婷婷香蕉久久久久久| 久久综合网hezyo| 国产视频一区在线| 日韩免费观看高清| 国外成人性视频| 在线看日韩欧美| 亚洲аv电影天堂网| 国产午夜精品全部视频在线播放| 亚洲精品一区中文字幕乱码| 在线视频日本亚洲性| 91在线观看免费高清完整版在线观看| 色视频www在线播放国产成人| 久久久亚洲国产天美传媒修理工| 亚洲尤物视频网| 日韩精品免费看| 国产亚洲精品成人av久久ww| 久久91超碰青草是什么| 日韩免费av片在线观看| 国产欧美亚洲精品| 555www成人网| 久久久久久久久久久免费精品| 亚洲一区二区三区在线免费观看| 人体精品一二三区| 亚洲精品中文字幕有码专区| 亚洲国产欧美久久| 成人国产精品久久久久久亚洲| 久久亚洲成人精品| 欧美性xxxxx极品娇小| 国产精品黄色影片导航在线观看| 国产aaa精品| 欧美成人中文字幕在线| 亚洲香蕉成视频在线观看| 亚洲美女精品久久| 国产精品成人观看视频国产奇米| 国产成人精品视频在线观看| 亚洲人成网7777777国产| 欧洲亚洲女同hd| 国产精品久久久久久久久粉嫩av| 国产欧美精品日韩精品| 亚洲91精品在线观看|