让PHP强制下载文件

时间:2014-08-28 16:15:28

标签: php

查看Force Download of Files with PHPForce download file with PHP giving empty file以及让我最接近的人How to force download an image without a script, but with $_GET?

我仍然无法找到解决问题的方法。

我有一个html文件,允许用户提交文件以将文件发布到我的'upload_file.php'PHP脚本。

<html>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

upload_file.php接收文件,对其进行一系列更改,提取数据,最后通过PHPExcel生成xlsx文件。这是一种简单的格式转换,只需要一点点逻辑。目前,为了测试,我只是将文件与php文件一起编写。我可以让upload.php文件输出到所述文件的链接并称之为好。

但是,我宁愿用户点击初始上传按钮,经过几秒钟的处理后,生成的文件开始下载到他们的系统。以上链接似乎谈论正在下载的csv或html文件 - 与实际文件相比。

只是'回显'文件名似乎没有这样做(正如在其他线程中所建议的那样)。我还看到了一个正确设置标题的建议,我发现内容类型应该是xlsx文件的“application / vnd.openxmlformats-officedocument.spreadsheetml.sheet” - 但没有人真正完全充实了什么'设置标题的意思也不知道如何操作。

我无法想象这很难,但我似乎无法对其进行排序。任何人都可以帮助这个初学者吗?

另外,如果可能的话,如果文件根本不存在于服务器上,我会很喜欢它 - 但我不确定这对PHPExcel对象是否可行......

1 个答案:

答案 0 :(得分:3)

用户上传文件,您可以记住上传文件的名称。

到那时,您可以使用之前的答案answered来解答如何强制下载文件的问题。

Pit Digger的解决方案:

$file_url = 'http://www.myremoteserver.com/file.exe';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); 
readfile($file_url); // do the double-download-dance (dirty but worky)

genesis的解决方案:

header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"file.exe\""); 
echo readfile($url);

或者,对于 exe 文件:

header("Location: $url");

注意:很高兴看到你到目前为止所尝试的内容,看看你是否对如何完成任务有所了解,甚至可能会更好地告诉我们你在尝试什么实现。如果这不是您问题的答案,那么我强烈建议您编辑您的问题以启发我们,因为它可能更清楚。