我想'强制'在PHP中下载纯文本文件。
我有以下代码,我在网上找到了这个代码:
if (isset($_REQUEST["file"])) {
$file=$_REQUEST["file"];
header("Content-type: application/force-download");
header("Content-Transfer-Encoding: ansi");
header("Content-length: ".filesize($file));
header("Content-disposition: attachment; filename=".basename($file));
echo @fileread("$file");
}
else
{
echo "No file selected";
}
这似乎工作正常,但是当在带有记事本的Windows中打开文件时,不会保留行结尾。任何人都可以提供解决方案(文本文件必须用记事本创建)?
谢谢,Rich
答案 0 :(得分:0)
据我所知,记事本在这种情况下删除了这些行结尾。
答案 1 :(得分:0)
readfile()
,不是fileread。是的'它不是readfile,PHP甚至Web服务器问题。它只是unix和windows纯文本格式的区别。
在unix中它是\n
而在Windows中它是\r\n
你必须使用Windows格式
另请注意,您的代码非常不安全。并让攻击者读取您拥有的任何文件,包括密码等。 至少做到了
$file=basename($_REQUEST["file"]);
答案 2 :(得分:0)
据我所知,ansi
不是有效的内容传输编码。由于您希望按原样保留文件的内容(并且这些内容可能包含长行和CRLF行结尾),您可能希望使用binary