【问题标题】:how to unlink a file in a foreach loop with post如何在foreach循环中使用post取消链接文件
【发布时间】:2016-05-27 17:51:20
【问题描述】:

对于文件管理,我使用foreach 循环,其中显示所有文件。现在我想让foreach 删除带有$_POST 的文件。

当我在每个文件附近的 foreach 中回显 pathinfo($dir.'/'.$file, PATHINFO_DIRNAME).'/'.$file; 时,它会显示文件的确切位置。 现在对于每个文件,我想在 foreach 循环中执行类似的操作:

if(isset($_POST['delete'])) {
    unlink($_POST['unlink']);
}
<form method="post">
            <input type="hidden" name="unlink" value="<?php pathinfo($dir.'/'.$file, PATHINFO_DIRNAME).'/'.$file; ?>" />
            <input type="submit" name="delete"  value="Delete">
         </form>

我知道这是不正确的,但我希望你明白我想要实现的目标是明确的。 我该怎么做?

【问题讨论】:

  • 而且你认为这不会有坏的结局吗?
  • 添加echo 会实际打印路径怎么样?顺便说一句,完全不安全
  • 您希望一次删除一个文件还是多个文件?
  • 这段代码会发生什么?
  • 认真重新考虑你在做什么。您至少需要:身份验证、csrf 保护和目录遍历保护。

标签: php unlink file-management


【解决方案1】:

免责声明

下面概述的方法是 100% 不安全的,如果代码进入公共领域,那么你就可以和你的服务器告别了。


要删除一个文件,您可以这样做:

index.php

<form method="POST" action="delete.php">
    <input type="hidden" name="delete_path" value="/path/to/your/file.pdf">
    File.pdf <button type="submit">Delete</button>
</form>

删除.php

<?php
$delete_result = false;
$unlink_error = '';

if(isset($_POST['delete_path']) && is_file($_POST['delete_path']))
{
    $delete_result = unlink($_POST['delete_path']);
    $unlink_error = error_get_last();
}

if($delete_result)
{
    echo 'Successfully deleted '.$_POST['delete_path'];
}
else
{
    echo 'Uh oh, Spaghettios :(<br><br>';
    echo 'Last known error<br>'.$unlink_error;
}

【讨论】:

    【解决方案2】:

    我正在使用路径 unlink(FILE) 回声 $new_file_dert = 文件 。 '/'.$template_name;

                                <form method="post">
                                    <input type="hidden" name="unlink" value="<?php echo $new_file_dert; ?>" />
                                    <input name="delete" type="submit" class="btn-delete submitdelete" value="Delete">
                                </form>    
    
    
    
                             <?php
    

    echo $new_file_dert = 文件。 '/'.$template_name;

                                 if( isset( $_POST['delete'] ) ) {
                                     unlink($_POST['unlink']);
    
    
    
                                 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 2016-09-25
      相关资源
      最近更新 更多