在使用文件时,使用PHP删除(取消链接)或创建(fwrite)文件

时间:2013-07-11 11:07:38

标签: php race-condition fwrite unlink

我正在运行一个带有LAMP系统的网站。

内容来自数据库。

出于缓存目的,我在我的网络服务器上创建文件(包含可缓存的内容)(通过fwrite())。

我偶尔会删除缓存文件(通过unlink())。

使用cronjob完成文件创建和删除。

我的问题是:当我的网站访问者当前正在浏览(=从网络服务器请求)文件A.php时,会发生什么,我正在尝试写入或删除这个相同的文件A.php。

准确地说:如果我的cronjob发出unlink()命令并同时向用户提供文件,会发生什么。

这会造成竞争条件吗?

我知道如何从unlink和fwrite操作中检索状态,所以只要这些函数返回false(无法删除/写入),我就可以循环遍历unlink / fwrite吗?

期待阅读您的意见/答案!

1 个答案:

答案 0 :(得分:-1)

是的,这显然会造成竞争条件。来自Web服务器的文件请求和来自cron作业的删除都是独立的进程,您无法知道其中一个是否正在对该文件执行某些操作。