创建新文件时删除递归目录

时间:2013-02-21 14:35:30

标签: php file caching recursion directory

所以我想创建一个删除文件夹及其内容的脚本,但在执行此操作时可能会创建新文件。做这个的最好方式是什么?

一些例子是 - 我们有“缓存”文件夹,我想删除整个缓存,但是这样做时,缓存文件夹中创建了更多的文件,并且它永远不会为空,因此无法删除。

1 个答案:

答案 0 :(得分:2)

将目录移出位置(例如,移至/tmp)。然后删除它。移动是原子的,快速的(因为它只是文件系统上的指针更改,并且实际上并不涉及繁重的磁盘I / O,无论文件夹中有什么)。

为了最好地抵御任何类型的问题,您应该创建一个这样的目录结构:

/var/www/website/
    releases/
        1111/
        1112/
        1113/
    current_release/

假设您的网站目前位于/var/www/website/releases/1113/。您的apache应设置DocumentRoot /var/www/website/current_release/ /var/www/website/releases/1113符号链接到/var/www/website/releases/1114

当您需要清除缓存时,您应该执行的是部署新版本,例如/var/www/website/current_release/。部署ti并且具有空的缓存目录时,将{{1}}上的符号链接翻转到新版本目录。

然后,Apache将使用空的缓存文件夹从新目录中提供文件。

这是实现这样的事情的唯一真正的原子方式,而不是让服务器脱机(这通常不是像清除缓存一样简单的选项)。

这将是一种解决问题的企业级解决方案,但它带来了额外的好处,允许您轻松回滚生产服务器(只需将符号链接切换到以前的版本)。如果你非常关心这个问题,这似乎是过度工程,这是正确的方式。