PHP文件上传-单文件上传函数

news/2024/7/5 11:19:07

为什么80%的码农都做不了架构师?>>>   hot3.png

文件上传函数:upload5.php

<?php
/**
 * @param array $file 文件上传的信息
 * @param string $path 文件存放路径,不会自动生成,需要手动创建
 * @param array $allowType 文件上传类型,默认是只允许上传图片类型
 * @param int $maxSize 上传文件大小限制,字节数,默认不限制大小
 * @return array $info 返回状态信息
 */
function uploadFile($file,$path,$allowType=array(),$maxSize=0){
	// 第一步 设置文件上传状态提示信息
	$info = array(
			'isok' => false,	// 文件上传状态标识
			'message' => ''		// 文件上传提示信息
		);

	// 第二步 判断文件上传错误号,这个从根本上表名文件上传是否成功
	if($file['error']>0){	// 如果错误号大于0,说明上传有问题
		switch ($file['error']) {
			case 1:
				$info['message'] = '文件大小超出PHP的限制';
			break;
			case 2:
				$info['message'] = '文件大小超出HTML的限制';
			break;
			case 3:
				$info['message'] = '文件只有部分被上传';
			break;
			case 4:
				$info['message'] = '没有文件被上传';
			break;
			default:
				$info['message'] = '未知错误';
			break;
		}

		// 终止执行
		return $info;
	}

	// 验证文件类型
	if(empty($allowType) || !is_array($allowType)){
		$allowType = array('image/jpeg','image/png','image/gif','image/pjpeg','image/x-png');
	}

	if(!in_array($file['type'], $allowType)){
		$info['message'] = '文件类型不符合要求';
		return $info;
	}

	// 验证文件大小
	if($maxSize && $file['size']>$maxSize){
		$info['message'] = '文件太大,超出限制';
		return $info;
	}

	// 检测文件是否是通过HTTP POST方式上传的
	if(is_uploaded_file($file['tmp_name'])){
		// 处理上传路径
		$path = rtrim($path,'/').'/';
		// 获取文件后缀
		$suffix = pathinfo($file['name'],PATHINFO_EXTENSION);
		// 生成文件名
		do{
			$filename = date('YmdHis').mt_rand(1000,9999).'.'.$suffix;
		}while(file_exists($path.$filename));

		// 判断移动文件是否成功
		if(move_uploaded_file($file['tmp_name'], $path.$filename)){
			// 上传成功,修改状态信息
			$info['isok'] = true;
			$info['message'] = $path.$filename;	// 返回文件路径,用于写入数据库
			return $info;
		} else {
			$info['message'] = '文件移动失败';
			return $info;
		}
	} else {
		$info['message'] = '请使用HTTP POST方式上传';
		return $info;
	}
}

 

使用方法:
HTML表单页面

 

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<form action="./1.php" method="post" enctype="multipart/form-data">
		文件:<input type="file" name="file"><br><br>
		<input type="submit" value="上传">
	</form>
</body>
</html>

 

 

接收处理文件上传页面

<?php
	header("Content-type:text/html;charset=utf-8");
	date_default_timezone_set("PRC");

	// 引入函数
	include('./upload5.php');

	// 接收表单传递的数据
	$file = $_FILES['file'];

	// 设置路径
	$path = './upload/';

	// 调用函数
	$info = uploadFile($file,$path);

	// 输出信息
	if($info['isok']){
		echo '上传成功!文件名:'.$info['message'];
	} else {
		echo '上传失败!错误信息:'.$info['message'];
	}

 

转载于:https://my.oschina.net/richmk/blog/699166


http://www.niftyadmin.cn/n/3862798.html

相关文章

mysql之导入与导出

SELECT INTO…OUTFILE语句把表数据导出到一个文本文件中&#xff0c;并用LOAD DATA …INFILE语句恢复数据。但是这种方法只能导出或导入数据的内容&#xff0c;不包括表的结构&#xff0c;如果表的结构文件损坏&#xff0c;则必须先恢复原来的表的结构。一、SELECT INTO…OUTFI…

linux 未跑程序 内存 cache使用过大

linux与windows不同&#xff0c;会存在缓存内存&#xff0c;通常叫做Cache Memory。有些时候你会发现没有什么程序在运行&#xff0c;但是使用top或free命令看到可用内存会很少&#xff0c;此时查看Linux系统 /proc/meminfo 文件&#xff0c;会发现有一项 Cached Memory&#x…

并查集,是否成树,Poj(1308)

思路&#xff1a; 对于每一条新的边的两个端点&#xff0c;是否是属于一颗树&#xff0c;要是的话&#xff0c;就不是一颗树。否则&#xff0c;就合并。 这里要注意的是&#xff0c;不能是森林&#xff0c;我这里WA了两次了。只不过在最后&#xff0c;查看每个节点的祖先是否是…

jquery分页插件

引用 <link href"css/jBootstrapPage.css" rel"stylesheet"/> <script src"js/jBootstrapPage.js"></script> 配置 <div><ul class"pagination"></ul> </div> <script type"text/j…

python 元祖(tuple)

元祖和列表几乎相同&#xff0c;但是元祖一旦初始化是不可变更内容的 元祖的表示方式是caassmates()&#xff0c; 要记住所有列表能用的。元祖都能用&#xff0c;但是就是不能变内容 注&#xff1a;记住&#xff0c;在python中的元祖&#xff0c;为了引起不必要的麻烦&#xff…

openal-soft

from转载于:https://www.cnblogs.com/Searchor/p/5614544.html

java.lang.Long cannot be cast to java.lang.Integer解决办法

情景&#xff1a; mybatis连接oracle 报错&#xff1a; 测试增的时候&#xff0c;报错 Java.lang.Long cannot be cast to java.lang.Integer&#xff1b;删改没有报错。 排查过程&#xff1a; 1.先针对映射的sql进行排查&#xff0c;打印sql&#xff0c;直接在oracle上执行&a…

UART Explained(转载)

做嵌入式开发&#xff0c;UART几乎是必不可少的&#xff0c;调试串口、GPS、GPRS、Bluetooth等模块很多都是用的UART接口。时下火热的IoT也不乏UART的身影&#xff0c;串口的BLE、WIFI、Zigbee、Lora等等模块&#xff0c;一堆一堆。前一篇提到的NUC972竟然内置了11个UART&#…