【问题标题】:File downloading in php [closed]在php中下载文件[关闭]
【发布时间】:2012-10-28 07:36:29
【问题描述】:

目前我正在一家公司的网站上工作,如果求职者在该网站上发布他们的简历,它将在管理面板中显示并提供下载选项。

现在我需要有关下载部分的帮助。在管理部分,我正在显示有关新注册求职者的信息,以及一个允许管理员下载求职者简历的按钮。我至少需要一个可行的例子来做这件事,如果我能就文件下载得到一个很好的讨论,我会非常感激。

我在 C# 中的 asp.net 中有文件下载选项的网站工作,但不知道如何在 html PHP 中实现它。

【问题讨论】:

标签: php


【解决方案1】:

看到你说你已经有一个下载链接。只需链接到文件即可。

<a href="download.php?file=user-cv.pdf">Download</a>

download.php 中,以这种方式给Content-disposition: attachment;

<?php
    # Sanitize the code to avoid injection
    $file = "uploads/" . stripslashes(str_replace(array("..", "/"), "", $_GET["file"]));
    header('Content-Disposition: attachment; filename="' . $file . '"');
    header('Content-type: application/pdf');
    readfile($file);
    die();
?>

警告:

正如Corbin 所说,如果人们试图直接访问该文件,则会存在巨大的安全漏洞。最好将其作为文件名、文件类型存储在数据库中,这样就可以这样访问了:

<a href="download.php?user=praveenscience">Download</a>

在 PHP 代码中,从 MySQL 服务器获取结果并以这种方式下载:

<?php
    $file = mysql_result(/* Query Here */);
    header('Content-Disposition: attachment; filename="' . $file["filename"] . '"');
    header('Content-type: ' . $file["mimetype"]);
    readfile($file["filename"]);
    die();
?>

【讨论】:

  • 请注意以后可能复制/粘贴此代码的任何人:这是一个巨大的安全漏洞。例如?file=/etc/passwd?file=/path/to/super/secret/file。 (我的一部分认为这个答案值得一票否决,至少没有警告巨大的安全漏洞,但是......)
  • @Corbin 感谢您的通知。我已经添加了消毒部分。
  • stripslashes 只删除 \,而不是 /。由于点将被删除,大部分风险将得到缓解,但驱动器根目录中的任何内容都可以访问。 (此外,不应该假定文件密钥存在于 $_GET 中,但现在我只是迂腐:p)
  • @Corbin 添加了据我所知的最佳方法。现在需要你的 cmets。
  • 我刚刚意识到 str_replace 中还有另一个缺陷。您应该检查它将 ​​..../test/ 转换为 (../test) 的内容。只需将./ 替换为空字符串即可。
【解决方案2】:

提供完整的简历路径以及服务器中的文件名作为下载按钮的超链接

像这样:

<a href="<?php echo 'path of file/filename';?>"><img src="download.png"></a>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多