我遇到了问题我无法解决。我试图删除文件并回显成功消息,但是它确实删除了文件但返回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。
答案 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”是否被调用两次。