PHP文件系统

读取文件内容

PHP具有丰富的文件操作函数。最简单的读取文件的函数为file_get_contents,能够将整个文件所有读取到一个字符串中。

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

file_get_contents也能够通过參数控制读取内容的開始点以及长度。

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

PHP也提供类似于C语言操作文件的方法,使用fopen,fgets,fread等方法,fgets能够从文件指针中读取一行,freads能够读取指定长度的字符串。

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

 

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

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

推断文件是否存在

普通情况下在对文件进行操作的时候须要先推断文件是否存在,PHP中经常使用来推断文件存在的函数有两个is_file与file_exists.

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

假设仅仅是推断文件存在,使用file_exists即可。file_exists不仅能够推断文件是否存在,同一时候也能够推断文件夹是否存在,从函数名能够看出。is_file是确切的推断给定的路径是否是一个文件。

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

更加精确的能够使用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);
}

写入内容到文件

与读取文件相应。PHP写文件也具有两种方式,最简单的方式是採用file_put_contents。

$filename = './test.txt';
$data = 'test';
file_put_contents($filename, $data);

上例中,$data參数能够是一个一维数组,当$data是数组的时候,会自己主动的将数组连接起来,相当于$data=implode('', $data);

相同的,PHP也支持类似C语言风格的操作方式,採用fwrite进行文件写入。

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

取得文件的改动时间

文件有非常多元属性,包含:文件的全部者、创建时间、改动时间、最后的訪问时间等。

fileowner:获得文件的全部者
filectime:获取文件的创建时间
filemtime:获取文件的改动时间
fileatime:获取文件的訪问时间

当中最经常使用的是文件的改动时间,通过文件的改动时间。能够推断文件的时效性,经经常使用在静态文件或者缓存数据的更新。

$mtime = filemtime($filename);
echo '改动时间:'.date('Y-m-d H:i:s', filemtime($filename));

取得文件的大小

通过filesize函数能够取得文件的大小。文件大小是以字节数表示的。

$filename = '/data/webroot/usercode/code/resource/test.txt';
$size = filesize($filename);

假设要转换文件大小的单位。能够自定义函数来实现。

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 = '/data/webroot/usercode/code/resource/test.txt';
$size = filesize($filename);

$size = getsize($size, 'kb'); //进行单位转换
echo $size.'kb';

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

删除文件

跟Unix系统命令类似,PHP使用unlink函数进行文件删除。

unlink($filename);

删除目录使用rmdir函数,目录必须为空,假设不为空或者没有权限则会提示失败。

rmdir($dir);

假设文件夹中存在文件。能够先循环删除文件夹中的全部文件。然后再删除该文件夹。循环删除能够使用glob函数遍历全部文件。

foreach (glob("*") as $filename) {
   unlink($filename);
}

posted on 2017-04-23 13:58  ljbguanli  阅读(174)  评论(0编辑  收藏  举报