PHP文件系统概述

>> 本文固定链接: http://php.ncong.com/php_course/file/wenjianxitong.html

>> 转载请注明: 恩聪php 2014年08月08日 于 恩聪PHP学习教程 发表

文件类型

  PHP是以UNIX的文件系统为模型的,因此在Windows系统中我们只能获得“file”、“dir”或者“unknown”三中文件类型。而在UNIX系统中,我们可以获得“block”、“char”、“dir”、“fifo”、“file”、“link”和“unknown”7种类型,各文件类型的详细说明如下表所示:

  在PHP中可以使用filetype()函数获取文件的上述类型,该函数接受一个文件名作为参数,如果文件不存在将返回FALSE。下面的程序是判断文件类型的示例,代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

<?php

    //获取Linux系统下的文件类型    

    echo filetype(‘/etc/passwd‘);      //输出file,/etc/passwd为普通文件

    echo filetype(‘/etc/grub.conf‘);       //输出lilnk,/etc/grub.conf为连接文件-->/boot/grub/grub.conf

    echo filetype(‘/etc/‘);            //输出dir,/etc/为一个目录,即文件夹

    echo filetype(‘/dev/sda1‘);          //输出block,/dev/sda1为块设备,它是一个分区

    echo filetype(‘/dev/tty01‘);          //输出char,为字符设备,它是一个字符终端

    //获取windows系统下文件类型

    echo filetype("C:\\WINDOWS\\php.ini");    //输出file,C:\\WINDOWS\\php.ini为一个普通文件

    echo filetype("C:\\WINDOWS");              //输出dir,C:\\WINDOWS为一个文件夹(目录)

?>

  对于一个已知的文件,还可以使用is_file()函数判断给定的文件名是否为一个正常的文件。和它类似,使用is_dir()函数判断给定的文件名是否是同一个目录,使用is_link()函数判断给定的文件名是否为一个符号连接。

  文件的属性

  在进行编程时,需要使用到文件的一些常见属性,如文件的大小、文件的类型、文件的修改时间、文件的访问时间和文件的权限等。PHP中提供了非常全面的用来获取这些属性的内置函数,如下表所示:

  在表中的函数都需要提供同样的字符串参数,即一个指向文件或目录的字符串变量。PHP将缓存这些函数的返回信息以提供更快的性能。然而在某些情况下,你可能想清楚被缓存的信息。例如,如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清楚文件状态缓存。在这种情况下,可以用clearstatcache()函数来清楚被PHP缓存的该文件信息。clearstatcache()函数缓存特定文件名的信息,因此只在对同一个文件名进行多次操作,并且需要该文件信息不被缓存时才需要调用它。下面的程序中通过调用这些函数获取文件大部分属性。代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

<?php

    //声明一个函数,通过传入一个文件名称获取文件大部分属性

    function getFilePro($fileName){

        //如果提供的文件或目录不存在,则直接退出函数

        if(!file_exists($fileName)){

            echo "目标不存在!!<br>";

            return;

        }

        //判断是否是一个普通文件,如果是则条件成立

        if(is_file($fileName))

            echo $fileName."是一个文件<br>";

        //判断是否是一个目录

        if(is_dir($fileName))

            echo $fileName."是一个目录<br>";

        //用定义的函数输出文件形态

        echo "文件形态:".getFileType($fileName)."<br>";

        //获取文件大小,并自定义转换单位

        echo "文件大小:".getFileSize(filesize($fileName))."<br>";

        if(is_readable($fileName))      //判断提供的文件是否可以读取内容

           echo "文件可读<br>";

        if(is_writable($fileName))      //判断提供的文件是否可以改写

           echo "文件可写<br>";

        if(is_executable($fileName))      //判断提供的文件是否有执行的权限

           echo "文件可执行<br>";

        echo "文件建立时间:".date("Y年m月j日",filectime($fileName))."<br>";

        echo "文件最后更新的时间:".date("Y年m月j日",filemtime($fileName))."<br>";

        echo "文件最后打开时间:".date("Y年m月j日",fileatime($fileName))."<br>";

    }

    //声明一个函数用来返回文件的类型

    function getFileType($fileName){

        //通过filetype()函数返回的文件类型作为选择条件

        switch(filetype($fileName)){

            case ‘file‘: $type .= "普通文件";   break;

            case ‘dir‘: $type .= "目录文件";   break;

            case ‘block‘: $type .= "块设备文件";   break;

            case ‘char‘: $type .= "字符设备文件";   break;

            case ‘fifo‘: $type .= "命名管道文件";   break;

            case ‘link‘: $type .= "符号连接";   break;

            case ‘unknown‘: $type .= "未知类型";   break;

            default:     $type .="没有检测到类型";

        }

        return $type;       //返回转换后的类型

    }

    //自定义一个文件大小单位转换函数

    function getFileSize($bytes){

        if($bytes >= pow(2,40)){           //如果提供的字符数大于等于2的40次方

            $return = round($bytes/pow(1024,4),2);        //将字节大小转换为同等的T大小

            $suffix = "TB";               //单位为TB

        }elseif($bytes >= pow(2,30)){           //如果提供的字符数大于等于2的30次方

            $return = round($bytes/pow(1024,3),2);        //将字节大小转换为同等的G大小

            $suffix = "GB";               //单位为GB   

        }elseif($bytes >= pow(2,20)){           //如果提供的字符数大于等于2的20次方

            $return = round($bytes/pow(1024,2),2);        //将字节大小转换为同等的M大小

            $suffix = "MB";               //单位为MB   

        }elseif($bytes >= pow(2,10)){           //如果提供的字符数大于等于2的10次方

            $return = round($bytes/pow(1024,1),2);        //将字节大小转换为同等的K大小

            $suffix = "KB";               //单位为KB   

        }else{

            $return = $bytes;                             //字节大小单位不变

            $suffix = "Byte";

        }

        return $return." ".$suffix;         //返回合适的文件大小和单位

    }

    //调用自定义函数,将当前目录下的file.php文件传入,获取属性

    getFilePro("file.php");          

?>

除了可以使用这些独立的函数分别获取文件的属性外,还可以使用一个stat()函数获取文件的大部分属性值。该函数将返回一个数组,数组中的每个元素对应文件的一种属性值。该函数的使用如下代码所示:


1

2

3

4

5

6

<?php

    //返回关于文件的信息数组,是关联和索引混合的数组

    $filePro = stat("file.php");

    //只打印其中的关联数组,第13个元素之后为关联数组

    print_r(array_slice($filePro,13));

?>

除了使用stat()函数获取文件的大部分属性值之外,也可以使用对应的函数lstat和fstat()函数取得。和stat()函数略有不同,stat()函数作用于一个普通的文件,lstat()只能作用于一个符号连接,而fstat()函数需要一个资源句柄。

时间: 2024-10-17 20:09:24

PHP文件系统概述的相关文章

JFS 文件系统概述及布局分析

JFS 文件系统概述及布局分析 日志文件系统如何缩短系统重启时间 如果发生系统崩溃,JFS 提供了快速文件系统重启.通过使用数据库日志技术,JFS 能在几秒或几分钟之内把文件系统恢复到一致状态,而非日志文件系统却要花上几小时甚至几天才能完成.本白皮书对 JFS 体系结构作了概述,并且描述了可在 developerWorks 网站上找到的 JFS 技术的设计特性.潜在限制以及管理实用程序. 日志文件系统 (JFS) 提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的.它具有

文件系统概述和EXT2文件系统

文件系统概述和EXT2文件系统 文件系统概述 常用的文件系统有windows98前的FAT.windows2000后的NTFS.linux的Ext2/3/4.SGI的XFS文件系统等 对于传统的文件系统而言,一个分区槽只能格式化为一个文件系统,但是目前由于LVM与软件磁盘阵列技术的出现,使一个分区可以对应多个文件系统,故以下关于文件系统的讨论都不表示针对一个分区了,只是介绍文件系统的特性. linux操作系统会将文件权限.文件属性存在inode中,一个文件对应一个inode,而文件的实际数据会被

Linux文件系统概述

Unix文件是以字节序列组成的信息载体(container),内核不解释文件的内容. Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有系统的结构,所有Linux用户和程序看到的文件.目录.软链接及文件保护信息等都存储在其中. Linux最早的文件系统是Minux,但是专门为Linux设计的文件系统---扩展文件系统第二版(EXT2)被设计 出来并添加到Linux中,这对Linux产生了重大影响. Linux常用的文件系统 ext2:ext2的升级版本ext3是Lin

GlusterFS分布式文件系统概述

博文目录一.GlusterFS概述1.GlusterFS的特点2.GlusterFS术语3.模块化堆栈式架构二.GlusterFS的工作原理1.GlusterFS的工作流程2.弹性HASH算法三.GlusterFS的卷类型1.分布式卷2.条带卷3.复制卷4.分布式条带卷5.分布式复制卷 一.GlusterFS概述 GlusterFS是一个开源的分布式文件系统,同时也是Scale-Out存储解决方案Gluster的核心,在存储数据方面有强大的横向扩展能力,通过扩展不同的节点可以支持PB级别的存储容

文件系统管理

一.文件系统概述 1.文件系统是基于操作系统的,用来管理和组织保存在磁盘驱动器上的数据的系统软件,通过对数据存储布局/空间管理/文件命名/安全控制等 方面的管理,解决了如何在设备上有效的存储数据. 2.文件系统是操作系统与磁盘设备之间交互的一个桥梁,通过文件系统实现了数据合理组织和有效存取,表现在操作系统上就是对文件和目录的管理. 3.元数据:除了保存管理 以文件方式存储的数据外,文件系统也同样将文件以及文件系统自身的一些重要信息(如文件权限/大小/属主等)存放到磁盘上,这些信息称为文件系统的元

Linux 程序设计学习笔记----文件管理系统

本文部分整理自网络 Linux下文件系统管理 1.VFS文件系统概述 linux采用VFS来管理文件系统,而且linux设计的原则之一就是everything is file.因此文件管理系统是linux设计最核心的体现. VFS的全称是Virtual File System (虚拟文件系统). 总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,

网络渗透技术1

1.进程,端口 和 服务 a.一个进程对应着一个程序:当运行一个程序就启动了一个进程:程序是静态的,进程是动态的:完成操作系统功能的是系统进程,由用户启动的就是用户进程: b.一个端口对应着一个服务:可以认为其是计算机和外界通讯交流的出口:端口可以分为硬件端口,软件端口和协议端口.其中 硬件端口:包括USB端口,串行端口等: 软件端口一般指网络中面向连接服务和无连接服务的通信协议接口,包括一些数据结构和I/o(基本输入输出设备)缓冲区等: 协议端口范围为0-65535,如:网页服务接口80,用于

linux_api之文件属性

本篇索引:1.引言2.文件类型3.获取文件属性的函数,stat.fstat.lstat4.超级用户(root用户)和普通用户5.进程与用户ID6.文件权限的检查7.新创建的的文件和目录的所有权8.access函数9.umask函数10.chmod.fchmod函数11.粘住位12.chown,fchown,lchown函数13.文件长度14.文件截断函数15.文件系统概述16.link,unlink,remove,rename函数17.符号连接18.与符号相关的函数,symlink和readli

分布式文件系统

分布式文件系统(Distributed File System,DFS)可以提供文件的访问效率,提高文件的可用性并减轻服务器的负担. 分布式文件系统概述 通过分布式文件系统将相同的文件同时存储到网络上多台服务器后,即可拥有以下功能. 提供文件的访问效率:当客户端通过DFS访问文件时,DFS会引导客户端从最接近客户端的服务器来访问文件,让客户端快速访问到所需的文件.实际上,DFS是提供客户端一份服务器列表,这些服务器内都有客户端所需要的文件,但是DFS会将最接近客户端的服务器,例如客户端同一个AD