读取文件内容

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);
}

取得文件的修改时间

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

fileowner:获得文件的所有者
filectime:获取文件的创建时间
filemtime:获取文件的修改时间
fileatime:获取文件的访问时间

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

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

取得文件的大小

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

$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';

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

最新文章

  1. AFN解析器里的坑
  2. 9.3 js基础总结3
  3. 【CefSharp】 禁用右键菜单 与 控制弹出窗口的方式(限版本39.0.0.1)
  4. Mysql配置项的简单优化
  5. 解决”不按住fun键输入的是数字,按着fun键才能输入字母”
  6. BZOJ3733 : [Pa2013]Iloczyn
  7. git(5) windows下 pycharm + git(github) ,在本地方便管理
  8. $ is not defined错误类型
  9. [转]javascript指定事件处理程序包括三种方式:
  10. 1第一个Android应用程序
  11. 打印Ibatis最后,SQL声明
  12. 谈Linux
  13. SQL SERVER 2008 Hierarchyid数据类型
  14. CentOS下nginx php mysql 环境搭建
  15. python九九乘法表
  16. js 实现异步上传图片+预览
  17. 非web环境的注解配置的spring项目应用(non-web, Spring-data-jpa, JavaConfig, Java Application, Maven, AnnotationConfigApplicationContext)
  18. python——函数之生成器
  19. Python一个文件调用另外一个文件的方法
  20. (转)Android 5.1.1 源码目录结构

热门文章

  1. py基础
  2. HDU-4081.Qinshihuang'sNationalRoadSystem(次小生成树变种)
  3. 问题 F: 超超的自闭意思
  4. TypeScript从入门到Vue项目迁移
  5. openstack stein部署手册 10. 创建实例
  6. Postman初探
  7. 【改】DOS文件格式转UNIX文件格式
  8. wenzhang
  9. 64bit assembly
  10. 【LeetCode】位运算 bit manipulation(共32题)