【发布时间】:2013-02-21 14:35:30
【问题描述】:
所以我想创建一个删除文件夹及其内容的脚本,但在执行此操作时可能会创建新文件。做这个的最好方式是什么?
一些例子是 - 我们有“缓存”文件夹,我想删除整个缓存,但这样做时缓存文件夹中创建了更多文件,它永远不会为空,因此无法删除。
【问题讨论】:
标签: php file caching recursion directory
所以我想创建一个删除文件夹及其内容的脚本,但在执行此操作时可能会创建新文件。做这个的最好方式是什么?
一些例子是 - 我们有“缓存”文件夹,我想删除整个缓存,但这样做时缓存文件夹中创建了更多文件,它永远不会为空,因此无法删除。
【问题讨论】:
标签: php file caching recursion directory
将目录移到其他位置(例如到/tmp)。然后删除它。移动是原子的且快速的(因为它只是文件系统上的一个指针更改,并且无论文件夹中的内容如何,都不会真正涉及繁重的磁盘 I/O)。
为了更好地应对任何类型的问题,您应该创建一个这样的目录结构:
/var/www/website/
releases/
1111/
1112/
1113/
current_release/
假设您的网站当前位于/var/www/website/releases/1113/。您的 apache 应该设置有 /var/www/website/current_release/ 的 DocumentRoot 符号链接到 /var/www/website/releases/1113
当您需要清除缓存时,您应该部署一个新版本,例如/var/www/website/releases/1114。部署 ti 后,缓存目录为空,将 /var/www/website/current_release/ 上的符号链接翻转到新的发布目录。
然后,Apache 将使用空缓存文件夹从新目录中提供文件。
这是完成此类事情的唯一真正原子方式,除了让服务器离线(这通常不是清除缓存这样微不足道的事情的选择)。
这将是解决问题的一种企业级解决方案,但它带来的额外好处是允许您轻松回滚生产服务器(只需将符号链接切换到以前的版本)。如果您非常关心这个问题,这似乎是过度设计,这是正确的方法。
【讨论】: