PHP:unlink无法删除文件,即使该文件存在且可写

PHP:unlink无法删除文件,即使该文件存在且可写,php,unlink,Php,Unlink,我一直在想为什么取消链接不起作用。我试过回答以前的问题和答案,但运气不好。需要删除的确切文件名是'upload/test.png'。 首先,我检查了文件是否存在 $filename = 'upload/test.png'; if(file_exists($filename)){ // file_exists returns true if(is_writable($filename)){ // is_writable also returns true i

我一直在想为什么
取消链接
不起作用。我试过回答以前的问题和答案,但运气不好。需要删除的确切文件名是
'upload/test.png'
。 首先,我检查了文件是否存在

$filename = 'upload/test.png';
if(file_exists($filename)){
// file_exists returns true
    if(is_writable($filename)){
        // is_writable also returns true
        if(unlink($filename)){
            echo 'file deleted';
        }
        else{
            echo 'cant delete file';
            print_r(error_get_last());
            // this gives me
            // unlink() function.unlink: No such file or directory
        }
    }
}

尝试此方法并发布您得到的输出(如果有)


如果你说一切正常,没有权限问题,那么你也可以这样做:

unlink(realpath("upload/test.png"));

而是给出完整的路径,如

$filename = dirname(__FILE__) . '/upload/test.png';
那就试试这个,

if (is_file($filename)) {

   chmod($filename, 0777);

   if (unlink($filename)) {
      echo 'File deleted';
   } else {
      echo 'Cannot remove that file';
   }

} else {
  echo 'File does not exist';
}

我发现取消链接对编码很敏感。我也有这样的问题,但后来我用了:

$filename= iconv("UTF-8", "Windows-1251", $filename);

这对我很有用。

在从C:开始的windows上,或者在linux/…realpath()和$\u服务器选项上,提供文件的完整物理路径,或者完整路径也返回错误。检查完成后,我们可以假设在执行取消链接之前读取了该文件,因此这意味着该文件具有工作路径。您是在实时服务器上工作还是在计算机上工作?尝试使用虚拟路径
/upload/test.png
,并确保您具有写权限?我测试了您的代码,它工作正常。此外,如果该位置不存在文件,则会显示空白屏幕,但不会出现错误。@GroovyCarrot is_writeable返回true。我尝试了虚拟路径,但仍然返回error.is\u文件nothing@nickanor它返回
false
true
。由于它没有返回
true
,因此该文件已被删除。该文件仍在此处。您使用的是相对路径,这并不意味着听起来有点屈尊俯就,但您确定没有在其他文件夹中查找吗?尝试将路径更改为绝对路径
/path/to/the/file/upload/test.png
C:/path/to/the/file/upload/test.png
非常适合我!!
$filename= iconv("UTF-8", "Windows-1251", $filename);