Bootstrap

PHP 文件系统(PHP 5 Filesystem 函数) 全解析

PHP 文件系统

PHP 5 Filesystem 函数允许您访问和操作文件系统。

Filesystem 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。

1. 读取、写入文件内容

最简单的读取文件的函数为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';

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

;