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文件系统之判断文件是否存在

一般情况下在对文件进行操作的时候需要先判断文件是否存在,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文件系统之取得文件的修改时间

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

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

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

$mtime = filemtime($filename);
echo '修改时间:'.date('Y-m-d H:i:s', filemtime($filename));
判断文件内容是否过期
<?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);
}

PHP文件系统之取得文件的大小

通过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';

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

PHP文件系统之写入内容到文件

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

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

上例中,参数可以是一个一维数组,当​data是数组的时候,会自动的将数组连接起来,相当于$data=implode('', $data);

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

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

PHP文件系统之删除文件

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

unlink($filename);

删除文件夹使用rmdir函数,文件夹必须为空,如果不为空或者没有权限则会提示失败。

rmdir($dir);

如果文件夹中存在文件,可以先循环删除目录中的所有文件,然后再删除该目录,循环删除可以使用glob函数遍历所有文件。

php学习----文件系统的更多相关文章

  1. Linux学习 - 文件系统常用命令

    一.文件系统查看命令df df [选项] [挂载点] -a 查看所有文件系统信息,包括特殊文件系统 -h 使用习惯单位显示容量 -T 显示文件系统类型 -m 以MB为单位显示容量 -k 以KB为单位显 ...

  2. Linux学习 - 文件系统属性chattr权限

    change file attributes on 啊linux file system 1 功能 可以防止误操作 2 chattr命令格式 chattr [+-=] [选项] 文件或目录名 + 增加 ...

  3. 文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解

    阅读此文,必须具备知识点:<Linux 查看磁盘分区.文件系统.使用情况的命令和相关工具介绍><实例解说 fdisk 使用方法><合理规划您的硬盘分区><Fe ...

  4. <FAT文件系统> -- DBR

    FAT16是比较简单的文件系统,相比NFTS等文件系统,该系统的学习比较easy,容易上手,同时对于数据存储的机理以及数据的恢复有一定的帮助.FAT文件系统有一定的弊端,不能支持太大的数据存储. FA ...

  5. Linux 创建文件系统及挂载文件系统流程详解(转)

    作者:北南南北 来自: LinuxSir.Org 摘要:本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述:主要是为初学者弄清楚这一操作过程:本文涉及f ...

  6. Linux快速学习系列

    这篇文章会随着学习的进行,不断的更新!!! 总结 操作系统引入的抽象概念 进程(process) 地址空间(address space) 虚拟内存(virtual memory) 操作系统引入的cah ...

  7. linux文件系统实现原理简述【转】

    本文转载自:https://blog.csdn.net/eleven_xiy/article/details/71249365 [摘要] [背景] [正文] [总结]   注意:请使用谷歌浏览器阅读( ...

  8. 2020-02-20Linux学习日记,第二天

    在内容开始前请教一下博客园的大佬.编辑器中没有看到格式刷,要怎么不连续的选中内容给予想要的格式,有看到的麻烦私信解答一下,谢谢! ----------------------------------- ...

  9. 第1章 Linux文件类基础命令

    1. 关于路径和通配符 Linux中分绝对路径和相对路径,绝对路径一定是从/开始写的,相对路径不从根开始写,还可能使用路径符号. 路径展开符号: . :(一个点)表示当前目录 .. :(两个点)表示上 ...

随机推荐

  1. MySQL中间件之ProxySQL(1):简介和安装

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL简介 之前的文章里,介绍了一个MySQL的中间件: ...

  2. Perl的数值和字符串

    数值和字符串 数值 perl中以双精度(浮点数)方式保存和运算数值的方式 就算写的是整数,在内部也会转换成等效的浮点数类型保存. 但在perl内部,有些运算会将浮点数转换成整型进行,而且也有integ ...

  3. Python图像处理之验证码识别

      在上一篇博客Python图像处理之图片文字识别(OCR)中我们介绍了在Python中如何利用Tesseract软件来识别图片中的英文与中文,本文将具体介绍如何在Python中利用Tesseract ...

  4. [android] smartimageview&常见的开源代码

    github上搜索开源框架android-smarty-imageview,下载压缩包,拷贝我们之前写的网络图片查看器布局. 解压下载包里面的数据,找到java源码拷贝到我们的项目里,这时我们可以看到 ...

  5. 48.Linux-普通U盘以及多分区U盘自动挂载

    在上章学习33.Linux-实现U盘自动挂载(详解)后,只是讲解了普通U盘挂载,并没有涉及到多分区U盘,接下来本章来继续学习 1.多分区U盘和普通U盘区别 1)U盘插上只会创建一个/dev/sda文件 ...

  6. JSTL_XML标记库

    JSTL_XML 一:说明 如有转载请标明出处 必须包含的属性->有默认值的属性->其余属性,中间用回车隔开 二:XML标记库 Xml标记库主要功能就是为在jsp页面中操作xml提供便利支 ...

  7. Android Studio 学习(五)网络

    HttpURLConnection OkHttp 添加依赖 编辑 app/build.gradle 在dependencies闭包中添加 implementation 'com.squareup.ok ...

  8. POJ 2484 A Funny Game(智商博弈)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6397   Accepted: 3978 Description Alice ...

  9. 24.Odoo产品分析 (三) – 人力资源板块(5) – 出勤(1)

    查看Odoo产品分析系列--目录 安装"出勤"模块,管理员工的上下班打卡. 1. 签到与退签 安装完模块后,点击"出勤"主菜单:  点击中间的签到按钮,实现签到 ...

  10. Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件

    文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件 by:授客 QQ:1033553122 测试环境: Python版本:Python 3.3.2 Win7 64 代码实践 # ...