我在使用unlink
函数时遇到了一些问题。
我有一个网页,当它被刷新时会搜索新增文件的目录。用户可以选择管理文件,并删除任意文件。然而,当用户删除文件时,实际上需要大约5秒钟才能从服务器目录中删除该文件。在此期间,如果用户刷新浏览器,该文件将重新出现为新文件。这个问题在于,如果用户再次删除这个文件,由于最初的延迟,文件已经不存在了...
对此有什么想法吗?这让我疯掉了,不知道该怎么解决这个问题...
我在使用unlink
函数时遇到了一些问题。
我有一个网页,当它被刷新时会搜索新增文件的目录。用户可以选择管理文件,并删除任意文件。然而,当用户删除文件时,实际上需要大约5秒钟才能从服务器目录中删除该文件。在此期间,如果用户刷新浏览器,该文件将重新出现为新文件。这个问题在于,如果用户再次删除这个文件,由于最初的延迟,文件已经不存在了...
对此有什么想法吗?这让我疯掉了,不知道该怎么解决这个问题...
一种解决方案是在调用unlink()时创建一个新文件,并将新文件命名为$original_filename."_deleted"。然后在列出文件时,排除任何以"_deleted"结尾的文件。接下来,您只需要定期使用cron作业清理所有"_deleted"文件。
function my_unlink($filename){
touch($filename.'_deleted');
unlink($filename);
}
function list_files(){
if ($handle = opendir('.')) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".." && !preg_match('/_deleted$/',$entry)) {
echo "$entry\n";
}
}
closedir($handle);
}
}
clearstatchache(true, $file)
还是值得一试的,尽管在 unlink
的文档中我持悲观态度。
也许目录中有太多文件了,使用几个目录可能会有所帮助(使用文件名前两个字符的目录)。
然而,我的希望是列表概述页面已被缓存。使用
header("Cache-Control: no-cache, must-revalidate");
或许可以帮助。
clearstatcache();
的文档在这里:http://php.net/manual/zh/function.clearstatcache.php - Orangepillclearstatcache()
会有所帮助。unlink()
没有出现在受影响函数列表中,并且有这样一个明确的注释:unlink() 会自动清除缓存。 - George Cummins