unlink()删除文件但返回false

时间:2014-09-23 15:37:16

标签: php unlink

我遇到了问题我无法解决。我试图删除文件并回显成功消息,但是它确实删除了文件但返回false。这是我的代码:

if(unlink(".".MEDIA_PATH."/$av")){          
    exit(header("Location: page.php?&msg=success"));
}
else{
    exit(header("Location: page.php?msg=fail"));    
}

DanFromGermany帮助了我! 解决方案是:不要使用Windows编程,使用Linux :)错误是因为我在Windows操作系统上使用localhost。

4 个答案:

答案 0 :(得分:1)

我改变了你的代码。

首先检查文件是否存在,然后删除。

$file = '.' . MEDIA_PATH . '/' . $av;

if (file_exists($file)) {
    if (unlink($file)) {          
        header("Location: page.php?msg=success");
    } else {
        header("Location: page.php?msg=fail&reason=cannot-delete");
    }
} else {
    header("Location: page.php?msg=fail&reason=file-not-exists");
}

exit;

<强>更新

众所周知,

unlink()在Windows系统上会失败。

答案 1 :(得分:0)

在使用“file_exists”函数删除文件之前确保文件存在(可能会调用“unlink”,同时调用两个实例,但测试无关紧要。)

$filePath = "." . MEDIA_PATH . "/$av";
if( !file_exists($filePath) ) {
    echo "File does not exist: $filePath";
    exit(1);
} else if( unlink($filePath) ) {
    exit(header("Location: page.php?&msg=success"));
} else{
    exit(header("Location: page.php?msg=fail"));    
}

如果工作流程有问题并且两次调用取消链接功能,您会很容易注意到它。

您还可以使用带有中断的xdebug来测试代码。

答案 2 :(得分:0)

我找到了一个解决方案,但它并不是最好的。如果你有任何请帮助我。

这是我的解决方案:

$del_file=".".MEDIA_PATH."/$av"; 

// Deleting file from server
@unlink($del_file); 

if(!file_exists($del_file)){                
    exit(header("Location: page.php?&msg=success"));
}
else{
    exit(header("Location: page.php?&msg=fail"));   
}

它仍然在unlink()上给出了错误false,所以我在unlink()上添加了@运算符来掩盖它,但这不是我想要的。这是否重要,因为我在localhost(windows)上而不在实时服务器上?

看起来func unlink()运行两次,第一次删除文件和secund时间它返回false错误,因为它无法找到指定的文件。

答案 3 :(得分:0)

卢卡罗戈维奇:

  

看起来func unlink()运行两次并且第一次删除   文件和secund时间它返回false错误,因为它无法找到   指定文件。

试试这个:

$filePath = "." . MEDIA_PATH . "/$av";

if( !filter_has_var(INPUT_GET, 'msg') ) {
    if( !file_exists ) {
        exit(header("Location: page.php?msg=fail&reason=file-does-not-exist")); 
    } else if( unlink($filePath) ) {
        exit(header("Location: page.php?&msg=success"));
    } else{
        exit(header("Location: page.php?msg=fail&reason=cannot-delete"));
    }
}

我相信“page.php”被调用两次,“unlink”被调用两次。

条件“!filter_has_var(INPUT_GET,'msg')”可以防止这种情况发生。

然而,您应该理解为什么“解决方案”有效: 使用浏览器中的“Inspect element”来分析重定向,并使用xdebug查看“unlink”是否被调用两次。