fileatime,filemtime,filectime

在文件缓存过期的问题上,是用哪个函数合适呢?

fileatime --取得文件上一次访问的时间

int fileatime ( string $filename )

返回文件上次被访问的时间, 或者在失败时返回 FALSE。时间以 Unix 时间戳的方式返回。

Note:

注意:不同文件系统对时间的判断方法可能是不相同的。


filemtime  --取得文件修改时间


int filemtime ( string $filename )


本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。


filectime  --取得文件inode修改时间


int filectime ( string $filename )


Note:

注意:在大多数 Unix 文件系统中,当一个文件的 inode 数据被改变时则该文件被认为是修改了。也就是说,当文件的权限,所有者,所有组或其它 inode 中的元数据被更新时。参见 filemtime()(这才是你想用于在 Web 页面中建立“最后更新时间”脚注的函数)和 fileatime()


Note:

注意某些 Unix 说明文本中把 ctime 说成是该文件建立的时间,这是错的。在大多数 Unix 文件系统中没有 Unix 文件的建立时间。


Note此函数的结果会被缓存。参见 clearstatcache() 以获得更多细节。


下面分别在windows下和在linux下的区别:


在window下:

    <?php
    $filename='./tt.txt';
    echo 'fileatime:'.date('Y-m-d H:i:s',fileatime($filename)).'<br>';
    echo 'filectime:'.date('Y-m-d H:i:s',filectime($filename)).'<br>';

    echo 'filemtime:'.date('Y-m-d H:i:s',filemtime($filename)).'<br>';

    ?>

    分别做一下操作:

    初始状态:
    fileatime:2017-12-11 11:11:06
    filectime:2017-12-11 11:10:49
    filemtime:2017-12-11 11:40:02

    修改但是内容不变
    fileatime:2017-12-11 11:11:06
    filectime:2017-12-11 11:10:49
    filemtime:2018-06-13 11:23:38

    修改并改变内容
    fileatime:2017-12-11 11:11:06
    filectime:2017-12-11 11:10:49

    filemtime:2018-06-13 11:24:45

    可以看到不管有没有修改文件的原内容 filemtime都会发生改变 而其他都不会改变(不确定是不是有缓存);


    2.在linux中

    还是跟上面一样的测试代码,结果如下

    初始状态:

fileatime:2018-06-13 03:19:32

filemtime:2018-06-13 03:19:32

filectime:2018-06-13 03:19:32


修改但是内容不变

fileatime:2018-06-13 03:36:10

filemtime:2018-06-13 03:36:10

filectime:2018-06-13 03:36:10

修改并改变内容

fileatime:2018-06-13 03:36:45

filemtime:2018-06-13 03:36:45

filectime:2018-06-13 03:36:45

        改变文件所属

fileatime:2018-06-13 03:36:45

filemtime:2018-06-13 03:36:45

filectime:2018-06-13 03:38:31


结论:在linux中fileatime为文件的上一次访问时间,filemtime为上一次文件的修改时间(不管你有没有改变原来的内容),而filectime则是对应着上一次文件的inode节点改变的时间,比如改变所属组,拥有者,文件内容等filectime都会相应的发生改变。所以在判断缓存文件是否过期的问题上应该要使用filemtime比较合理!


Note:在linux中ll指令也会有一个文件操作相关的时间,那么这个时间是哪个函数的时间呢?一试便知!

实验之前的数据:


看文件client.php的时间为 6-13 11:36

为了让访问时间不跟修改时间重复,采用以下指令实现不访问文件的方式对文件内容坐出修改

echo 'echo '123''>>client.php 将echo '123'代码写入client.php中

此时ll查看client.php状态:


ll出来的信息已经发生了更改,那么用之前的代码查看下该文件:

输出结果如下:


显示的结果跟filemtime和filectime是一致的(由于时区问题差了八个小时),那么是哪个才对呢 ?


接下来改变文件的所属

chown vsftpd client.php

ll查看信息:



此时查看文件信息:




由此可见,ll指令显示文件信息的时间是filemtime的时间!


    







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值