2

我正在使用这个功能。is_file 和 is_writable 返回 true,但是当我取消链接时,它给出了错误。这是在 Windows 服务器上。

if(is_file($fileToDelete)) {
  if(is_writable($fileToDelete)) {
    unlink($fileToDelete);
  }
}

该文件是我打开的 PDF 文档。我认为 is_writable 在这种情况下会返回 false,但事实并非如此。

那么如何判断一个文件是否可以删除呢?

谢谢

4

3 回答 3

5

反过来做呢?只是尝试删除文件并检查它是否真的消失了?

@unlink($fileToDelete);

if(is_file($fileToDelete)) {
   // file was locked (or permissions error)
}

虽然不确定这在您的特定情况下是否可行,但从您问题中的代码来看,这应该是您想要的。

于 2012-08-24T22:17:43.747 回答
1

你在使用文件吗?我的意思是,你是通过 fopen($file) 打开它吗?

在尝试删除文件之前执行 fclose($file)。

于 2012-08-24T22:13:30.667 回答
0

对于那些不想在检查前删除文件的人来说,解决方案在这里:

$file = "test.pdf";

if (!is_file($file)) {
    print "File doesn't exist.";
} else {
    $fh = @fopen($file, "r+");
    if ($fh) {
        print "File is not opened and seems able to be deleted.";
        fclose($fh);
    } else {
        print "File seems to be opened somewhere and can't be deleted.";
    }
}

简单,高效。

于 2016-04-26T07:01:45.547 回答