需要乙個表單
,必須具有
method="post" enctype="multipart/form-data"
兩者缺一不可,再通過表單裡面的
type="file" name="myfile" />
對檔案進行傳輸。
通過$_files['myfile']
接收(返回的是乙個陣列,進行相應的分配得到相應的值)
$a = $_files['myfile'];
$filename = $a['name'];
$type = $a['type'];
$tmp_name = $a['tmp_name'];
$error = $a['error'];
$size = $a['size'];
根據相應的順序進行判斷。
1. 對$error
進行判斷
錯誤代號
英文碼內容
0upload_err_ok
其值為 0,沒有錯誤發生,檔案上傳成功。
1upload_err_ini_size
其值為 1,上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。
2upload_err_form_size
其值為 2,上傳檔案的大小超過了 html 表單中 max_file_size 選項指定的值。
3upload_err_partial
其值為 3,檔案只有部分被上傳。
4upload_err_no_tmp_dir
其值為 4,沒有檔案被上傳。
6upload_err_no_tmp_dir
其值為 6,找不到臨時資料夾。php 4.3.10 和 php 5.0.3 引進。
7upload_err_cant_write
其值為 7,檔案寫入失敗。php 5.1.0 引進。
8upload_err_extension
其值為8,檔案由於php的擴充套件程式導致檔案上傳失敗
2.用is_uploaded_file($tmp_name)
函式判斷是否是通過post
方式上傳
3.可以用pathinfo($filename,pathinfo_extension)
函式來獲得上傳檔案的字尾型別
4.可以用md5(uniqid(microtime(true),true))
來生成唯一標識的檔名稱,加上3.
的字尾就可以組成儲存的檔名。
5.這兩個**可以生成希望儲存的資料夾,在資料夾不存在的情況下使用(判斷資料夾不存在的**file_exists($destination)
)
mkdir("uploads",0777,true);
chmod("uploads",0777);
6.move_uploaded_file($tmp_name, $destination)
這**是將臨時檔案移動到指定資料夾,並儲存。$destination
的內容是指定資料夾+檔名+.字尾
。而儲存的$tmp_name
是檔案傳輸過來的臨時檔案。
function
uploadmonofile
($a)
//限制檔案上傳大小
if ($size > $maxsize)
//是否是用post的方式判斷
if (is_uploaded_file($tmp_name))
$destination = "uploads/" . $filename . "." . $postfix;
//將臨時檔案進行儲存到指定資料夾
if (move_uploaded_file($tmp_name, $destination)) else
} else
return
$mes;
} else
}return
$mes;
}
多檔案上傳是基於name傳遞的引數是陣列還是多個不同的檔案引數無論是多個不同的檔案引數還是陣列引數上傳,接受的引數都會被納入同乙個陣列中。
對於要區分兩種不同的陣列的關鍵在於查詢其中的不同點,陣列引數中,檔案的資料都被統一分配在了同乙個陣列當中,而單個檔案上傳是檔案的所有資料都分配在乙個陣列裡面。
步驟:將接收的引數$a
遍歷成單個陣列$a_sm
。
判斷陣列裡面的某項值是否是字串還是陣列,這裡判斷的是檔名['name']
。
如果是字串,則確定為單檔案上傳,如果是陣列,則是多檔案上傳。
[『name』]是字串》單檔案上傳
判斷['error']
是否是upload_err_ok
,檔案是否上傳成功。
然後使用之前封裝的函式對檔案進行相應的處理。
[『name』]是陣列》多檔案上傳這兩個是判斷成功數和失敗數,忽視空檔案。**未完善
$success_num=0;
$fail_num=0;
function
uploadmultifile
($a)
} elseif ($a_sm['error'] != 4)
} else
foreach ($files
as$file) }}
}return
$success_num."個檔案上傳成功".",有".$fail_num."個上傳失敗。";
}
PHP 類的一些知識點
class cart 不能將乙個類分開定義在多個檔案,也不能將類定義分到多個php塊 函式內部可以分 不能定義名為以下的類 stdclass sleep wakeup 事實上不要以 開頭定義類。class cart 類如果沒有建構函式,將呼叫基類建構函式。構造函式引數可以賦預設值 class con...
關於演算法的一些知識點
set 不能用來計數,只能用來判斷是否存在這個string。include setstr 新增數值 str.insert str new set 預設是從小到大排序 兩個int插入用法,按照第乙個數值排序。set s 訪問第乙個值 s.begin 如果是雙int int start,end star...
關於集合的一些知識點
集合 集合,它也是一種陣列,它稱為 動態陣列 特點 宣告集合的時候,不需要指定集合的大小,當空間不夠時,會自動變大 arraylist可以存在重複資料 它儲存的資料是有順序的 採用的佇列的結構進行儲存 先進先出,後進後出 建立語法 arraylistlist new arraylist 這是一種泛型...