php文件处理

文件系统: (函数参考-》文件系统相关扩展-》Filesystem)
    当程序运行时的数据是存放在内存中的,比如变量、常量等;想要长期保存程序运行完毕所产生的数据,我们可以利用文件的方式存储到硬盘上!


文件类型:
    可以通过filetype()获取一个文件的类型
    windows最常见的只有dir和file


判断文件类型
    is_dir(路径)  //判断是否是目录
    is_file(路径) //判断是否是文件


    //了解
    is_readable(路径)     //是否可读
    is_writable(路径)     //是否可写
    is_executable(路径) //是否可执行


文件的属性:(什么叫属性?比如大小、创建时间。。。)
    检测文件或目录是否存在
        file_exists(路径);
    获取文件大小
        filesize(文件路径);     //单位为字节
    获取相关时间
        filectime(文件路径);    //创建时间  create
        filemtime(文件路径);    //修改时间  modify
        fileatime(文件路径);    //访问时间  active


目录相关
    常见路径格式:
        windows
            C:/www/index.php
            C:wwwindex.php
        Linux
            /var/www/index.php
        相对路径
            ./index.php
            ../1.jpg
    路径相关的函数
        basename()取出路径中的文件名部分
        dirname()去除路径中的文件名部分
        pathinfo()获取路径中的所有信息
        realpath() 获取规范的绝对路径(文件必须存在,否则返回false)


遍历目录
    opendir(目录路径) 打开一个目录
    readdir(资源) 读取一个目录资源,并将指针往前移,返回文件或目录名
    closedir(资源) 关闭一个目录


扩充:iconv(原字符集, 目标字符集, 字符串)字符集转换


创建和删除目录
    mkdir('目录'[, 权限, true]) 创建目录
        在Windows中权限被忽略,Linux中0777表示最高权限
        第3个true,表示递归创建目录
        注意:创建的目录已存在会报错


    rmdir('目录路径') 删除目录,只能删除空目录


    unlink('文件路径') 删除文件
        文件路径:
            相对路径:./a/b/c/1.txt
            绝对路径:C:wampwwwphp15ac1.txt
        注意:http的绝对路径无法删除


文件的基本操作
    touch('文件名'); 设定文件的修改时间
        如果文件不存在,则会被创建。
    copy(原文件名,新文件名);
        只能复制一个文件,不能复制目录
    rename(旧名,新名);
        重命名一个文件,其实相当于剪切


文件操作:
    打开文件
        fopen('文件路径', 打开方式);
        打开方式:
            'r'     只读方式打开,将文件指针指向文件头。  
            'r+'    读写方式打开,将文件指针指向文件头。  
            'w'     写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。  
            'w+'    读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 
            'a'     写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。  
            'a+'    读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 
 
        w或w+/a或a+,如果不存在会自动创建
        r或r+,不会自动创建文件
    写文件
        fwrite(资源, '写的内容');
            写的位置由打开方式决定
    读文件
        fread(资源, 读的长度);
            读的长度必须大于0
    关闭文件
        fclose(资源);


简单的文件读写:(常用)
    file_get_contents(文件路径)
        读取文件内容,返回文件内容的字符串
    file_put_contents(文件路径,写的内容[, FILE_APPEND])
        文件不存在就创建;默认为覆盖内容,可以用第3个参数设置为追加


文件上传和下载
    上传用到头像、相册、网盘、资料、种子、资源等
    下载资料、种子、资源、图片等


文件的上传
    就是将文件从客户端上传到服务端
    实现步骤:
        1、表单的设置
            1.要做文件上传,method必须使用post
            2.必须在form标签里面加:enctype="multipart/form-data"
                enctype:用于指定在发送数据到服务器之前如何对表单数据进行编码
                multipart/form-data:表示不对数据进行编码,以文件流(二进制)的形式上传到服务器。
                application/x-www-form-urlencoded:默认选项,默认对所有字符进行编码
            3.<input type="hidden" name="MAX_FILE_SIZE" value="2000">


        2、服务器端的设置 php.ini
            1. file_uploads = On 是否允许文件上传
            2. upload_max_filesize = 2M 上传文件最大允许范围
            3. post_max_size = 8M POST表单上传数据的最大允许范围
            4. upload_tmp_dir ="c:/wamp/tmp" 上传文件的临时目录
            注意:
                post_max_size的值一定要大于upload_max_filesize的值


        3、PHP代码处理文件的上传
            1. 上传后的数据用$_FILES接收。
            2. $_FILES中每个元素的意思
                name    上传的文件名
                type    文件类型
                tmp_name    临时文件路径
                    文件上传的原理:就是在脚本执行完毕之前将文件从这个临时路径里面弄出来,因为这货会在脚本执行完毕后自动删除
                error   错误号
                    其值为 0,没有错误发生,文件上传成功。
                    其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
                    其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
                    其值为 3,文件只有部分被上传。
                    其值为 4,没有文件被上传。
                    其值为 6,找不到临时文件夹。
                    其值为 7,文件写入失败。(比如你的临时目录没有写的权限)
                size    文件大小,单位为字节


执行文件上传:
    move_uploaded_file(临时文件名, 新文件名);
    本函数检查文件是否是合法的上传文件


完整的文件上传步骤
    1、判断错误号
    2、判断文件的mime类型
    3、判断文件的大小
    4、生成随机的文件名
    5、获取文件的后缀名
    6、判断并执行文件上传
        is_uploaded_file()


文件下载:
    将文件从服务器下载到客户端
    注意:如果浏览器能够识别该文件的mime类型,会直接解析;如果不能识别,则提供下载


    所以,我要手动告诉浏览器,这是一个附件,你不要给我解析出来


    步骤:
        1.告诉它是一个附件
            header('Content-disposition:attachment')
        2.下载的文件没内容
            在php输出的内容会被下载
            用readfile()读取并输出
        3.结合第1步,给文件取个名字
            header('Content-disposition:attachment;filename=xxoo.jpg')
        4.告诉它文件的大小
            header('Content-length:'.filesize('文件路径'));
        5.告诉它文件的类型
            header('Content-type:image/jpeg');
原文地址:https://www.cnblogs.com/hoewang/p/10257258.html