PHP文件上传与下载
一:上传文件与报错
$_FILES 超全局数组,包含了有关上传文件的所有信息!
而且,这个数组中只包含文件相关信息,其他数据依然在$_POST里面
$_FILES是一个二维数组,每上传一个文件,都是数组的一个子数组。每个子数组包含信息如下
'name' => string 'css面试题目.docx' (length=20)(上传文件名)
'type' => string 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' (length=71)
(上传文件所属的MIME类型)
'tmp_name' => string 'F:\0PHP\wamp64\tmp\php47F.tmp' (length=29)
(文件上传后在服务器存储的地址)
关于报错
'error' => int 0
0:没错
1:超过服务器限制大小。php.ini文件的upload_max_filesize
2: 超过了客户端限制大小。表单中的隐藏域name="MAX_FILE_SIZE"限制
3.文件只被上传一部分
4.文件没上传
二.上传步骤
var_dump($_FILES);
//取到文件名并用.分隔维数组
$nameArr=explode(".", $_FILES["myFile"]["name"]);
//从上述数组中取到最后一个就是上传文件的后缀名
$houzhuiming=$nameArr[count($nameArr)-1];
//取到使用当前时间+随机数的方式,随机生成文件名
$filename=date("YmdHis").rand(100,999).".".$houzhuiming;
//判断myfile里面的临时文件是不是上传过来的
if(is_uploaded_file($_FILES["myFile"]["tmp_name"])){
//将临时文件移动到服务器www根目录下的upload文件夹下
//成功返回true,否则false
$isOk=move_uploaded_file($_FILES["myFile"]["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/upload".$filename);
if(!$isOk){
die("上传失败");
}
}else{
die("上传文件不合法");
}
echo "<br>文件上传成功";
三.文件下载
文件下载的类型使用MIME类型表示
下载文件的描述,如给出文件名称等
下载文件的长度以字节为单位
header():发送头信息,其前不能有任何输出
<html>
<head>
<title>ddd</title>
<head>
<body>
<form action="todo.php" method="post"
enctype=multipart/form-data>
<input type="file" name="myfile"><br>
<input type="hidden" name="MAX_FILE_SIZE"
value=100000>
<input type="submit" value="上传">
</form>
</body>
</html>
<?php
print_r($_FILES);
echo "<br>";
echo "上传文件的名称是:".$_FILES[myfile][name]."<br>";
echo "上传文件的类型是:".$_FILES[myfile][type]."<br>";
echo "上传文件的类型是:".$_FILES[myfile][tmp_name]."<br>";
$copyto="uploads/".time().$_FILES[myfile][name]; //加上时间或随机数,防止别人利用上传的文件搞破坏
if($_FILES[myfile][error]>0)
{
switch($_FILES[myfile][error])
{
case 1:
echo "上传的文件超过了php.ini中upload_max_filesize的值<br>";
break;
case 2:
echo "上传文件超过了HTML表单的max_file_size的值<br>";
break;
case 3:
echo "文件被部分上传<br>";
break;
case 4:
echo "没有文件上传<br>";
break;
}
exit;
}else
{
if(is_loaded_file($_FILES[myfile][tmp_name]))
{
if(move_uploaded_file($_FILES[myfile][tmp_name],$copyto))
{
echo "拷贝成功<br>";
}else
{
echo "拷贝失败<br>";
}
}
}
echo "上传文件大小为".$_FILES[myfile][size];
?>