kano个人技术博客讲解php文件系统关于信息获取的基本函数

kano个人技术博客 php教程 1,088 次浏览 没有评论

在后端开发的语言中,文件的处理必不可少,图片的上传与下载、文件夹的相关操作、文件的写入与读取,都是经常会使用到的操作。由于内容较多,本文是kano博客对php文件/目录的信息获取做一个介绍。

关于服务器环境:由于php对文件系统的操作是基于Unix系统的,因此其中的很多函数类似于UNIX Shell命令,在Windows中并没有提供UNIX的文件系统特性。所以有一些php文件处理函数不能在windows服务器中使用(即wamp环境下某些函数不能用),但绝大多数函数的功能是兼容的。

php文件系统

中文路径:由于编码的原因,php读取中文的路径比较容易出问题,kano个人博客建议大家尽量将目录和文件的名字起成英文的。

路径分隔符:我们知道,在Windows中我们用“\”来分隔路径,在Linux中我们用“/”来分隔路径,而正斜杠“/”是兼容Linux和Windows的,所以方便记忆建议统一使用“/”。

 一、获取文件/目录类型{

可以使用filetype函数,它接受一个路径字符串作为参数,返回文件类型,如果文件/目录不存在返回 false

var_dump(filetype('./test.php'));
   var_dump(filetype('./Public'));

目录类型

可能的文件类型:{

Windows下:file  dir  unknown

Linux下:block  char  dir  fifo  file  link  unknown

}

}

二、获取文件/目录属性{

获取文件属性的函数有很多:

file_exists  检测文件或目录是否存在

filesize  取得文件大小

filectime  获取文件的创建时间

filemtime  获取文件的修改时间

fileatime  获取文件的访问时间

stat  获取文件大部分属性值

fstat  通过已打开的文件指针取得文件信息,和stat相似,只是它的参数为已打开的文件指针而非路径字符串

clearstatcache  清除缓存的文件信息,上述函数在调用的时候将会缓存文件信息以节约性能,如果你要多次获取文件信息,期间文件可能被修改或删除时,你就需要清除缓存了。

echo '文件test.php是否存在:';
var_dump(file_exists('./test.php'));
echo "\n";

echo '文件test888.php是否存在:';
var_dump(file_exists('./test888.php'));
echo "\n\n";

echo '文件test.php的大小:';
echo filesize('./test.php') . '字节';
echo "\n\n";

echo '文件test.php的创建时间:';
echo date('Y-m-d H:i:s', filectime('./test.php'));
echo "\n\n";

echo '文件test.php的修改时间:';
echo date('Y-m-d H:i:s', filemtime('./test.php'));
echo "\n\n";

echo '文件test.php的访问时间:';
echo date('Y-m-d H:i:s', fileatime('./test.php'));
echo "\n\n";

echo '使用stat获取文件属性:';
print_r(stat('./test.php'));

获取文件目录属性

可以看到stat能获取的文件信息很多,kano个人技术博客这里就不一一解释了,大家可以自己去看手册。

fstat的参数是由fopen这类函数返回的句柄,可获取到的信息和stat一样,也不举例了。

}

三、文件/目录判断{

有时你会想判断给出的路径是否是一个文件,或者是否是一个目录?以及文件是否可读可写,下面的函数可以帮上忙。

is_file  判断给定路径字符串是否是一个文件,如果路径存在且是一个文件返回true,否则返回false

is_dir  判断给定路径字符串是否是一个目录,如果路径存在且是一个目录返回true,否则返回false

is_readable  指定的文件/目录存在且可读返回true,否则返回false

is_writable  指定的文件/目录存在且可写返回true,否则返回false

is_executable  判断给定的文件是否可执行,需要注意函数其实只在乎文件是否有可执行权限,而不在乎文件是否是一个可执行文件(有执行权限的txt文件也会返回true)

is_link  判断文件是否是一个符号链接

echo 'test.php是一个文件:';
var_dump(is_file('./test.php'));
echo "\n";

echo 'test.php是一个目录:';
var_dump(is_dir('./test.php'));
echo "\n";

echo 'Public是一个目录:';
var_dump(is_dir('./Public'));
echo "\n";

echo 'test.php可读:';
var_dump(is_readable('./test.php'));
echo "\n";

echo 'test.php可写:';
var_dump(is_readable('./test.php'));
echo "\n";

echo 'xx.sh可执行:';
var_dump(is_executable('./xx.sh'));
echo "\n";

echo 'xx.sh是一个符号链接:';
var_dump(is_link('./xx.sh'));
echo "\n";

echo 'xxx是一个符号链接:';
var_dump(is_link('./xxx'));
echo "\n";

文件目录判断

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Go