Php unlink()删除文件,但返回false
我有个问题,我解决不了。我试图删除一个文件并回显成功消息,但它删除了文件但返回false。这是我的密码:Php unlink()删除文件,但返回false,php,unlink,Php,Unlink,我有个问题,我解决不了。我试图删除一个文件并回显成功消息,但它删除了文件但返回false。这是我的密码: if(unlink(".".MEDIA_PATH."/$av")){ exit(header("Location: page.php?&msg=success")); } else{ exit(header("Location: page.php?msg=fail")); } 德国的丹帮了我解决方案是:不要使用Windows编程,使用Li
if(unlink(".".MEDIA_PATH."/$av")){
exit(header("Location: page.php?&msg=success"));
}
else{
exit(header("Location: page.php?msg=fail"));
}
德国的丹帮了我解决方案是:不要使用Windows编程,使用Linux:)错误是因为我在Windows操作系统上使用localhost。确保文件存在,然后使用“file\u exists”函数将其删除(“unlink”可以在同时调用两个实例的情况下调用,但对于测试来说并不重要) 如果工作流出现故障,并且unlink函数被调用了两次,您将很容易注意到它
您还可以使用带中断的xdebug来测试代码。我找到了一个解决方案,但它不是最好的。如果你有,请帮助我 这是我的解决方案:
$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()上添加了@operator来屏蔽它,但这不是我想要的。因为我在本地主机(windows)上,而不是在live server上,这有关系吗
看起来func unlink()运行了两次,第一次删除文件,第二次返回false错误,因为它找不到指定的文件。我稍微更改了您的代码 首先检查文件是否存在,然后删除
$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;
更新:
已知在windows系统上有时会出现故障。Luka Rogovic:
看起来func unlink()运行了两次,第一次删除
文件和secund time返回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”。如果
unlink
失败,它将(如果启用)输出E\u警告,导致未设置标题(输出文本后无法设置标题)。使用绝对可怕的错误抑制运算符@
修复此行为(@unlink()
)。注意:@
的使用应该非常有限!。另外请注意,如果$av
是。/page.php
或另一个相对路径,则您有权删除整个服务器。请验证当前的错误设置是否允许您在出现警告时看到E_警告。它会给出以下错误:警告:取消链接(../media/09.2014/1529759289.jpeg):第153行的C:\xampp\htdocs\test\gal\user.inc中没有此类文件或目录。。。但它会从服务器上删除它。是什么让你认为是你的代码删除了文件?症状表明该文件首先不存在:-?您确定不删除它两次吗?这没有帮助。当我只调用unlink()而不调用任何内容时,它会删除文件并返回false,错误为:“文件不存在…”。如果第一个条件返回TRUE,则输出错误消息(“文件不存在:…”),当然不会调用“unlink”,因为脚本以“exit”函数结束。如果这是项目中使用的唯一“取消链接”功能,并且在运行脚本之前存在要删除的文件,“page.php”似乎加载了两次:第一次“!file_exists”成功,“取消链接”成功,但第二次“!file_exists”失败。这是我最初的假设:(“如果工作流有问题…”)。调用page.php时是否使用了这段代码?您可以使用“Inspect element”检查是否调用了两次“page.php”。如果您使用的是Chrome浏览器:右键单击(您应该会看到上下文菜单),单击“检查元素”,然后单击“网络”选项卡。如果未激活,请单击“保留日志”复选框。刷新网页以删除文件。单击“过滤器”图标(左边的第三个,从红色圆圈开始)并搜索“page.php”。计算发生率:如果我的假设是正确的,他们比预期的要多。首先尝试了这个,但它不起作用。它跳转到标题(“位置:page.php?msg=fail&reason=file not exists”);当我注释unlink()时,文件在服务器上,没有任何更改,但当我取消注释unlink()时,它会从服务器上删除文件,并给出错误信息。我使用了你的解决方案,同样的事情也发生了。我百分之百确定没有其他东西会删除文件。@LukaRogovic我刚才注意到你在windows系统上工作。那么,您最好使用@unlink()
。不是很好,但在这种情况下应该可以。我有Linux live server,但在Windows localhost上工作。这就是问题所在?谢谢你丹:)我需要改变我的操作系统!您可以尝试在windows主机上安装虚拟linux计算机:-)
$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"));
}
}