【问题标题】:Suppress "No such file or directory" with unlink? [duplicate]通过取消链接抑制“没有这样的文件或目录”? [复制]
【发布时间】:2020-03-27 20:46:35
【问题描述】:

我正在使用 Sentry 来监控网站上的错误。我有一段代码给我带来了麻烦,它来自一个旧的 Kohana(PHP 框架)模块。

给出这段代码(我编辑过的):

if ($delete === TRUE)
{
    $file_tmp = $file->getRealPath();
    clearstatcache(TRUE, $file_tmp);
    if (file_exists($file_tmp))
    {
        return @unlink($file_tmp);
    }
    return FALSE;
}

我怎样才能让它不会在 Sentry 上触发这样的错误:

Warning: unlink(/var/www/my-hostname-files/application/cache/25/2530cfe0309c86c52f8dda53ca493f4cf72fdbd3.cache): No such file or directory

原始代码只是大 IF 和 unlink 调用,但似乎介于 file_exists 调用和 unlink 之间,其他进程删除了文件?!

谢谢!

【问题讨论】:

  • 尝试检查非空if($file_tmp !='')
  • @AbhishekSharma 如果您看到发出的警告.. file_tmp 是否为空不是问题,它总是设置
  • 警告说没有文件或目录,这意味着 $file_tmp 未设置
  • 远射... 注意:由于 PHP 的整数类型是有符号的,并且许多平台使用 32 位整数,因此对于大于 2GB 的文件,某些文件系统函数可能会返回意外结果。 manual

标签: php kohana sentry


【解决方案1】:

您可以暂时禁用错误报告,而无需强制抑制警告。

注意:当你尝试删除一个目录时,你必须先递归删除里面的所有文件。

if ($delete === TRUE)
{
    $file_tmp = $file->getRealPath();
    clearstatcache(TRUE, $file_tmp);
    if (file_exists($file_tmp))
    {
        // store current error reporting level
        $level = error_reporting();

        // turn completely off
        error_reporting(0);

        // unlink and store state
        $state = unlink($file_tmp);

        // restore error reporting level
        error_reporting($level);

        // return unlink state
        return $state;
    }
    return FALSE;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2020-04-08
    • 2019-09-29
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多