【问题标题】:Getting PHP to force a file download让 PHP 强制下载文件
【发布时间】:2014-08-29 00:21:55
【问题描述】:

看看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 对象是否可能...

【问题讨论】:

  • " 上面的链接似乎在谈论正在下载的 csv 或 html 文件——与实际文件相比。" ??因为 html 文件或 csv 文件在某种程度上是假文件?
  • 你的问题充满了不必要的信息,我不明白你的实际问题......
  • @NielsKeurentjes 当有人上传文件时,他希望执行一些修改,将其转换为 xlsx 文件,然后在该任务运行后“提示”下载文件。
  • 所以只是Content-disposition?我无法从中做出正面或反面哈哈。
  • @NielsKeurentjes - 奇怪的是其他人似乎没有理解问题。感谢那些帮助过的人!

标签: php


【解决方案1】:

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

届时您可以使用之前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)

创世纪的解决方案:

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");

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

【讨论】:

  • 这成功了,文件现在下载。我添加了 Genesis 的解决方案。但是,文件“不正确”下载(即:服务器上的文件可以正常打开,但下载的文件被视为已损坏),我将就此提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2010-11-03
  • 2010-11-30
  • 2010-12-03
相关资源
最近更新 更多