将文件从服务器下载到客户端

时间:2017-05-31 17:54:19

标签: php download

我看到很多答案似乎都回答了这个问题,虽然它们似乎对我不起作用。所有答案都使用readfile(),这应该会打开一个下载框,虽然对我来说它总是打印在控制台中。 这是我的代码。

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header("Content-Transfer-Encoding: Binary");
    header('Content-Disposition: attachment; filename="\\'.basename($path).'\"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($path));       
    readfile($path);

此代码来自php readfile文档和大量的堆栈溢出问题,这些问题将此作为已接受的答案。此外,文件保存在webroot之外,虽然路径是正确生成的,据我所知它正确到达,因为它在控制台窗口中打印。

此外,我调用php文件的方式来自使用ajax的js文件。

1 个答案:

答案 0 :(得分:0)

扩展CBroe的评论:

如果您将浏览器定向到下载URL,则浏览器应正确解释下载标题并显示下载对话框。当您的Javascript在后台查询此URL时,不会发生这种情况。

在不重定向用户浏览器位置的情况下呈现下载对话框的一种方法是在页面上的iFrame中加载下载URL。