您的位置:首页 > 编程语言 > PHP开发

PHP进阶(第五弹:文件系统)

2017-09-04 23:29 423 查看

读取文件

PHP中最简单的读取文件的函数为
file_get_contents
,可以将整个文件全部读取到一个字符串中。如:

$content = file_get_contents('./test.txt');


file_get_contents
也可以通过参数控制读取内容的开始点以及长度。如:

$content = file_get_contents('./test.txt', null, null, 100, 500);


也可以使用fopen,fgets,fread等方法来读取文件,fgets可以从文件指针中读取一行,freads可以读取指定长度的字符串。如:

$fp = fopen('./text.txt', 'rb');
while(!feof($fp)) {
echo fgets($fp); //读取一行
//echo fread($fp, 1028); // 一次读取1028个字符
}
fclose($fp);


使用fopen打开的文件,最好使用fclose关闭文件指针,以避免文件句柄被占用。

写入文件

最简单的方式是采用
file_put_contents


$filename = './test.txt';
$data = 'test';
file_put_contents($filename, $data);
// 此处$data参数可以是一个一维数组,当$data是数组的时候,会自动的将数组连接起来,相当于$data=implode('', $data);


也可以使用fwrite进行文件写入。

$fp = fopen('./test.txt', 'w');
fwrite($fp, 'hello');
fwrite($fp, 'world');
fclose($fp);


判断文件是否存在

常用来判断文件存在的函数有两个
is_file
file_exists


$filename = './test.txt';
if (file_exists($filename)) {
echo file_get_contents($filename);
}


file_exists
不仅可以判断文件是否存在,同时也可以判断目录是否存在,而
is_file
是确切的判断给定的路径是否是一个文件。

可以使用
is_readable
is_writeable
判断文件是否可读与可写。

$filename = './test.txt';
if (is_writeable($filename)) {
file_put_contents($filename, 'test');
}
if (is_readable($filename)) {
echo file_get_contents($filename);
}


取得文件的元属性

文件有很多元属性,包括:文件的所有者、创建时间、修改时间、最后的访问时间等。

fileowner:获得文件的所有者

filectime:获取文件的创建时间

filemtime:获取文件的修改时间

fileatime:获取文件的访问时间

其中最常用的是文件的修改时间,通过文件的修改时间,可以判断文件的时效性,经常用在静态文件或者缓存数据的更新。

$filename = './test.txt';
echo '所有者:'.fileowner($filename).'<br>';
echo '创建时间:'.filectime($filename).'<br>';
echo '修改时间:'.filemtime($filename).'<br>';
echo '最后访问时间:'.fileatime($filename).'<br>';

$mtime = filemtime($filename);
// 通过计算时间差来判断文件内容是否有效
if (time() - $mtime > 3600) {
echo '<br>缓存已过期';
} else {
echo file_get_contents($filename);
}


取得文件的大小

filesize函数可以取得文件的大小,文件大小以字节数表示。

$filename = './test.txt';
$size = filesize($filename);


没法通过简单的函数来取得目录的大小,目录的大小是该目录下所有子目录以及文件大小的总和,因此需要通过递归的方法来循环计算目录的大小。

删除文件

使用unlink函数进行文件删除。

unlink($filename);


删除文件夹使用rmdir函数,文件夹必须为空,如果不为空或者没有权限则会提示失败。

rmdir($dir);


如果文件夹中存在文件,可以先循环删除目录中的所有文件,然后再删除该目录,循环删除可以使用glob函数遍历所有文件。

foreach (glob("*") as $filename) {
unlink($filename);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: