php文件上傳代碼 PHP4.3.10和PHP5.0.3的判斷錯(cuò)誤代號(hào)及判斷的區(qū)別
2021-10-16
首頁(yè)
需要表格
, 一定有
method="post" enctype="multipart/form-data"
兩者缺一不可,然后在表單中傳遞
傳輸文件。
接收頁(yè)面
通過(guò)$['']接收(返回的是一個(gè)數(shù)組,進(jìn)行相應(yīng)的分配得到相應(yīng)的值)
$a = $_FILES['myFile'];
$filename = $a['name'];
$type = $a['type'];
$tmp_name = $a['tmp_name'];
$error = $a['error'];
$size = $a['size'];
按照相應(yīng)的順序判斷。1. 判斷$錯(cuò)誤代碼英文代碼內(nèi)容
值為0,沒(méi)有錯(cuò)誤發(fā)生,文件上傳成功。
1
它的值為1,上傳的文件超過(guò)了php.ini中 的值。
2
值為2,上傳文件的大小超過(guò)HTML表單中選項(xiàng)指定的值。
3
值為3,只上傳文件的一部分。
4
電阻
它的值為 4,沒(méi)有文件上傳。
6
電阻
值為 6,找不到臨時(shí)文件夾。引入了 PHP 4.3.10 和 PHP 5.0.3。
7
乙
其值為7,文件寫(xiě)入失敗。PHP 5.1.0 引入。
8
值為8,由于PHP擴(kuò)展文件上傳失敗
2.使用($)函數(shù)判斷是否通過(guò)POST上傳3.可以使用($,)函數(shù)獲取上傳文件的后綴類(lèi)型4.可以使用md5(((true), true)) 生成唯一標(biāo)識(shí)的文件名,加上3.的后綴構(gòu)成保存的文件名。5.這兩個(gè)代碼可以生成你要存放的文件夾,在文件夾不存在時(shí)使用(判斷文件夾不存在的代碼($))
mkdir("uploads",0777,true);
chmod("uploads",0777);
6.($, $) 這段代碼是將臨時(shí)文件移動(dòng)到指定文件夾并保存。$的內(nèi)容為指定文件夾+文件名+。后綴。保存的 $ 是從文件傳輸?shù)呐R時(shí)文件。文件上傳代碼包
function uploadMonoFile($a)
{
$filename = $a['name'];
@$type = $a['type'];
$tmp_name = $a['tmp_name'];
$error = $a['error'];
@$size = $a['size'];
$allowExt = array("gif", "jpeg", "jpg", "png", "wbmp");
$maxSize = 1048576;
//對(duì)上傳文件判斷是否成功還是出錯(cuò)
if ($error == UPLOAD_ERR_OK) {
$postfix = pathinfo($filename, PATHINFO_EXTENSION);
//限制文件上傳類(lèi)型
if (!in_array($postfix, $allowExt)) {
exit("非法文件類(lèi)型");
}
//限制文件上傳大小
if ($size > $maxSize) {
exit("文件過(guò)大");
}
//是否是用POST的方式判斷
if (is_uploaded_file($tmp_name)) {
//獲得唯一的文件名,getUniName()是封裝的一個(gè)方法--md5加密的
$filename = getUniName($filename);
$destination = "uploads/";
//判斷文件夾是否存在
if (!file_exists($destination)) {
mkdir("uploads", 0777, true);
chmod("uploads", 0777);
}
$destination = "uploads/" . $filename . "." . $postfix;
//將臨時(shí)文件進(jìn)行存儲(chǔ)到指定文件夾
if (move_uploaded_file($tmp_name, $destination)) {
$mes = "文件上傳成功";
} else {
$mes = "文件上傳失敗";
}
} else {
$mes = "文件不是通過(guò)post方式上傳的";
}
return $mes;
} else {
switch ($error) {
case 1:
$mes = "超過(guò)配置文件的大小";
break;
case 2:
$mes = "超過(guò)表單限制的大小";
break;
case 3:
$mes = "文件部分被上傳";
break;
case 4:
$mes = "沒(méi)有文件被上傳";
break;
case 6:
$mes = "沒(méi)有找到臨時(shí)目錄";
break;
case 7:
$mes = "文件不可寫(xiě)";
break;
case 8:
$mes = "由于PHP的擴(kuò)展程序?qū)е挛募蟼魇?;
break;
}
}
return $mes;
}
多文件上傳代碼包
多文件上傳是根據(jù)name傳遞的參數(shù)是數(shù)組還是多個(gè)不同的文件參數(shù)
無(wú)論上傳多個(gè)不同的文件參數(shù)或數(shù)組參數(shù),接受的參數(shù)都會(huì)包含在同一個(gè)數(shù)組中。
區(qū)分兩個(gè)不同數(shù)組的關(guān)鍵是找到差異。在數(shù)組參數(shù)中,文件的數(shù)據(jù)統(tǒng)一分配在同一個(gè)數(shù)組中,對(duì)于單個(gè)文件上傳php文件上傳代碼,文件的所有數(shù)據(jù)都分配在一個(gè)數(shù)組中。.
從上一點(diǎn)可以看出,文件上傳名稱(chēng)是一個(gè)數(shù)組參數(shù),是一個(gè)二維數(shù)組,多個(gè)單個(gè)文件上傳是一個(gè)一維數(shù)組。所以判斷文件名['name']是字符串還是數(shù)組。極客判斷是按數(shù)組上傳還是單個(gè)文件上傳。步驟:將接收到的參數(shù) $a 遍歷到單個(gè)數(shù)組 $a_sm 中。判斷數(shù)組中的某個(gè)值是字符串還是數(shù)組,這里判斷文件名['name']。如果是字符串,則確定為單文件上傳,如果是數(shù)組,則確定為多文件上傳。['name']為字符串" "單文件上傳判斷['']是否為yesphp文件上傳代碼,文件是否上傳成功。然后使用之前封裝的函數(shù)對(duì)文件進(jìn)行相應(yīng)的處理。['姓名'
這兩個(gè)是判斷成功和失敗的次數(shù),忽略空文件。代碼并不完美
$success_num=0;
$fail_num=0;
function uploadMultiFile($a)
{
$success_num=0;
$fail_num=0;
foreach ($a as $a_sm) {
if (is_string($a_sm['name'])) {
if ($a_sm['error'] == UPLOAD_ERR_OK) {
$res = uploadMonoFile($a_sm);
if ($res=="文件上傳成功"){
$success_num++;
}
} elseif ($a_sm['error'] != 4) {
echo "文件出錯(cuò)";
}
} else {
$i = 0;
foreach ($a_sm as $key => $value) {
$files[$i]['name'] = $a_sm['name'][$i];
$files[$i]['tmp_name'] = $a_sm['tmp_name'][$i];
$files[$i]['error'] = $a_sm['error'][$i];
$i++;
}
foreach ($files as $file) {
$res = uploadMonoFile($file);
if ($res=="文件上傳成功") {
$success_num++;
}
}
}
}
return $success_num."個(gè)文件上傳成功".",有".$fail_num."個(gè)上傳失敗。";
}