• 微信号
目录

php基础

您当前的位置:首页 > 我的笔记 > php基础>php文件上传与下载

上一篇: php目录操作

下一篇:没有了

php文件上传与下载

文件的上传和小钟是web中最常见的应用之一。在php中可以接受任意来自标准浏览器的上传文件,使用这种特性可以上传文本文件、图像或二进制文件。

文件上传

文件上传的过程实质上就是文件复制的过程。首先需要通过浏览器端通过http协议将文件上传到服务器端的文件夹、然后在将其移动到指定的目录,从而完成文件的上传。

在文件的上传过程中,会涉及到客户端表单的和服务器端文件操作。

1.文件上传表单

在实现文件上传时,首先需要设置文件上传表单的提交方式必须为POST。另外,还需要添加上传属性enctyoe="multipart/from-data",该属性说明浏览器可以提供文件上传功能,服务器端提交的数据包含文件的数据。

案例:from.html(文件上传表单代码如下所示)

<!-- 表单的上传方式为post,并且enctype属性提示表单为二进制文件数据 -->
<form action="test.php" method="post" enctype="multipart/form-data">
    <!-- type属性为hhidden,表示掩藏,通过value值指定 允许上传的文件大小-->
    <input type="hidden" name="file_size" value="30000"/>
    <!-- 显示文件输入框,提供“浏览” 按钮用于选择文件-->
    选择文件:<input type="file" name="userfile">
    <input type="submit" value="上传文件">
</form>

通过表单可以完成文件上传的操作,该表单与普通表单有一些不同,如下

  • 表单的提交方式为post,并且具有一个enctype属性提示表中有二进制文件数据
  • 第一个input标签,type属性值"hidden"表示掩藏
  • 第二个input标签,type属性值"file"表示文件输入,并提供按钮用于文件上传

2. php处理上传文件

当用户通过上传表单选择一个文件提交后,php会自动生成一个$_FILES二维数组,该数组保存了上传文件的信息

如:表单中选择文件的代码如下

<input type="file" name="userfile"/>

关于该文件的所有信息都包含在$_FILES['userfile']数组中,并且改数组包含了多个键,具体如下:

  • $_FILES['userfile']['name']:上传文件的名称,如test.txt,pic.png等
  • $_FILES['userfile']['typee']:上传文件的MIME类型,如images/png
  • $_FILES['userfile']['size']:上传文件的大小,以字节为单位
  • $_FILES['userfile']['tmp-name']:存储在服务器文件的临时文件名称
  • $_FILES['userfile']['error']:由文件上传导致的错误代码

上传文件出现错误时,$_FILES['userfile']['error']会返回不同的常量表示不同的错误,具体如下

代码 常量值 说明
0 UPLOAD_ERR_OK 没有发生错误,文件上传成功
1 UPLOAD_ERR_INI_SIZE 文件大小超过了php.ini中upload_max_filesize选项的限制
2 UPLOAD_ERR_FORM_SIZE 文件大小超过了表单中max_file_size选项的制定值
3 UPLOAD_ERR_PARTIAL 文件只有部分上传
4 UPLOAD_ERR_NO_FILE 没有文件被上传
6 UPLOAD_ERR_NO_TMP_DIR 找不到临时文件
7 UPLOAD_ERR_CANT_WRITE 文件写入失败

文件上传成功后会暂时存储在服务器端的临时文件夹中(C:/windows/temp),为了让文件存储带指定目录中,需要使用is_uploaded_file()函数move_uploaded_file()函数进行设置

is_uploaded_file()函数用于判断文件是否通过http post 上传,move_uploaded_file()函数用于将上传的文件从临时存储文件夹中移动到指定位置

案例:实现文件上传功能

<?php
    //判断文件上传到临时的目录是否会出错,如果出错返回错误信息并退出
    if($_FILES['userfile']['error']>0){
        $error_msg ="上传错误:";
        switch($_FILES['username']['error']){
            case 1;
            $error_msg.="文件大小超出系统设置大小";
            break;

            case 2;
            $error_msg.="文件大小超出指定设置";
            break;
            case 3;
            $error_msg.="文件只有部分倍上传";
            break;
            case 4;
            $error_msg.="文件没有被上传";
            break;
            case 6;
            $error_msg.="找不到临时文件夹";
            break;
            case 7;
            $error_msg.="文件上传失败";
            break;
            default:
            $error_msg.="未知错误";
            break;
        }
        echo $error_msg;
        exit;
    }
    //上传到临时目录成功,并将其复制到指定文件位置中(uploads文件夹)
    $destination='uploads/'.$_FILES['userfile']['name']; //目标文件
    if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
        if(move_uploaded_file($_FILES['userfile']['tmp_name'],$destination)){
            echo "文件上传成功";
        }
    }
?>

运行表单所在的html文件,选择好文件后,点击上传

陵小宇博客-php上传文件

运行结果

陵小宇博客-php上传文件

为验证test.txt文件已经上传到指定文件夹中,打开指定文件

陵小宇博客-php上传文件

上一篇: php目录操作

下一篇:没有了