我正在用PHP编写一个照片库脚本,并有一个目录,用户将存储他们的照片.我正在尝试设置页面缓存并仅在目录内容发生更改时才刷新缓存.我想我可以通过使用filemtime()函数缓存目录的最后修改时间来完成此操作,并将其与目录的当前修改时间进行比较.但是,正如我已经意识到的那样,目录修改时间不会随着从该目录添加或删除文件而改变(至少在Windows上,还不确定Linux机器).
所以我的问题是,检查目录内容是否被修改的最简单方法是什么?
我已经阅读了很多关于它的问题和答案,但我仍然无法解决我的问题......
我正在尝试创建一个函数,删除前一天创建的"xml"或"xsl"扩展名的所有文件.但我在每个文件上收到此警告:
警告:filemtime()[function.filemtime]:第44行/home/u188867248/public_html/ampc/library.php中post_1003463425.xml的stat失败
此目录的所有文件具有相同的结构名称"post_ + randomNum + .xml"(例如:post_1003463425.xml或post_1456463425.xsl).所以我认为这不是编码问题(就像我在其他问题中看到的那样).
我的功能代码是这样的:
function deleteOldFiles(){
if ($handle = opendir('./xml')) {
while (false !== ($file = readdir($handle))) {
if(preg_match("/^.*\.(xml|xsl)$/i", $file)){
$filelastmodified = filemtime($file);
if ( (time()-$filelastmodified ) > 24*3600){
unlink($file);
}
}
}
closedir($handle);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助 :)
我想检查一个文件是否超过一定的时间(例如2天).
我设法以这样的方式获得文件创建时间:
>>> import os.path, time
>>> fileCreation = os.path.getctime(filePath)
>>> time.ctime(os.path.getctime(filePath))
'Mon Aug 22 14:20:38 2011'
Run Code Online (Sandbox Code Playgroud)
我现在如何检查这是否超过2天?
我在Linux下工作,但跨平台解决方案会更好.干杯!
在Windows 7和Mac OS 10.12.2(使用R 3.3.2)上,似乎file.mtime()
严重舍入或截断时间戳.我确认file.create("my_file.txt"); print(as.numeric(file.mtime("my_file.txt")), digits = 22)
在Linux上打印出小数点后的几位数字,但是在Windows 7上,所有超过小数的数字都会消失my_file.txt
.Mac OS 10.12.2的行为与Windows 7类似.是否有一种独立于平台的方法来获取R中的精确文件时间戳?
我使用PHP函数filemtime来获取PHP 5.3的最后修改时间.这个函数效果很好,但是当文件名有特殊字符时(例如变音符号),它似乎有些问题.
如果我用变音符号在文件名上运行它
$stat = filemtime('C:/pictures/München.JPG');
Run Code Online (Sandbox Code Playgroud)
然后我得到输出:
Warning: filemtime() [function.filemtime]: stat failed for C:/pictures/München.JPG
Run Code Online (Sandbox Code Playgroud)
如果我将文件从"München.JPG"重命名为"Muenchen.JPG"并再次执行相同的操作:
$stat = filemtime('C:/pictures/Muenchen.JPG');
Run Code Online (Sandbox Code Playgroud)
一切正常!
我的PHP文件保存为UTF-8而没有BOM,我也尝试过:
clearstatcache();
$stat = filemtime(utf8_encode('C:/pictures/München.JPG'));
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.
对于Linux下包含少量字节的文件,我只需要处理自上次处理以来它被更改的时间.我通过clearstatcache(); filemtime();
定期调用PHP来检查文件是否已更改.由于整个文件总是很小,因此删除对filemtime的调用并通过将内容与过去的内容进行比较来检查文件更改是否会提高性能?或者就性能而言,最好的方法是什么.
让我们一劳永逸地澄清一下.我尝试谷歌这个,但似乎在一个地方找不到这些信息.
创建或删除文件时,保留目录mtime在Windows和Linux上都会更改.ctime在Linux机器人上也没有在Windows上发生变化,因为ctime是创建时间.
如果重新打开并写入文件,则保留目录不会更改.但是,在Windows和Linux上,文件mtime都会发生变化,而在Linux上,ctime也会发生变化,在Windows上,ctime是创建时间.
它是否正确?有什么警告吗?比如Windows网络共享有例外吗?还是桑巴?
编辑:那些投票决定关闭此主题的人,请在主题上留下关于您认为哪个网站的评论.Stackoverflow上有大量的mtime/ctime问题,仅仅因为我没有包含依赖于这些知识的PHP片段,这并不意味着没有:/
我filemtime
用于在html中对指纹外部资源进行指纹识别,例如:
<link rel="stylesheet" href="screen-<?=md5(filemtime('screen.css'));?>.css">
Run Code Online (Sandbox Code Playgroud)
我注意到有效更新和返回的时间戳之间存在显着延迟filemtime
,所以我clearstatcache()
在顶部添加了,这似乎解决了这个问题.但根据php手册:
如果要对同一文件名执行多个操作并且要求不缓存有关该特定文件的信息,则只需调用clearstatcache().
所以我想知道我是否正确使用它.
此外,我担心在每次通话时完全清除缓存的性能.谁能告诉我它是否会导致服务器显着减速?
clearstatcache
还接受两个额外的参数,但我不确定它们的含义:
clear_realpath_cache是否清除realpath缓存.
filename仅清除特定文件名的realpath和stat缓存; 仅在clear_realpath_cache为TRUE时使用.
我没有得到"realpath缓存"的意思,我找不到任何有关它的信息.这样称呼是否有意义clearstatcache
:
clearstatcache(true,'/path/to/screen.css');
Run Code Online (Sandbox Code Playgroud)
旨在仅清除与该特定文件相关的信息(从而减少"影响" clearstatcache
)?
我在那里,我正在编写一个单元测试,断言文件没有被修改.测试代码执行时间不到一秒,因此我想知道是否可以以毫秒为单位检索文件修改时间.filemtime()函数以秒为单位返回UNIX时间戳.
我目前的解决方案是使用sleep(1)函数,这将确保在检查它是否被修改之前经过1秒.我不喜欢这种解决方案,因为它大大减慢了测试速度.
我无法通过get_file_contents()声明内容相等,因为可以重写的数据是相同的.
我猜这不可能,是吗?
filemtime ×10
php ×7
comparison ×1
ctime ×1
diacritics ×1
directory ×1
filesystems ×1
performance ×1
python ×1
r ×1
regex ×1
stat ×1
statistics ×1
time ×1
timestamp ×1
unix ×1
utf-8 ×1
windows ×1