PHP 文件系统
PHP 5 Filesystem 函数允许您访问和操作文件系统。
Filesystem 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。
1. 读取、写入文件内容
file_get_contents() link
最简单的读取文件的函数为file_get_contents(),可以将整个文件全部读取到一个字符串中。
$content = file_get_contents('file1.txt');
echo $content;
file_put_contents()
把一个字符串写入文件中。与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
提示:使用 FILE_APPEND 可避免删除文件中已有的内容,而是在后面追加。
file_put_contents('file1.txt', 'Hello World.', FILE_APPEND);
$content = file_get_contents('file1.txt');
echo $content;
类C读取文件操作
PHP也提供类似于C语言操作文件的方法,fopen,fgets,fread,fclose等方法,
方法 | 作用 |
---|---|
fopen() | 打开指定文件 |
feof() | 检测是否已到达文件末尾 |
fgets() | 读取一行 |
fread() | 一次读取全部 |
fwrite() | 二进制方式写入文件 |
fclose() | 释放指定文件 |
// rb是以读写的方式打开一个二进制文件,r只读
$file = fopen('file1.txt', 'rb');
if (!feof($file)) {
echo fgets($file) . '读取一行<br>';
}
fclose($file);
$file = fopen('file1.txt', 'rb');
if (!feof($file)) {
echo fread($file, 4096) . '读取全部<br>';
}
fclose($file);
2. 判断文件是否存在、可读写
is_file()
如果只是判断文件存在,使用file_exists就行。
$file = 'file1.txt';
if (is_file($file)) {
echo file_get_contents($file);
}
file_exists()
file_exists不仅可以判断文件是否存在,同时也可以判断目录是否存在,从函数名可以看出,is_file是判断给定的路径是否是一个文件。
$file = 'file1.txt';
if (file_exists($file)) {
echo file_get_contents($file);
}
is_readable / is_writeable
判断文件是否可读。判断文件是否可写。
$file = 'file1.txt';
if (is_writeable($file)) {
echo 'is writeable';
}
if (is_readable($file)) {
echo 'is readable';
}
3. 文件元属性
文件有很多元属性,包括:文件的所有者、创建时间、修改时间、最后的访问时间等。
元属性 | 解释 |
---|---|
fileowner | 获得文件的所有者 |
filectime | 获取文件的创建时间 |
filemtime | 获取文件的修改时间 |
fileatime | 获取文件的访问时间 |
其中最常用的是文件的修改时间,通过文件的修改时间,可以判断文件的时效性,经常用在静态文件或者缓存数据的更新。
$filename = 'file1.txt';
echo '所有者:' . fileowner($filename) . '<br>';
echo '创建时间:' . date('Y-m-d H:i:s', filectime($filename)) . '<br>';
echo '修改时间:' . date('Y-m-d H:i:s', filemtime($filename)) . '<br>';
echo '最后访问时间:' . date('Y-m-d H:i:s', fileatime($filename)) . '<br>';
//通过计算时间差 来判断文件内容是否有效
$mtime = filemtime($filename);
if (time() - $mtime > 3600) {
echo '<br>缓存已过期';
} else {
echo file_get_contents($filename);
}
4. 获得文件的大小
filesize()
通过 filesize() 函数可以取得文件的大小,文件大小是以字节数表示的。
$filename = 'file1.txt';
$filesize = filesize($filename);
echo $filesize;
如果要转换文件大小的单位,可以自己定义函数来实现。
function getsize($size, $format = 'kb') {
$p = 0;
if ($format == 'kb') {
$p = 1;
} elseif ($format == 'mb') {
$p = 2;
} elseif ($format == 'gb') {
$p = 3;
}
$size /= pow(1024, $p);
return number_format($size, 3);
}
$filename = 'file1.txt';
$filesize = filesize($filename);
$filesize = getsize($filesize, 'kb'); //进行单位转换
echo $filesize . 'kb';
值得注意的是,没法通过简单的函数来取得目录的大小,目录的大小是该目录下所有子目录以及文件大小的总和,因此需要通过递归的方法来循环计算目录的大小。