php文件上传代码 PHP4.3.10和PHP5.0.3的判断错误代号及判断的区别
2021-10-16
首页
需要表格
, 一定有
method="post" enctype="multipart/form-data"
两者缺一不可,然后在表单中传递
传输文件。
接收页面
通过$['']接收(返回的是一个数组,进行相应的分配得到相应的值)
$a = $_FILES['myFile'];
$filename = $a['name'];
$type = $a['type'];
$tmp_name = $a['tmp_name'];
$error = $a['error'];
$size = $a['size'];
按照相应的顺序判断。1. 判断$错误代码英文代码内容
值为0,没有错误发生,文件上传成功。
1
它的值为1,上传的文件超过了php.ini中 的值。
2
值为2,上传文件的大小超过HTML表单中选项指定的值。
3
值为3,只上传文件的一部分。
4
电阻
它的值为 4,没有文件上传。
6
电阻
值为 6,找不到临时文件夹。引入了 PHP 4.3.10 和 PHP 5.0.3。
7
乙
其值为7,文件写入失败。PHP 5.1.0 引入。
8
值为8,由于PHP扩展文件上传失败
2.使用($)函数判断是否通过POST上传3.可以使用($,)函数获取上传文件的后缀类型4.可以使用md5(((true), true)) 生成唯一标识的文件名,加上3.的后缀构成保存的文件名。5.这两个代码可以生成你要存放的文件夹,在文件夹不存在时使用(判断文件夹不存在的代码($))
mkdir("uploads",0777,true);
chmod("uploads",0777);
6.($, $) 这段代码是将临时文件移动到指定文件夹并保存。$的内容为指定文件夹+文件名+。后缀。保存的 $ 是从文件传输的临时文件。文件上传代码包
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;
//对上传文件判断是否成功还是出错
if ($error == UPLOAD_ERR_OK) {
$postfix = pathinfo($filename, PATHINFO_EXTENSION);
//限制文件上传类型
if (!in_array($postfix, $allowExt)) {
exit("非法文件类型");
}
//限制文件上传大小
if ($size > $maxSize) {
exit("文件过大");
}
//是否是用POST的方式判断
if (is_uploaded_file($tmp_name)) {
//获得唯一的文件名,getUniName()是封装的一个方法--md5加密的
$filename = getUniName($filename);
$destination = "uploads/";
//判断文件夹是否存在
if (!file_exists($destination)) {
mkdir("uploads", 0777, true);
chmod("uploads", 0777);
}
$destination = "uploads/" . $filename . "." . $postfix;
//将临时文件进行存储到指定文件夹
if (move_uploaded_file($tmp_name, $destination)) {
$mes = "文件上传成功";
} else {
$mes = "文件上传失败";
}
} else {
$mes = "文件不是通过post方式上传的";
}
return $mes;
} else {
switch ($error) {
case 1:
$mes = "超过配置文件的大小";
break;
case 2:
$mes = "超过表单限制的大小";
break;
case 3:
$mes = "文件部分被上传";
break;
case 4:
$mes = "没有文件被上传";
break;
case 6:
$mes = "没有找到临时目录";
break;
case 7:
$mes = "文件不可写";
break;
case 8:
$mes = "由于PHP的扩展程序导致文件上传失败";
break;
}
}
return $mes;
}
多文件上传代码包
多文件上传是根据name传递的参数是数组还是多个不同的文件参数
无论上传多个不同的文件参数或数组参数,接受的参数都会包含在同一个数组中。
区分两个不同数组的关键是找到差异。在数组参数中,文件的数据统一分配在同一个数组中,对于单个文件上传php文件上传代码,文件的所有数据都分配在一个数组中。.
从上一点可以看出,文件上传名称是一个数组参数,是一个二维数组,多个单个文件上传是一个一维数组。所以判断文件名['name']是字符串还是数组。极客判断是按数组上传还是单个文件上传。步骤:将接收到的参数 $a 遍历到单个数组 $a_sm 中。判断数组中的某个值是字符串还是数组,这里判断文件名['name']。如果是字符串,则确定为单文件上传,如果是数组,则确定为多文件上传。['name']为字符串" "单文件上传判断['']是否为yesphp文件上传代码,文件是否上传成功。然后使用之前封装的函数对文件进行相应的处理。['姓名'
这两个是判断成功和失败的次数,忽略空文件。代码并不完美
$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 "文件出错";
}
} 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."个文件上传成功".",有".$fail_num."个上传失败。";
}