php文件可写,但无法删除

php文件可写,但无法删除,php,unlink,Php,Unlink,我正在使用这个函数。is_file和is_writable返回true,但当我为true以取消链接时,它会给出一个错误。这是在windows服务器上 if(is_file($fileToDelete)) { if(is_writable($fileToDelete)) { unlink($fileToDelete); } } 这个文件是一个PDF文档,我已经打开了。我以为在这种情况下is_writable会返回false,但事实并非如此 那么,我如何判断文件是否可以删除呢 谢谢

我正在使用这个函数。is_file和is_writable返回true,但当我为true以取消链接时,它会给出一个错误。这是在windows服务器上

if(is_file($fileToDelete)) {
  if(is_writable($fileToDelete)) {
    unlink($fileToDelete);
  }
}
这个文件是一个PDF文档,我已经打开了。我以为在这种情况下is_writable会返回false,但事实并非如此

那么,我如何判断文件是否可以删除呢


谢谢

您正在使用该文件吗?我是说,你是用fopen($file)打开的吗


在尝试删除文件之前,请先关闭($file)。

换一种方式如何?只是试着删除文件并检查它是否真的消失了

@unlink($fileToDelete);

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

虽然不确定这在您的具体情况下是否可行,但根据问题中的代码判断,这应该是您想要的。

对于不想在检查前删除文件的用户,解决方案如下:

$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.";
    }
}

简单、高效。

您有权修改它吗?右键单击它并检查其属性在尝试删除它之前关闭该文件是的,因为如果我关闭该文件,我可以将其与php断开链接。谢谢你,穆萨,但关键是不要尝试删除其他用户打开的文件。我知道我打开了文件,因为我正在测试它。在现实世界中,我不知道文件是否打开,这就是为什么我需要一种方法来测试它是否可以删除,然后再尝试取消链接。你是如何通过web服务器提供文件的?Jorge-我没有使用php中的文件。这些是PDF文档,用户在试图重新生成它们时可能会在桌面上错误地打开它们。这就是我需要检查的。。。如果该文件在其他地方打开并且无法被php删除。谢谢!这可能表明我缺乏经验,但在函数调用前面加上@do究竟意味着什么呢?再次感谢,这很有效。@user1560676它抑制了错误。因此,即使取消链接会显示错误,也不会显示。但是请注意,只有少数情况下您应该使用
@
,这就是其中之一。还可以查看它的用法。无论你做什么,都不要把它当作消除错误的灵丹妙药。@user1560676,它是错误抑制操作符。它告诉php忽略从该行派生的任何错误。通常不赞成使用它,但也有一些合法的用法,比如这样。为什么不依赖
取消链接的返回代码呢
if(!@unlink($fileToDelete)){throw new Exception('can not delete file!');}
例如,如果您想让用户知道某个文件是否可以删除,然后向他们提供这样做的选项,这是很好的。好帖子。