文件存在但不会取消链接(PHP)

时间:2011-04-08 16:02:18

标签: php unlink

我正在尝试检查文件是否存在,如果存在,请将其删除。由于一些奇怪的原因,检查文件返回true但它不会取消链接我的生活。这是我的代码。

if(file_exists(TEMPLATEPATH.'/uploads/'.$_POST['image_name'])) {
        if (@unlink(TEMPLATEPATH.'/uploads/'.$_POST['image_name'])) {
            echo "true";
        } else {
            echo "false";   
        }
    } else {
        echo "false";   
    }

*注意---没有@没有错误...... * note2 ---这是在带有wamp堆栈的localhost windows上,在你说这就是为什么它不起作用之前,我确认使用相同语法的另一个站点没有任何特殊权限。

感谢您的帮助!

4 个答案:

答案 0 :(得分:11)

即使该文件存在,也并不意味着您有权删除它。

你应该remove the @ operator,这可能会导致潜在的错误 - 这可能非常有趣。


如果您不希望向用户显示错误消息,您应该:

答案 1 :(得分:4)

好的我是个笨蛋,发现发布的变量名已经改变,应该是'image'而不是'image_name'....

很抱歉浪费你们的时间!

答案 2 :(得分:0)

@Rick:如果您取消警告抑制@,PHP是否会返回拒绝访问错误消息?如果是这样,那就是问题所在。试试

if (file_exists(TEMPLATEPATH . '/uploads/' . $_POST['image_name'])) {
   chmod(TEMPLATEPATH.'/uploads/'.$_POST['image_name']), 0755);

   if (unlink(TEMPLATEPATH . '/uploads/' . $_POST['image_name'])) {
        echo "true";
    } else {
        echo "false";   
    }
} else {
    echo "false";   
}

答案 3 :(得分:0)

正如其他人所说,您需要拥有适当的删除权限。具体来说,您需要写入权限。试试这个:

$filename = TEMPLATEPATH.'/uploads/'.$_POST['image_name'];
if(is_writable($filename)) {
  unlink($filename)
} else {
  // error handling. You can check which condition is failing here
}