php 文件上传

目录

[1 php.ini 配置文件的修改](#1 php.ini 配置文件的修改)

2.系统返回码详解

错误级别

4.上传简单示例

5.php代码简单优化


1 php.ini 配置文件的修改

|---------------------|--------------------------|
| 配置项 | 说明 |
| file_uploads | on 为 开启文件上传功能, off 为关闭 |
| post_max_size | 系统允许的 POST 传参的最大值 ,默认 8M |
| upload_max_filesize | 系统允许的上传文件的最大值 ,默认 2M |
| menory_limit | 内存使用限制 ,默认 256M |

可以根据自己的需求进行修改

2.系统返回码详解

|-----|--------------------------------------------------------------------------------|
| 错误码 | 说明 |
| 0 | 无误,可以继续进行文件上传的后续操作 |
| 1 | 超出上传文件的最大限制, upload_max_filesize = 100M php.ini 中设置,一般默认为 100M 。可根据项目中的实际需要来修改 |
| 2 | 超出了指定文件大小,根据项目目的业务需求指定上传文件的大小限制 |
| 3 | 只有部分的文件被上传 |
| 4 | 文件没有被上传 |
| 6 | 找不到临时文件夹,可能目录不存在或没权限 |
| 7 | 文件写入失败,可能磁盘满了或没有权限 |

错误级别

|--------------|---------------------------------------|
| 错误类型 | 说明 |
| E_ERROE | 警告,问题比较严重。但是还会继续向下运行 |
| E_NOTICE | 提示,有些小问题不会影响到程序。常发生在项目未定义 |
| E_PARSE | 编译时语法解析错误。解析错误仅仅由分析器产生。 |
| E_ALL | 所有的错误 |
| E_STRICT | 启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。 |
| E_DEPRECATED | 启用后将会对在未来版本中可能无法正常工作的代码给出警告。 |
| | |

error 最严重,必须要解决。不然程序无法继续向下执行
warning 也很重要。但也必须要解决。如果明确的、故意的可以不用处理。
notice 可以不用管。但是在高标准要求的项目中也必须要解决。因为notice会影响到PHP的
执行效率。通常发生在函数未定义等。
parse 错误,是指语法错写错了,必须要解决,代表全部类型的所有错误。

4.上传简单示例

前端代码

html 复制代码
<!DOCTYPE html>
<html>
	<head>
	
	</head>
		<meta charset="UTF-8">
		<title>文件上传</title>
	<body>
		<div>
			<div>欢迎来到上传文件系统</div>
			<form action='upload.php' method='post' enctype='multipart/form-data'>
				请选择文件:<input type='file' name='image'>
				点击上传:<input type='submit'>
				
			</form>
		</div>
	</body>
</html>

php代码

php 复制代码
<?php
header("Content-Type: text/html; charset=utf-8");
	$a = dirname(__FILE__);//获取当前文件所在目录
	$f = $_FILES['image'];//获取上传文件信息,数组型
	//var_dump($f);
	
	$t = time(); //获取时间戳
	//因为上传的文件会作为临时文件,路径在tmp_name,
	//所以需要进行移动到我们需要上传到的文件夹下
	move_uploaded_file($f['tmp_name'], $a.'\\uploads\\'.$t.$f['name']);//移动后,以时间戳重命名
?>

5.php代码简单优化

解决上传文件名为中文乱码情况。 对上传类型进行限制

php 复制代码
<?php
header("Content-Type: text/html; charset=utf-8");
	$a = dirname(__FILE__);
	$f = $_FILES['image'];//获取上传文件信息,数组型
	var_dump($f);
	
	//对上传文件大小进行限制,单位字节
	if($f['size'] > 500000){
		echo "文件太大,请重新选择".'<br>';
		exit;
	}
	
	//对上传文件类型进行限制,如一些常用图片格式
	$types = array('image/jpeg','image/png','image/gif');
	if(!in_array($f['type'], $types)) {
		echo "只支持上传jpeg/png/gif格式的文件".'<br>';
		exit;
	}
	//查看上传返回码,0代表成功
	$error_code = $f['error'];
	if($error_code != 0) {
		echo "上传失败".'<br>';
		exit;
	}
	
	$t = time(); //获取时间戳
	$name = $f['name'];//获取上传的文件名
	$new_name = iconv('utf-8','gbk',$name);//对文件名进行编码
	
	//判断文件是否已上传,把时间戳去掉
	if(file_exists($a.'\\uploads\\'.$new_name)){
		echo '文件已存在';
		exit;
	}
	
	//因为上传的文件会作为临时文件,路径在tmp_name,
	//所以需要进行移动到我们需要上传到的文件夹下
	move_uploaded_file($f['tmp_name'], $a.'\\uploads\\'.$t.$new_name);//移动后,以时间戳重命名
	echo "上传成功".'<br>';
?>
相关推荐
爱学习的白杨树3 分钟前
MyBatis的一级、二级缓存
java·开发语言·spring
OTWOL8 分钟前
两道数组有关的OJ练习题
c语言·开发语言·数据结构·c++·算法
问道飞鱼12 分钟前
【前端知识】强大的js动画组件anime.js
开发语言·前端·javascript·anime.js
拓端研究室12 分钟前
R基于贝叶斯加法回归树BART、MCMC的DLNM分布滞后非线性模型分析母婴PM2.5暴露与出生体重数据及GAM模型对比、关键窗口识别
android·开发语言·kotlin
Code成立13 分钟前
《Java核心技术I》Swing的网格包布局
java·开发语言·swing
Auc2418 分钟前
使用scrapy框架爬取微博热搜榜
开发语言·python
QQ同步助手25 分钟前
C++ 指针进阶:动态内存与复杂应用
开发语言·c++
凯子坚持 c31 分钟前
仓颉编程语言深入教程:基础概念和数据类型
开发语言·华为
小爬虫程序猿33 分钟前
利用Java爬虫速卖通按关键字搜索AliExpress商品
java·开发语言·爬虫
程序猿-瑞瑞35 分钟前
24 go语言(golang) - gorm框架安装及使用案例详解
开发语言·后端·golang·gorm