PHP提示下载忽略新行

时间:2012-05-19 14:25:49

标签: php download newline prompt

我希望我的php脚本的用户能够从我的服务器下载某个文本文件的内容但我不希望他们直接从我的服务器下载它所以我想通过一个名为php的文件的download.php

我使用此代码来触发文件提示

header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=textfile.txt");
header("Content-Length: " . filesize('textfile.txt');

$fp = fopen('textfile.txt', "r");
fpassthru($fp);
fclose($fp);

代码有效,文件被下载但似乎代码忽略了该文本文件的新行。

假设原始文本文件的内容是

word1
word2
word3
word4
word5

下载文件的内容为

word1word2word3word4word5

如何解决下载文件实际上保留原始文本文件的新行的问题?

1 个答案:

答案 0 :(得分:2)

这是一个将文本文件EOL从Linux,Windows和Mac转换为Windows的代码。 所以无论你的文件有什么EOL,它都会在Win上打开。

header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=textfile.txt");
header("Content-Length: " . filesize('textfile.txt'));

$f = file_get_contents('textfile.txt');
$f = str_replace("\r\n", "\n", $f); //Convert Windows to Unix
$f = str_replace("\r", "\n", $f); //Convert Mac to Unix
$f = str_replace("\n", "\r\n", $f); //Convert Unix to Windows
echo $f;

代码很短但对于大文件来说并不算太好。