PHP 下载提示忽略新行


PHP prompt for download ignores new lines

我希望我的php脚本的用户能够从我的服务器下载某个文本文件的内容,但我不希望他们直接从我的服务器下载它,所以我想通过一个名为下载的php文件.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);

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

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

字1字2字3字4字5

下载文件的内容将是

单词
1单词2单词3单词4单词5

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

这是一个将文本文件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;

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