1、文件上传原理
上传文件,就是将文件从浏览器端传到服务器端;
上传文件,必须使用
<form name="form1" method="post" enctype="multipart/form-data" action="upload.php">
上传图片1:<input type="file" name="uploadFile[]"><br>
上传图片2:<input type="file" name="uploadFile[]"><br>
上传图片3:<input type="file" name="uploadFile[]"><br>
<input type="submit" value="提交">
<input type="hidden" name="token" value="upload">
</form>
2、超全局变量数组 $_FILES
\(_POST数组中保存的是普通表单元素数据;
\)_FILES数组中保存的是上传文件的信息。
3、上传文件错误代码
提示:0、1、4比较重要。
4、查看上传的临时文件位置
上传文件的默认临时目录,如果没有指定php.ini配置项upload_tmp_dir的值,则使用操作系统临时目录(c:\windows\temp)。通过phpinfo()函数查看。
为什么在 c:\windows\temp 中看不到上专文件呢?因为临时文件是短暂存在的,也就是在脚本执行完毕后,就消失了。
5、将上传文件移动到新位置
描述:本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。最好在临时文件没有消失前移动。
语法:
bool move_uploaded_file ( string $filename , string $destination )
参数:\(filename,指定上传的临时文件名;\)destination,指定新的文件名路径;
注意:如果文件已经存在,则会覆盖操作。
6、上传文件的相关配置(php.ini)
upload_max_filesize配置:上传单个文件的大小限制,默认为2MB。
post_max_size配置:规定上传多个文件的总大小,默认为8MB。
max_file_uploads配置:规定最多上传的文件个数,默认为20个。
7、获取文件路径信息 pathinfo()
描述:返回文件路径的信息 ;
mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )
参数:
\(path,要解析的路径。
\)options,如果省略,返回全部单元;
PATHINFO_DIRNAME,目录名称;
PATHINFO_BASENAME,文件名称;
PATHINFO_EXTENSION,扩展名;
PATH_FILENAME,文件名。
8、检查数组中是否存在某个值 in_array()
描述:检查数组中是否存在某个值
语法:
bool in_array ( mixed $needle , array $arr )
参数:\(needle检索的值,\)arr原数组。
9、生成唯一ID uniqid()
描述:生成一个唯一ID
语法:
string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )
参数:
\(prefix前缀字符串,如果省略,返回字符串长度为13;
\)more_entropy后缀字符串,如果为true,返回字符串长度为23。
实例:单个文件上传
1、上传表单制作upload.html
2、上传文件的程序处理upload.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传原理</title>
</head>
<body>
<form name="form1" method="post" enctype="multipart/form-data" action="upload.php">
上传图片:<input type="file" name="uploadFile">
<input type="submit" value="提交">
<input type="hidden" name="token" value="upload">
</form>
</body>
</html>
<?php
//判断表单是否合法提交
if(isset($_POST['token']) && $_POST['token']=='upload')
{
/*
(1)判断上传文件有没有错误发生
(2)判断上传文件是否超过2MB大小
(3)判断上传文件是不是图片
(4)移动临时文件到虚拟目录中:取出文件扩展名、文件名唯一性
*/
//(1)判断上传文件有没有错误发生
if($_FILES['uploadFile']['error']!=0)
{
echo "<h2>上传文件发生了错误!</h2>";
die();
}
//(2)判断上传文件大小是否超过2MB
if($_FILES['uploadFile']['size']>2*1024*1024)
{
echo "<h2>文件大小超出php.ini中的限制!</h2>";
die();
}
//(3)判断上传文件是不是图片
$arr = array('image/jpeg','image/png','image/gif');
$type = $_FILES['uploadFile']['type'];
if(!in_array($type,$arr))
{
echo "<h2>必须上传图像!</h2>";
die();
}
//(4)移动临时文件,到./upload目录中
$ext = pathinfo($_FILES['uploadFile']['name'],PATHINFO_EXTENSION); //jpg
$tmp_name = $_FILES['uploadFile']['tmp_name'];
$dst_name = "./upload/".uniqid().".".$ext;
move_uploaded_file($tmp_name,$dst_name);
echo "<h2>文件上传成功</h2>";
die();
}else
{
echo "非法操作";
}
实例:多个文件 上传
1、制作上传表单
2、上传多个文件的程序处理
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传原理</title>
</head>
<body>
<form name="form1" method="post" enctype="multipart/form-data" action="upload.php">
上传图片1:<input type="file" name="uploadFile[]"><br>
上传图片2:<input type="file" name="uploadFile[]"><br>
上传图片3:<input type="file" name="uploadFile[]"><br>
<input type="submit" value="提交">
<input type="hidden" name="token" value="upload">
</form>
</body>
</html>
<?php
//判断表单是否合法提交
if(isset($_POST['token']) && $_POST['token']=='upload')
{
print_r($_FILES);
//将三维数组,转成二维数组
$arrs = $_FILES['uploadFile'];
//循环判断,只需要移动有文件上传的
foreach($arrs['name'] as $key=>$name)
{
//如果文件不则,则移动文件
if($name != "")
{
$ext = pathinfo($name,PATHINFO_EXTENSION);
$tmp_name = $arrs['tmp_name'][$key];
$dst_name = "./upload/".uniqid().".".$ext;
move_uploaded_file($tmp_name,$dst_name);
}
}
}else
{
echo "非法操作";
}