如何在PHP中强制下载文件

新手上路,请多包涵

我有图像列表,我想要一个“下载”链接以及每个图像,以便用户可以下载图像。

那么有人可以指导我如何为 php 中的任何文件提供下载链接吗?

编辑

我希望在单击下载链接时显示下载面板 我不想导航到要在浏览器上显示的图像

原文由 OM The Eternity 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
2 个回答

如果你想强制下载,你可以使用类似下面的东西:

 <?php
    // Fetch the file info.
    $filePath = '/path/to/file/on/disk.jpg';

    if(file_exists($filePath)) {
        $fileName = basename($filePath);
        $fileSize = filesize($filePath);

        // Output headers.
        header("Cache-Control: private");
        header("Content-Type: application/stream");
        header("Content-Length: ".$fileSize);
        header("Content-Disposition: attachment; filename=".$fileName);

        // Output file.
        readfile ($filePath);
        exit();
    }
    else {
        die('The provided file path is not valid.');
    }
?>

如果您只是使用普通链接链接到此脚本,文件将被下载。

顺便说一句,上面的代码片段需要在页面的开头执行(在任何标题或 HTML 输出发生之前。) 如果您决定基于此创建一个函数来下载任意文件,也要小心 - 您需要如果您接受来自 \(_GET 或 \)_POST 的输入,请确保您防止目录遍历( realpath 很方便),只允许从定义的区域内下载等。

原文由 John Parker 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 HTML5 download <a> 标签的属性中可以使用:

 echo '<a href="path/to/file" download>Download</a>';

仅当设置了 href 属性时才使用此属性。

允许的值没有限制,浏览器会自动检测正确的文件扩展名并将其添加到文件中(.img、.pdf、.txt、.html 等)。

在这里 阅读更多。

原文由 debugger 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题