Php 过期日期作为文件属性,或在缓存机制的单独文件中

Php 过期日期作为文件属性,或在缓存机制的单独文件中,php,file,caching,Php,File,Caching,我正在用PHP创建一个简单的缓存库。目前,当我存储一个值时,我创建了两个文件:一个包含该值,另一个存储创建时间。我想要一个健壮的解决方案,但我不确定使用文件日期属性有多安全。您认为使用file date属性作为到期时间是否安全,而不是将其存储在单独的文件中 它将依赖于操作系统?我希望我的库在windows和linux上表现相同。在linux下,文件有三个不同的关联时间,即创建时间、修改时间和访问时间。显然,使用访问时间是不合适的,但是使用创建时间应该符合您的目的。但是,您始终要承担系统上的用户添

我正在用PHP创建一个简单的缓存库。目前,当我存储一个值时,我创建了两个文件:一个包含该值,另一个存储创建时间。我想要一个健壮的解决方案,但我不确定使用文件日期属性有多安全。您认为使用file date属性作为到期时间是否安全,而不是将其存储在单独的文件中


它将依赖于操作系统?我希望我的库在windows和linux上表现相同。

在linux下,文件有三个不同的关联时间,即创建时间、修改时间和访问时间。显然,使用访问时间是不合适的,但是使用创建时间应该符合您的目的。但是,您始终要承担系统上的用户添加、删除或移动缓存文件夹中文件的风险

另一种方法是使用一个文件来存储所有文件名及其日期的列表或散列。这意味着您将每个文件存储一次,并且只添加一个其他文件来存储到期信息

您可以使用serialize()函数根据需要轻松存储和检索信息文件


在一个小的缓存函数中,我使用了filemtime函数,它给出了文件更改的时间。它在windows和linux上都运行良好。 在使用
filemtime
之前,不要忘记使用
clearstatcache()
,因为它的结果会被缓存

function in_cache($expires_in_secs, $filename){
    clearstatcache(); // Clear file status cache held by PHP

    /* if (file_exists($filename) and  filesize($filename) > 0 ) {  */
    if (file_exists($filename) ) {
        if( time() >= (filemtime($filename) + $expires_in_secs) ){  return false; }
        else { return true; }
    }
    else { return false; }
}

很高兴知道。我并不害怕其他用户,而是害怕可能与文件日期交互的其他进程。我更愿意使用修改日期而不是创建日期,所以当我有一个新的值要存储时,我会重写文件。序列化解决方案很好,但我认为对于大量文件来说不够有效。