丰富
的文件操作函数
,
最简单
的读取文件的函数
为file_get_contents
,
可以将整个文件全部
读取到一个字符串
中。 $content = file_get_contents('./test.txt');
file_get_contents
也可以 通过参数控制读取内容
的开始点
以及长度
。$content = file_get_contents('./test.txt', null, null, 100, 500);
类似于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
.只是判断文件存在
,
使用file_exists
就行,
file_exists
不仅可以判断文件是否存在
,
同时也可以判断目录是否存在
;
从函数名
可以看出,
is_file
是确切的判断给定的路径是否是一个文件
。$filename = './test.txt';
if (file_exists($filename)) {
echo file_get_contents($filename);
}
$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);
}
demo:
<?php
$filename = '/data/webroot/usercode/code/resource/test.txt';
//判断如果$filename文件存在的话 就输出文件内容
if(file_exists($filename)){
echo '文件存在';
}else{
echo '文件不存在';
}
元属性
,
包括:文件的所有者、创建时间、修改时间、最后的访问时间
等。fileowner
:获得文件的所有者
filectime
:获取文件的创建时间
filemtime
:获取文件的修改时间
fileatime
:获取文件的访问时间
修改时间
,
通过文件的修改时间
,可以判断文件的时效性
,
经常用在静态文件
或者缓存数据
的更新
。
date('Y-m-d H:i:s',time()) 按24小时制
date('Y-m-d h:i:s',time()) 按12小时制
'Y-m-d H:i:s'
——年月日 时分秒$mtime = filemtime($filename);
echo '修改时间:'.date('Y-m-d H:i:s', filemtime($filename));
demo:
<?php
$filename = '/data/webroot/usercode/code/resource/test.txt';
echo '所有者:'.fileowner($filename).'<br>';
echo '创建时间:'.filectime($filename).'<br>';
echo '修改时间:'.filemtime($filename).'<br>';
echo '最后访问时间:'.fileatime($filename).'<br>';
//给$mtime赋值为文件的修改时间
$mtime = filemtime($filename);
//通过计算时间差 来判断文件内容是否有效
if (time() - $mtime > 3600) {
echo '<br>缓存已过期';
} else {
echo file_get_contents($filename);
}
filesize
函数可以取得文件的大小,文件大小是以字节数
(也就是b
)表示的。filesize
函数的输出结果要改成“kb”
为单位的话,便需除以1024的一次方
;
要改成‘mb’
的话,则需除以1024的二次方
,以此类推;
其demo自定义函数见下方第二个代码块;$filename = '/data/webroot/usercode/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';
number_format()
函数简单的函数
来取得目录的大小
,
目录的大小
是该目录下所有子目录
以及文件大小
的总和
,
因此需要通过递归
的方法来循环计算目录的大小
。最简单
的方式是采用file_put_contents
。$filename = './test.txt';
$data = 'test';
file_put_contents($filename, $data);
上例中,$data
参数可以是一个一维数组,
当$data
是数组的时候,会自动的将数组连接起来,相当于$data=implode('', $data);
C语言风格
的操作方式,采用fwrite
进行文件写入。$fp = fopen('./test.txt', 'w');
fwrite($fp, 'hello');
fwrite($fp, 'world');
fclose($fp);
又有写法:
$fp = fopen($filename, 'w');
fwrite($fp, 'hello world');
fclose($fp);
--------------------------
file_put_contents($filename, 'hello world');
Unix
系统命令类似,PHP使用unlink
函数进行文件删除
。unlink($filename);
删除文件夹
使用rmdir
函数,
文件夹必须为空
,
如果不为空
或者没有权限
则会提示失败
。rmdir($dir);
文件夹中存在文件
,
可以先循环删除目录中的所有文件
,
然后再删除该目录
,
循环删除
可以使用glob函数
遍历所有文件。foreach (glob("*") as $filename) {
unlink($filename);
}