美文网首页
PHP操作文件

PHP操作文件

作者: 简简天天 | 来源:发表于2019-12-24 16:13 被阅读0次

读取文件内容,失败返回false

  • 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等方法

  • fopen() 函数打开一个文件或 URL。
    如果 fopen() 失败,它将返回 FALSE 并附带错误信息。您可以通过在函数名前面添加一个 '@' 来隐藏错误输出。
    fopen(filename,mode,include_path,context)
    filename 必需。规定要打开的文件或 URL。
    mode 必需。规定您请求到该文件/流的访问类型。
    可能的值:
"r" (只读方式打开,将文件指针指向文件头)
"r+" (读写方式打开,将文件指针指向文件头)
"w" (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)
"w+" (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)
"a" (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)
"a+" (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)
"x" (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误)
"x+" (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)
"r"和"rb"是两种读取文件的方式。
"r"是以文本形式读,"rb"是以二进制的形式读。
  • fgets可以从文件指针中读取一行
  • freads可以读取指定长度的字符串
  • feof 测试文件指针是否到了文件结束的位置
$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不仅可以判断文件是否存在,同时也可以判断目录是否存在
$filename = './test.txt';
if (file_exists($filename)) {
    echo file_get_contents($filename);
}
  • 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));
<?php
$filename = 'test.php';
$owner = fileowner($filename);
echo '所有者:'.$owner;
echo PHP_EOL;
$ctime = filectime($filename);
echo '创建时间:'.$ctime;
echo PHP_EOL;
$mtime = filemtime($filename);
echo '修改时间:'.$mtime;
echo PHP_EOL;
$atime = fileatime($filename);
echo '最后访问时间:'.$atime;
echo PHP_EOL;

//通过计算时间差 来判断文件内容是否有效
if (time() - $mtime > 3600) {
    echo '缓存已过期';
} else {
    echo file_get_contents($filename);
}

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

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

$filename = 'test.php';
$size = filesize($filename);
echo $size;

如果要转换文件大小的单位,可以自己定义函数来实现。

1 Byte =8 bit
1 KB = 1,024 Bytes = 8192 bit
1 MB = 1,024 KB = 1,048,576 Bytes
1 GB = 1,024 MB = 1,048,576 KB
1 TB = 1,024 GB = 1,048,576 MB
number_format ( float $number [, int $decimals = 0 ] ) : string
number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," ) : string
本函数可以接受1个、2个或者4个参数(注意:不能是3个):
如果只提供第一个参数,number的小数部分会被去掉 并且每个千位分隔符都是英文小写逗号"," ,四舍五入
如果提供两个参数,number将保留小数点后的位数到你设定的值,其余同楼上
如果提供了四个参数,number 将保留decimals个长度的小数部分, 小数点被替换为dec_point,千位分隔符替换为thousands_sep

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 = 'test.php';
$size = filesize($filename);
echo $size.'b';
echo PHP_EOL;
$size = getSize($size, 'kb'); //进行单位转换
echo $size.'kb';

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

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

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

$filename = "test.php";
$data = ['I',' love', ' you'];
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);

PHP文件系统之删除文件

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

unlink($filename);

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

rmdir($dir);

如果文件夹中存在文件,可以先循环删除目录中的所有文件,然后再删除该目录,循环删除可以使用glob函数遍历所有文件。
glob 寻找与模式匹配的文件路径

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

相关文章

  • PHP 文件操作

    创建写入文件 就会在同级目录下创建一个roy.text,并且内容为Hello! 读取文件

  • php 文件操作

    文件读取内容 方式一: 方式二: 方式三: 判断文件是否存在 判断是否是文件 file_exists不仅可以判断文...

  • PHP文件操作

    和数据库操作一样,操作文件同样也分为打开文件,读取文件,写入文件和关闭文件四步。 一、打开关闭文件 1、fopen...

  • 6.PHP文件编程

    思考:在进行PHP开发的时候,有时候会需要对文件进行操作,例如文件夹管理和文件管理等,这些操作PHP有提供扩展吗?...

  • 文件系统

    PHP文件系统之读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_conten...

  • PHP学习笔记 - 进阶篇(7)

    文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,...

  • Learn PHP

    title: PHP学习笔记date: 2016-07-07 11:33:29tags: PHP php文件操作的...

  • 文件处理和上传

    PHP 文件处理和上传 如何判断文件和文件夹 文件的属性 文件的操作 这段我整体是查阅PHP的手册完成--大家参考...

  • php 安装swoole

    操作系统:CentOS php安装目录:/usr/local/php php.ini配置文件路径:/usr/loc...

  • 实现简单登陆注册功能流程分析

    一:思路分析 用户前端注册账号时,我们前端需要使用ajax访问后端文件(下面以php文件举例),通过php文件操作...

网友评论

      本文标题:PHP操作文件

      本文链接:https://www.haomeiwen.com/subject/dhffoctx.html