unlink/file_exists 和文件未找到

Posted

技术标签:

【中文标题】unlink/file_exists 和文件未找到【英文标题】:unlink/file_exists and file not found 【发布时间】:2011-07-29 18:30:36 【问题描述】:

我的应用程序中有这段代码,我的应用程序的多个用户经常在竞争条件下运行

clearstatcache(TRUE, $filepath);
if(file_exists($filepath)) unlink($filepath);

但是,对于这行代码,我每天仍然有几个错误,比如

unlink(file): 没有这样的文件或 目录

服务器运行 Apache 2.2 和 php 5.3.3。我知道种族问题,但认为 @ 运算符只是邪恶的。我首先尝试不使用 clearstatcache() 的任何参数,但出现同样的错误。 我怎样才能以正确的方式做到这一点?

【问题讨论】:

能否请您添加一些代码。 @experimentX 但它就在那里,不是吗? @Pekka 好吧,我猜上面的代码没有任何缺陷 在这种情况下,@ 运算符可能不会太邪恶等待 cmets 死亡。取决于这段代码的重要性。 就像@John 说的那样,除了抑制警告之外,您可能可以做任何事情。 【参考方案1】:

你可以试试这个

if(@unlink($path)) 
  echo "Deleted file "; 

else
  echo "File can't be deleted";

我觉得会很好的;

【讨论】:

他在他的问题中说他不想使用这个。不过,这可能是唯一的选择。【参考方案2】:

正如评论中所说,我需要确保我已经删除了文件,不知道女巫进程删除它,所以

@unlink($filepath);
clearstatcache(TRUE, $filepath);
if(file_exists($filepath)) throw new Exception('file not deleted : ' . $filepath);

可能是更好的方法。

非常感谢您的帮助,用几个 cmets 想出另一种方法要容易得多。

【讨论】:

以上是关于unlink/file_exists 和文件未找到的主要内容,如果未能解决你的问题,请参考以下文章

未找到oracle客户端和网络组件,该怎么解决

未找到打印搜索的问题

未找到 ios 开发证书并且未找到未过期的配置文件

Terraform 和 AWS:未找到配置文件错误

CMake 和 lcov:未找到 gcno 文件

html 文件 src 路径错误和 404 未找到