• 跟着百度学PHP[12]-文件处理 文件 目录


    00x1 文件的属性

    文件属性 
    <?php 
    //-------------------------定义大小转换函数---------------
    function changesize_dw($size){
        $s = $size;
        $dw = "";#pow(2,40)是2的40次方。
        if($s >= pow(2,40)){#1的10次方就是1024,types到kb就是一次方,kb到mb就是二次方..类推
            $dw = "TB";
        }elseif($s >= pow(2,30)){
            $dw = "GB";
        }elseif($s >= pow(2,20)){
            $dw = "MB";
        }elseif($s >= pow(2,10)){
            $dw = "KB";
        }elseif($s >= pow(1,10)){
            $dw = "types";
        }
        return $s.$dw;
    }
    //---------------------------文件属性--------------------
    function getfile($filename) {
        if(file_exists($filename)){
            echo $filename."这个文件存在<br>";
            switch (filetype($filename)) {
                case 'dir':
                    echo "这是一个目录<br>";
                    break;
                case 'char';
                    echo "这是一个字符设备<br>";
                    break;
                case 'block';
                    echo "这是一个块设备<br>";
                    break;
                case 'link';
                    echo "这是一个链接<br>";
                    break;
                case 'file';
                    echo "这是一个文件<br>";
                    break;
                default;
                    echo "该文件类型是未知类型。<br>";
            }
                    echo "大小:".changesize_dw(filesize($filename))."<br>";
                    echo "取得文件的上次访问时间".fileatime($filename)."<br>";
                    //判断是否可读
                    if (is_readable($filename)) {
                        echo "文件可读<br>";
                    }else{
                        echo "文件不可读<br>";
                    }
                    //判断是否可写
                    if(is_writeable($filename)){
                        echo "文件可写<br>";
                    }else{
                        echo "文件不可写<br>";
                    }
        }else{
            echo "文件不存在<br>";
        }
    }
    getfile("./hello.txt");
     ?>
    CODE

    00x2 解析目录路径

    目录的基本操作

    • 1.解析目录路径
    • 2.遍历目录
    • 3.统计目录大小
    • 4.建立与删除目录
    • 5.复制目录

    注意:

    1. 在linux中是正斜杠,windows中是反斜杠。可以使用DIRRECTORY_SEPARATOR常量(这种变量可夸平台)代替。
    2. 连接多个路径linux中是(:),windows中是(;)(windows案例就是环境变量中)可以使用PATH_SEOARATOR常量(这种变量可夸平台)
    3. 相对路劲:相对的路径  绝对路径:根路劲开始

    00x3 遍历目录

    <?php 
    print_r(glob("./../scripts/*.*"))#glob遍历scripts目录下所有的文件,指定后缀:*.php
     ?>

    输出效果如下所示:

    我们可以使用foreach将其遍历出来。

    <?php 
    foreach(glob("./../scripts/*.*") as $filename){
        echo $filename."<br/>";
    }
     ?>

    输出效果:


    00x4 目录操作

    <?php 
    $a = opendir('def');
    while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名)
        echo $filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。
    }
    closedir($a);#关闭文件夹
     ?>

    想要把.和..去掉。可以使用if

    <?php 
    $a = opendir('def');
    while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名)
        if($filename !="." && $filename !=".."){
        echo $filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。
    }
    }
    closedir($a);#关闭文件夹
     ?>
    View Code

    如果我想要区分出哪些是文件,哪些是目录该咋做呢?

    <?php 
    $a = opendir('def');
    while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名)
        if($filename !="." && $filename !=".."){
            $filename = "/def/".$filename;
    
            if(is_dir($filename)){
                echo "目录:".$filename;
            }else{
            echo "文件:".$filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。
    }
    }
    }
    closedir($a);#关闭文件夹
     ?>

    想要再次遍历一次数组。可以使用rewinddir倒回目录句柄函数。比较简单我就给折叠了。要看自己打开哈。

    <?php 
    $a = opendir('def');
    while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名)
        if($filename !="." && $filename !=".."){
            $filename = "./def/".$filename;
    
            if(is_dir($filename)){
                echo "目录:".$filename."<br>";
            }else{
            echo "文件:".$filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。
    }
    }
    }
    rewinddir($a);
    echo "++++++++++++++++++++++++++++++++++++++++++++++++++<br>";
    while($filename = readdir($a)){#readdir函数是读取$a中的资源(资源即为文件名)
        if($filename !="." && $filename !=".."){
            $filename = "./def/".$filename;
    
            if(is_dir($filename)){
                echo "目录:".$filename."<br>";
            }else{
            echo "文件:".$filename."<br />";#第一次输出就输出第一个文件的文件名,第二次就输出第二次的文件名。
    }
    }
    }
    closedir($a);#关闭文件夹
     ?>
    View Code

    00x5 文件的一些基本操作

    <?php 
    //以下较为简单可以直接查手册。
    //copy("def.txt","hello.txt");
    //rename("hello","world");
    //删除文件:unlink("def");
    //删除变量:unset($a);
    //file_put_contents("./def.txt", "hello world!")     #向def.txt写入hello world!如果第二次写的话会将其覆盖。
    //file_exists #检索文件是否存在
    //readfile("./def.txt")         #输出def.txt文件当中的内容。
    //++++++++++++++++++++++++++++++++++++++++++
    //fread案例:使用二进制的形式去读取文件
    // $a = fopen("./def.txt","rb");//fopen打开的可以是一个URL、一个文件。
    // $b = fread($a,10);
    // echo $b;
    // fclose($a);
    //++++++++++++++++++++++++++++++++++++++++++
    //
    ?>

    fopen的模式:http://www.w3school.com.cn/php/func_filesystem_fopen.asp

    注意哦,w这个模式会将文件清空再打开。

    fwrite写入文件:

    fwrite("./def.txt","你好,世界。");

    fgetc从文件指针中读取文件:

    $a = fopen("./def.txt","r+");
    echo fgetc($a);

    但是这样只可以读取出def.txt里的一个字符。如果要读取出def.txt中的所有内容那么该用switch循环输出。在此之前还要学习一个函数,就是feof函数,feof:当文件指针指到了EOF(end of file,文件的最后)则返回真,否则返回false。

    $a = fopen("./def.txt"."r+");
    switch (!feof($a)){#当$a没有指到文件的最后的时候一直循环
      echo fgetc($a);
    }
    View Code

    但其实fgetc还有第二个参数就是读取的长度。fgetc($a,5);所以我们要读取def.txt里面的所有数据也可以那么写,fgetc($a,filesize('./def.txt'));

    00x6 文件的锁定机制

    文章地址:http://www.cnblogs.com/xishaonian/p/6410382.html

  • 相关阅读:
    贝云cms内容管理系统(thinkphp5.0开源cms管理系统)
    NGINX.conf配置文件支持pathinfo
    阿里云视频直播PHPSDK接入教程
    如何在Nginx下配置PHP程序环境
    tomcat 内存参数优化示例
    12组免费的CSS3按钮强力推荐 狼人:
    9款jQuery插件为你的网站增加亮点 狼人:
    TUP第11期:腾讯、豆瓣精英实例诠释互联网研发之道 狼人:
    【TUP第11期】腾讯黄朝兴:浅谈客户端架构 狼人:
    Linus Torvalds:回顾Linux20年 狼人:
  • 原文地址:https://www.cnblogs.com/xishaonian/p/6400907.html
Copyright © 2020-2023  润新知