zoukankan      html  css  js  c++  java
  • (独孤九剑)--文件系统

    【一】文件系统概述

    文件的创建,删除,编辑,复制,粘贴(移动),即文件的增删改查

    【二】读取文件

    打开读取:readfile(string),传入文件路径即可打开读取(如读取成功,则返回字节数)

    打开赋值给变量:file_get_contents(),返回字符型

    打开读取关闭分步操作:fopen,fread,fclose

    ①fopen有两个参数,fopen(打开路径,打开方式),打开方式为只读 / 读写

    ②fread有两个参数,fread(读取文件名,可选,读取最大字节限制)

    ③fclose关闭文件,以免打开的文件占用服务器资源

    fopen打开文件模式列表:

    r      只读,将文件指针指向文件头;

    r+    读写,将文件指针指向文件头;

    w     写入方式打开,将文件指针指向文件头并将文件大小截取为0。如果文件不存在则创建文件

    w+   读写方式打开,将文件指针指向文件头并将文件大小截取为0。如果文件不存在则创建文件

    a      写入方式打开,将文件指针指向文件尾部。如果文件不存在则创建文件

    a+    读写方式打开,将文件指针指向文件尾部。如果文件不存在则创建文件

    x      创建并以写入方式打开。如果已存在,则fopen()调用失败返回FALSE,并生成一条E_WARNING警告级别的错误信息。如果文件不存在则尝试创建

    x+    创建并以读写方式打开。...

    模式对比

     r     只能读,不能fwrite写;

    r+    可读可写;

    w     只能写(将文件指针指向文件头,所以会覆盖)

    w+   可读可写(将文件指针指向文件头,所以会覆盖)

    a      只能写(将文件指针指向文件尾部,所以会追加)

    a+    可读可写(将文件指针指向文件尾部,所以会追加)

    a模式与w模式对比

    a模式为追加(存在时覆盖),w模式为覆盖(存在时覆盖),x模式覆盖(存在时报错警告)

    【三】创建修改文件内容

    (1)获取文件内容

         file_get_contents返回字符串

    不存在则报错,警告错误
    $contents = file_get_contents('./new.txt');
    echo "$contents";

    (2)写入文件内容

       file_put_contents返回字节长度

            向指定文件写入字符串,如果不存在则创建文件,并返回写入的字节长度

    <?php
        $data = "我是新内容";
        $contents = file_put_contents('../tools/demo.txt',$data);
        if($contents){
            echo "写入成功,内容为:".file_get_contents('../tools/demo.txt');
        }else{
            echo "写入失败或没有权限";
        }
    ?>

    (3)fwrite写入内容

     fwrite配合fopen可以进行写入操作,别名是fputs

    如果不存在则会创建文件;有的话会覆盖原有文件内容

    【四】创建临时文件

    之前创建的文件为永久文件,fopen()代开文件时x,w,a,x+,w+,a+等模式打开文件时,均会创建永久文件

    而平时项目开发里,临时文件也经常用到。

    好处:用完即删,不用去维护文件的删除状态

    语法:tmpfile()

    注意:因为临时文件没有具体路径,所以无法读取文件具体信息,只能返回字节数

    <?php
        $file = tmpfile();//创建临时文件
        $content = "向临时文件写入内容";
        $numbytes = fwrite($file, $content);//读取临时文件
        fclose($file);//关闭临时文件,即被删除
        echo "写入了".$numbytes."个字节";
    ?>

    【五】复制,粘贴(移动),重命名,删除文件

    (1)重命名 / 移动:rename(旧名,新名)

    <?php
        fopen('file.txt', 'w+');//创建文件
        $filename = 'file.txt';//旧文件
        $filename2 = '../demo/newfile.txt';//移动到目标文件,并重命名,也可以原名
        rename($filename,$filename2);
    ?>

    若文件不存在则会报错警告(警告级别错误),脚本继续执行

    (2)复制 / 粘贴移动:copy(源文件,目标文件)

    <?php
        fopen('file.txt', 'w+');//创建文件
        $filename = 'file.txt';//源文件
        $filename2 = '../demo/copyfile.txt';//目标文件,复制并重命名
        copy($filename,$filename2);
    ?>

    区别:虽然复制和重命名都可以使得目标文件夹下有文件,但是复制命令会保留原先位置文件,而重命名的移动会使原先目标位置文件移除

    (3)删除文件

    unlink(指定文件路径)

    <?php
        if(unlink('../demo/newfile.txt')){
            echo "删除成功";
        }else{
            echo "删除失败";
        }
    ?>

    注意:人工操作删除后,windows回收站可以看到;但是通过此方法删除的在回收站找不到

    【六】检测文件属性函数

    (1)使用场景举例:

             ①文件锁----安装软件时,如果软件已经存在,就不让进行安装;

             ②安装过程里,如果没有写入权限,则不执行安装;

    (2)函数

             ①文件是否存在file_exists()

    <?php
        fopen('./file.txt', 'w+');
        if(file_exists('./file.txt')){
            echo "文件存在";
        }else{
            echo "文件不存在";
        }
    ?>

            ②文件是否可读is_readable()

            ③文件是否可写is_writeable()

    <?php
        $myfile = fopen('./file.txt', 'w+');
        if(is_readable('./file.txt')&&is_writable('./file.txt')){
            echo "文件可读可写";
        }else{
            echo "文件不可读也不可写";
        };
        fclose($myfile);
    ?>

            ④文件是否可执行is_executable()

    <?php
        $myfile = fopen('./index.php', 'w+');
        if(is_executable('./index.php')){
            echo "文件可执行";
        }else{
            echo "文件不可执行"; 
        };
        fclose($myfile);//如果文件不可执行则会被关闭
    ?>

           ⑤是否是文件is_file()

           ⑥是否是目录is_dir()

           ⑦清除文件缓存clearstatcache()

    (3)场景举例

    ①文件锁

    安装时如果文件已经存在,则提示已经安装。否则会继续安装

    <?php
        if(file_exists('./file.txt')){
            echo "文件已经存在";
    exit;//与die()类似,结束脚本 }
    else{ echo "确定安装"; }; ?>

    【七】文件常用函数和常量

    (1)文件目录分隔符

    Window平台下为 ,例如C:PHPTutorialWWW;而Linux平台下为 /

    注意:windows下也支持 / , 但Linux下不能识别 ,所以开发时最好写 /

    <?php
        $path = $_SERVER['SCRIPT_NAME'];
        echo "当前脚本路径为".$path;
    ?>

    对于 / 有个转 / 为 路径的案例,不太理解,备注下???

    (2)文件指针操作函数

    ①指针回到开始处rewind()

    ②指针向后移动指定字节fseek()

        注意:fread()读取指定长度数组,下次读取时会从原位置接着向后读取

    <?php
        $file = fopen('./test.txt', 'w+');
        $data = "我是输入的数据,我叫Tony";
        $content = file_put_contents('./test.txt', $data);
        echo fread($file, 6)."<br>";//读取到第六个字节
        rewind($file);//向前移动六个字节
        echo fread($file, 6)."<br>";//读取到第六个字节
        fseek($file, 6);//向后移动六个字节
        echo fread($file, 6);//从第6个字节开始读取
        fclose($file);
    ?>

    (3)检测文件大小,统计字节数filesize()

        如果想直接移动到最后,则需要先统计字节数,这时用到filesize()

    (4)把整个文件读入一个数组里--------file

    (5)从文件指针中读取一行,读到最后返回false---fgets

    (6)从文件指针中读取一个字符,读到最后返回false---fgetc

    (7)将文件截取到指定的长度--ftruncate

    (8)文件时间函数

             主要为创建,修改,上次访问时间

             ①filectime();创建时间;②filemtime();修改时间;③fileatime();上次访问时间

    <?php
        $file = fopen('./test.txt', 'w+');
        $time1 = filectime('./test.txt');//创建时间
        $time2 = filemtime('./test.txt');//修改时间
        $time3 = fileatime('./test.txt');//上次访问时间
        fclose($file);
    ?>

    【八】文件锁处机制

    文件锁的用途:

    锁定文件,例如当两个人同时打开一个文件编辑保存时权限问题,所以禁止多人同时操作文件

    注意:不论是否加了文件锁,都要释放

    锁属性

    LOCK_SH       取得共享锁定(读取的程序)

    LOCK_EX       取得独占锁定(写入的程序)

    LOCK_UN      释放锁定(无论独占或共享)

    <?php
        $file = fopen('./test.txt', 'w+');
        //进行排他锁的锁定
        if(flock($file, LOCK_EX)){
            fwrite($file, "这时我独占了文件");
            //释放锁定
            flock($file, LOCK_UN);
        }else{
            echo "锁失败,可能有人在操作,此时无法上锁";
        }
        fclose($file);
    ?>

    【九】目录处理 / 文件夹处理

    之前的都是文件处理,这里介绍下目录和文件夹的处理函数(PS:目录就是文件夹,文件夹就是目录)

    (1)处理文件夹基本思路:

    ①读取某路径的时候判断是否是文件夹;

    ②是文件夹的话,打开指定文件夹,返回文件目录的资源变量;

    ③readdir逐个读取目录中的文件,每读取一个,文件指针后移一次;

    ④使用readdir读取到最后,没有可读文件返回false;

    ⑤关闭文件目录

    (2)文件夹 / 目录处理函数

    is_dir        判断是否是文件夹

    opendir     打开文件夹,返回操作资源

    readdir     读取操作资源

    closedir    关闭文件夹操作资源

    filetype     判断文件 / 文件夹,文件显示file,文件夹显示dir

    <?php
        $dir = 'd:/';
        if(is_dir($dir)){
            if($dn = opendir($dir)){
                echo readdir($dn)."<br>";
                echo readdir($dn)."<br>";
                echo readdir($dn)."<br>";
                echo readdir($dn)."<br>";
                echo readdir($dn)."<br>";
                echo readdir($dn)."<br>";
                closedir($dn);
            }
        }else{
            echo "不是文件夹";
        }
    ?>

    一次性读取完

    <?php
        $dir = '../WWW';
        if(is_dir($dir)){
            if($dn = opendir($dir)){
                while (($file = readdir($dn)) !== false) {
                    echo "文件名是:".$file.";"."文件类型是:".filetype($dir.$$file)."<br>";
                }
                closedir($dn);
            }
        }else{
            echo "不是文件夹";
        }
    ?>

    【十】文件权限设置

    使用场景:普通用户只能读取,不可以操作

    chmod    修改读取模式

    chgrp     修改用户组

    chown    修改权限

    【十一】文件路径函数

    (1)使用场景

    ①去除文件后缀;

    ②路径里只取名字,不取目录;

    ③只取路径名中的目录路径;

    ④解析网址中各部分,取得独立值;

    ⑤自己组个url;

    (2)常用路径处理函数

    pathinfo             返回文件各个组成部分

    basename         返回文件名

    dirname             文件目录

    parse_url           解析网址

    http_build_query   生成url中query字符串

    http_build_url        生成一个url

    ①pathinfo             返回文件各个组成部分

     解析网址的3种方法,我在文章http://570109268.iteye.com/admin/blogs/2413423里做了总结

    <?php
        $path_part = pathinfo('c:/PHPTutorial/WWW/index.php');
        echo "文件目录名:".$path_part['dirname']."<br>";
        echo "文件全面:".$path_part['basename']."<br>";
        echo "文件扩展名:".$path_part['extension']."<br>";
        echo "不包含扩展的文件名:".$path_part['filename']."<br>";
    ?>

    输出结果:

    文件目录名:c:/PHPTutorial/WWW
    文件全面:index.php
    文件扩展名:php
    不包含扩展的文件名:index

    ②basename        返回文件名

    语法:basename(路径,后缀可选)

    <?php
    $path = "/testweb/home.php";
    //显示带有文件扩展名的文件名
    echo basename($path);//输出home.php
    //显示不带有文件扩展名的文件名
    echo basename($path,".php");//输出home
    ?> 

    ③dirname     文件目录

    ④http_build_query()   绑定参数

    作用:生成url种的query字符串,使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串

    <?php
        $user = array('name' => 'Tony', 'age' => 23);
        $userInfo = http_build_query($user);
        echo $userInfo;
    ?>

    这个有什么用呢,这是模拟http请求的,把得到的数据data通过函数URL-encode,一般是用在回调

    【十二】PHP实现文件留言本

    主要用到数据存储于读取

    【十三】PHP修改配置文件

     PHP可以编写修改配置文件

  • 相关阅读:
    HTTP协议
    2018年终总结
    HTML页面全屏/退出全屏
    HTML多图无缝循环翻页效果
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 错误解决
    Springboot 整合Activiti流程设计器 完成一个简单的请假流程
    阿里云ECS云服务器Linux Tomcat启动慢 访问网页转圈
    Apach Shiro MD5密码加密过程(明文生成密码过程)详细解析
    SpringBoot 常用配置 静态资源访问配置/内置tomcat虚拟文件映射路径
    Springboot 结合百度IORC实现自定义模板图片识别
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8587942.html
Copyright © 2011-2022 走看看