$file="csv.php?task=whovotedwho&election=7";
$filename = "whovotedwho-election7.csv";
if (file_exists("trash.png")) {
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="'.($filename).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize("trash.png"));
readfile($file);
exit;
} else { echo "file does not exist"; }
我在下载的csv中得到了这个结果。
答案 0 :(得分:4)
此:
$file="csv.php?task=whovotedwho&election=7";
它不是http://example.com/csv.php...
之类的完整/绝对网址,因此当readfile()启动时,它会执行 LOCAL 文件请求,并寻找一个名称字面为csv.php?tasketc...
的文件 NOT 执行http请求 - 它不能。您没有提供协议或主机,以便将该http请求发送给。
PHP与您的浏览器不同,<img src=kittens.jpg>
内部翻译为<img src="http://example.com/kittens.jpg">
。
坦率地说,即使你在那里有一个完整的URL,这样做非常痛苦 - 你已经在准确的SAME服务器上执行代码,你正在做http请求所以所以它就像在你的车里跳来跳去城市500英里,这样你就可以把1英尺的地方停在你开始的地方的左边。
您在错误中所看到的是原始HTML。由于您的文件名中包含&
,因此必须对其进行HTML编码,以使其在输出中显示为文字&
,并且不会作为html实体进行渲染。