【问题标题】:PHP unlink doesn't deletePHP取消链接不会删除
【发布时间】:2018-02-12 21:55:08
【问题描述】:

这个小问题毁了我的一天。我无法通过 PHP unlink 函数删除文件。我正在创建 PHP 表单来更新和编辑 pdf 文件。下面是我的html表单和PHPunlink脚本。

HTML

<form method="post" action="#" enctype="multipart/form-data">
<input type="file" value="<?php echo $row['img']?>" name="image">
<input type="submit" name="update">
</form>

PHP

<?php
if(isset($_POST['update']) && ($_FILES['image']['name'])){
$image=$_POST['image'];
unlink('../pdf/services/'.$image);
}

?>

【问题讨论】:

  • $_POST['image'] 来自哪里?
  • 非常不安全! apache有写权限吗?路径是否正确且文件存在?
  • 你得到的 unlink 的返回值是多少?可能是权限问题。使用chmod 设置适当的权限。
  • 如果image&lt;input type="file"&gt;,则您正在寻找$_FILES['image']['name'] 而不是$_POST['image']。但请围绕此添加一些安全检查。
  • 如果我在“图片”键中发布../../../../../../../../../../../../../../../../../../etc/passwd 会发生什么?

标签: php forms post dynamic unlink


【解决方案1】:

试试$_FILES。就像是 $image = $_FILES['image']; 然后$imgname = $image['name'];

之后你可以随意使用unlink(); (unlink("../pdf/services".$imgname);)

希望我能帮上忙,经过我的测试,它起作用了!

【讨论】:

  • 我按照你的方法试过了,还是不行,文件夹里还有文件。
【解决方案2】:

每当您尝试使用unlink 删除文件时,您都需要确保一切正常:

  1. 我要从中删除文件的路径是否可用?我是否可以访问路径上我需要的所有文件夹?如果没有,则需要提供必要的权限。

  2. 我的位置是我认为的位置吗?您需要运行getcwd(),这是当前工作目录。如果您的页面不在所需的位置,那么与它相比,您想要到达的路径将意味着不同的事情

  3. 将我想要的路径添加到我在第二点获得的位置是否正确并且是我期望的?

如果以上一切正常,但您仍然有问题,请检查错误日志,它可能会为您提供有用的信息。如果问题仍然存在,那么您将需要在要从中删除其他文件的路径上创建一个虚拟文件。文件是否创建?它是在正确的位置创建的吗?

【讨论】:

  • 文件路径和位置正确。我已经通过使用 echo 功能进行了测试......它打印了正确的文件名。新文件已正确上传。 move_uploaded_file($_FILES["image"]["tmp_name"],"../pdf/services/" . $_FILES["image"]["name"]); 但无法取消链接。
  • @DipakOjha 您能否检查新文件是否与要删除的文件位于同一文件夹中?如果是这样,您可以使用 unlink 删除新文件吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
相关资源
最近更新 更多