【问题标题】:How to delete a file through clikcing a link in PHP如何通过单击 PHP 中的链接删除文件
【发布时间】:2020-06-12 19:49:33
【问题描述】:

我有一个页面可以将文件上传到服务器的文件夹并在 MySQL 中写入文件的引用。现在,我可以通过单击链接查看和下载文件。

但我也想从服务器目录和数据库中删除文件,这样文件名就不会出现在显示页面中。我有一个很棒的字体垃圾图标,我希望在单击该图标后删除当前文件。

我尝试使用unlinkunset 方法并使用文件路径作为参数,但它总是显示错误:

Warning: unlink(uploads/75-horse.jpg): No such file or directory in C:\wamp64\www\mysite\upload-page.php on line 214

我的代码:

<tbody>
    <?php
    $i = 1;
    while ($row = mysqli_fetch_array($result)) {
    ?>
        <tr>
            <td><?php echo $i++; ?></td>
            <td><?php echo $row['filename']; ?></td>
            <td><a href="uploads/<?php echo $row['filename']; ?>" target="_blank">View</a></td>
            <td><a href="uploads/<?php echo $row['filename']; ?>" download>Download</a></td>
            <td>
                <!--trying to delete the file: starts-->
                <a href="?delete=1">
                    <i class="fa fa-trash-o" style="color:red"></i>
                </a>
                <?php
                $current_file_name = $row['filename'];
                $file_path = "uploads/$current_file_name";
                if (isset($_GET['delete'])) {
                    unlink($file_path);
                }
                ?>
                <!--trying to delete the file: ends-->
            </td>
        </tr>
    <?php } ?>
</tbody>

谁能帮我弄清楚为什么会发生这种错误以及在 PHP 中删除文件的最佳实践?

参考图片:

尝试两小时后更新: 最后这个技巧帮助我删除文件而不显示任何错误/警告。

if (isset($_GET['delete'])) {
if (is_file($_SERVER['mywebsite.se/'] . 'uploads/' . $current_file_name)) {
unlink($_SERVER['mywebsite.se/'] . 'uploads/' . $current_file_name);
}
}

但是,尽管它从目录中删除了文件,但网页仍然显示带有删除图标的文件名。谁能指导我如何才能完全删除该行以使已删除的文件不再出现?

【问题讨论】:

  • 你正在处理一个文件结构,你需要使用完整的服务器路径
  • 不朽,我还不是很清楚。我在 Wamp 服务器下的 localhost 中运行它。如何在将删除功能上传到真实服务器之前对其进行测试?我尝试过使用本地服务器的路径 $file_path = "localhost/mysite/uploads/$current_file_name";它显示相同的错误。
  • wamp 上的路径看起来像:C:\wamp64\www\mysite ..

标签: php html file get web-development-server


【解决方案1】:

您可以尝试使用来自文档根目录的路径吗?

unlink($_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $current_file_name);

对于您问题的第二部分,您似乎正在根据来自 SQL 查询的数据创建行。要停止创建行,您还需要在 SQL 中从表中删除数据,以便完全删除该行。如果您使用准备好的语句,这将如下所示。

if (is_file($_SERVER['mywebsite.se/'] . 'uploads/' . $current_file_name)) {
    unlink($_SERVER['mywebsite.se/'] . 'uploads/' . $current_file_name);
    $stmt = $connection->prepare("DELETE FROM tableName WHERE ID = ?");
    $stmt->bind_param('s', $id);
    $result = $stmt->execute();
    $stmt->close();
}

【讨论】:

  • 现在是在删除文件吗?
  • a.norman,是的,但对代码几乎没有修改。你能看看我的更新吗,如果你能帮助指导我解决其他相关问题,我将不胜感激。
【解决方案2】:

我不懂 php,但我用 jQuery 和 ajax,JSP 做了同样的事情

我创建了一个 java 页面,用于删除我通过 ajax 调用的那个文件行的删除按钮,单击按钮并在 ajax 的数据参数中传递文件名。

我认为这部分是你做的

为了从网页中删除“tr”,我在删除按钮单击时使用 jQuery

$(this).closest(tr).remove() 以便将时间 tr 从您的网页中删除

当你刷新时,
您的页面仅创建存储在数据库中的 tr 数量(不显示已删除的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多