

来自:https://www.yisu.com/zixun/615870.html
1. 关于文件上传
文件上传实际就是用POST方式提交的,不需要调用专门的过程与函数,上传的原理类似表单提交数据到数据库
2. 关于$_FILES
简单的说$files就是一个变量(类似的预定义变量还有$_POST,$_GET,$_COOKIES,$_SERVER,$_SESSION),用来保存上传文件的信息,如果上传单个文件,它就是个二维数组,如果是多个文件就是三维数组,这个变量$_FILES中保存中上传文件的各种信息,如文件名,类型,上传过程中是否有错误,文件大小,临时保存位置
变量的值有:
$FILES['file']['name'] ; #文件名称
$FILES['file']['type'] ; #文件的MIME类型,需要浏览器提供该信息的支持
$FILES['file']['size'] ; #已上传文件的大小,单位为字节
$FILES['file']['tmp_name'] ; #文件被上传后在服务端储存的临时文件名
$FILES['file']['error'] ; #该文件上传相关的错误代码
其中$FILES['file']['error']的值又有:
UPLOAD_ERR_OK 值:0; 没有错误发生,文件上传成功
UPLOAD_ERR_INI_SIZE 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值
UPLOAD_ERR_FORM_SIZE 值:2;上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值
UPLOAD_ERR_PARTIAL 值:3; 文件只有部分被上传
UPLOAD_ERR_NO_FILE 值:4;没有文件被上传, 值:5; 上传文件大小为0
多文件上传的示例代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP多文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="upfile[]"><br>
<input type="file" name="upfile[]"><br>
<input type="file" name="upfile[]"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
<?php
if(!empty($_FILES)){
$tmpname = $_FILES['upfile']['tmp_name'];
$name = $_FILES['upfile']['name'];
$path = './phptest'; //文件保存在当前目录下的phptest中
for ($i=0; $i < count($tmpname); $i++) {
$file_name = date('YmdHis').rand(100,999).$name[$i]; //文件名前加上当前年月日时分秒和100到999间的随机时防止重复
if(move_uploaded_file($tmpname[$i], $path.'/'.$file_name)){
echo $name[$i].' 上传成功!<br>';
}else{
echo $name[$i].' 上传失败!<br>';
}
}
}
?>
其它说明:
上传文件还要看php.ini文件中各项的配置参数,php.ini位置可通过php_info()函数显示的Loaded Configuration File一栏的值找到。
php.ini中的文件太多可以使用ctrl+F来搜索相关配置项。那我们需要配置的参数如下:
file_uploads: on,说明服务器开启了文件上传功能;如果为 off,则说明服务器关闭了文件上传功能。
upload_tmp_dir:上传文件的临时目录。在文件被成功上传之前,文件首先会存放到服务器端的临时目录中,不设置的为系统默认的目录。
upload_max_filesize:服务器允许上传文件的最大值,以MB为单位。
max_execution_time:PHP 中一个指令所能执行的最大时间,单位是秒。
memory_limit:PHP 中一个指令所分配的内存空间,单位是 MB。