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>';
?>
相关推荐
ServBay2 天前
告别面条代码,PSL 5.0 重构 PHP 性能与安全天花板
后端·php
JaguarJack4 天前
FrankenPHP 原生支持 Windows 了
后端·php·服务端
BingoGo4 天前
FrankenPHP 原生支持 Windows 了
后端·php
JaguarJack5 天前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo5 天前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack6 天前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay7 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954487 天前
CTF 伪协议
php
BingoGo9 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack9 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端