1

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

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

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

谢谢您的帮助!

4

4 回答 4

11

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

您应该删除@operator,它可以消除潜在的错误——这可能很有趣。


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

于 2011-04-08T16:05:07.123 回答
4

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

很抱歉浪费了你们的时间!

于 2011-04-08T17:58:23.763 回答
0

@Rick:如果你去掉 warning-suppressing @,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";   
}
于 2011-04-08T16:07:57.480 回答
0

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

$filename = TEMPLATEPATH.'/uploads/'.$_POST['image_name'];
if(is_writable($filename)) {
  unlink($filename)
} else {
  // error handling. You can check which condition is failing here
}
于 2011-04-08T16:10:02.803 回答