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: PHPwamp64 mpphp47F.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"]);
//从上述数组中取到最后一个就是上传文件的后缀名
$houz*g=$nameArr[count($nameArr)-1];
//取到使用当前时间+随机数的方式,随机生成文件名
$filename=date("YmdHis").rand(100,999).".".$houz*g;
//判断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];
?>