>> 本文固定链接: http://php.ncong.com/php_course/file/wenjianxitong.html
>> 转载请注明: 恩聪php 2014年08月08日 于 恩聪PHP学习教程 发表
文件类型
在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为一个文件夹(目录)
?> |
在表中的函数都需要提供同样的字符串参数,即一个指向文件或目录的字符串变量。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()函数需要一个资源句柄。