PHP 实现文件上传 【很简单三步就搞定】
什么是文件上传?
可以从客户计算机向远程服务器上传文件。
实现思路:
第一步:
传文件
第二步:
取文件
第三步:
移动文件
必备知识:
$_FILES : 【超全局变量二位数组】
第一个参数是表单上传文件 input 的name属性值,第二个下标可以是 “name”, “type”, “size”, “tmp_name” 或 "error"
$_FILES[‘file’][‘name’] ---- 被上传文件的名称
$_FILES[‘file’][’type‘] ---- 被上传文件的类型
$_FILES[’file‘][‘size’] ---- 被上传文件的大小,以字节计算【Byte】
$_FILES[‘file’][’tmp_name‘] ---- 存储在服务器的文件的临时副本的名称
$_FILES[’file‘][‘error’] ---- 由文件上传导致的错误代码
1、UPLOAD_ERR_OK:其值为 0,没有错误发生,文件上传成功。【$_FILES[’file‘][‘error’] == 0 为上传成功】
2、UPLOAD_ERR_INI_SIZE:其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值。
3、UPLOAD_ERR_FORM_SIZE:其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
4、UPLOAD_ERR_PARTIAL:其值为 3,文件只有部分被上传。
5、UPLOAD_ERR_NO_FILE:其值为 4,没有文件被上传。
6、UPLOAD_ERR_NO_TMP_DIR:其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
7、UPLOAD_ERR_CANT_WRITE:其值为 7,文件写入失败。PHP 5.1.0 引进。
必备函数:
strrchr — 查找指定字符在字符串中的最后一次出现
substr — 返回字符串的子串
in_array — 检查数组中是否存在某个值
date_default_timezone_set — 设定用于一个脚本中所有日期时间函数的默认时区
file_exists — 检查文件或目录是否存在
mkdir — 新建目录
date — 格式化一个本地时间/日期
move_uploaded_file — 将上传的文件移动到新位置
示例:
// substr 函数实例
$rest = substr("abcdef", -1); // 返回 "f"
$rest = substr("abcdef", -2); // 返回 "ef"
$rest = substr("abcdef", -3, 1); // 返回 "d"
`// strrchr 函数实例
$a = '123.1.123';
$b = strrchr($a,'.');
echo $b; // .123
// date_default_timezone_set 实例
date_default_timezone_set('PRC'); //中华人民共和国时区
date('Ymd') // 20120616
代码实现:
HTML :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="../upFile.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 “multipart/form-data”。
<input> 标签的 type=“file” 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
PHP文件:
header('Content-type:text/html;charset=utf-8');
if($_FILES['file']['error'] == 0){ // 判断上传是否正确
$fileName = $_FILES['file']['name']; // 获取文件名称
$fileSize = $_FILES['file']['size']; // 获取文件大小
$tmp_name = $_FILES["file"]["tmp_name"]; // 获取上传文件默认临时地址
$fileTypeInfo = ['doc','txt','php']; // 定义允许上传文件类型【很多种只列举3种】
$fileType = substr(strrchr($fileName,'.'),1); // 提取文件后缀名
if(!in_array($fileType,$fileTypeInfo)){ // 判断该文件是否为允许上传的类型
echo '上传失败,文件格式不正确';
die();
}
if($fileSize /1024 > 2){ // 规定文件上传大小【文件为Byte/1024 转为 kb】
echo '上传失败,文件太大请上传小于2Kb';
die();
}
date_default_timezone_set('PRC'); // 定义时间戳
if(!file_exists('./common/uploads')){ // 判断是否存在存放上传文件的目录
mkdir('./common/uploads'); // 建立新的目录
}else{
$newFileName = date('Ymd').'_'.$fileName; // 命名新的文件名称
if(move_uploaded_file($tmp_name,'./common/uploads/'.$newFileName)){ // 移动文件到指定目录
echo ("上传成功");
}
}
}else{
echo "上传失败".$_FILES['file']['error']; // 显示错误信息
}
只是基础知识,望大家多多指教。