關於PHP檔案上傳的一些知識點步驟整理

2021-07-27 07:04:44 字數 2960 閱讀 9535

需要乙個表單

,必須具有

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 這是一種泛型...