【问题标题】:Downloading file from server PHP - File is slightly off从服务器 PHP 下载文件 - 文件略有偏差
【发布时间】:2014-03-07 06:22:14
【问题描述】:

我希望这是一个简单快速的解决方法。我已经看过这里以了解如何强制从服务器下载文件。这是我在下面使用的:

<?php
// Sending the file - a pdf in this case
header('Content-type: application/octet-stream');

// Specify what the  file will be called
header('Content-Disposition: attachment; filename="1234.txt"');

// And specify where it is coming from 
readfile('C:\test\1234.txt');
?>

这应该很容易解释,但我有一个文本文件保存在 C:\test\1234.txt。

我使用 HTML 页面中的这个链接到我的名为 download.php 的 php 文件(具有上述代码):

<a href="/download.php" title="Download This PDF">Download This File!</a>

好的,现在问题..我的原始文本文件是这样的:

test

但是当我下载文件时,结果是上面的回车:

_
test

文本文件的问题并不大,但由于这个问题,下载的所有其他文件都已损坏,我相信这就是原因。我希望有人对此有一个非常简单的解决方案。

提前致谢!

【问题讨论】:

  • 一个.txt文件和一个.exe和PDFtitle="Download This PDF";我很困惑。
  • 问题很可能是,您正在加载一个 .exe 文件作为要下载的文件,告诉浏览器它是一个文本文件,然后从那里开始。 PS:刚注意到更新。那么您是否使用 exe 文件而不是文本来执行此操作?
  • 抱歉,伙计们,这是一个打字错误。我现在更新了。在这两种情况下实际上都是 .txt
  • 您是否考虑过只将文件名传递给 file_get_contents 而不是使用使用输出流的 readfile?除了允许下载文本文件之外,您还打算这样做吗?
  • 实际 PDF 文件的构造机制是什么?您显示的代码中的所有内容仅引用txt 文件。

标签: php html


【解决方案1】:

您可以尝试删除 PHP 结束标记。请注意来自 php.net 的引用

如果文件是纯 PHP 代码,最好省略 PHP 关闭 文件末尾的标签。这可以防止意外的空白或新的 在 PHP 结束标记之后添加的行,这可能会导致不需要的 影响,因为 PHP 将在没有时开始输出缓冲 程序员打算在该点发送任何输出 脚本。

也许这就是你得到额外回车的地方。

【讨论】:

  • 我认为这是一个有效的场景。
  • 试过了。仍然导致回车:/
  • 实际上...奇怪的是,当我删除“php”标签然后读取它时,生成的文件很好。不知道为什么,但这有效。感谢您的帮助。
  • 可能是一些额外的空白。 readfile 设置输出缓冲,如果你在使用缓冲的文件中有奇怪的空间,你可能会得到像这样的意外结果,因为文件被打包发送到管道
猜你喜欢
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多