浏览器将application / octet-stream视为二进制类型.您需要text / plain内容类型:
header('Content-Type: text/plain');
// Or:
header('Content-Type: text/csv');
// Or:
header('Content-Type: application/csv');
如果你正确设置了Content-Type,那么Content-Transfer-Encoding标头应该是不必要的,事实上它可能误导浏览器认为它也收到了二进制文件:
// No need, possibly harmful. Remove it...
// header('Content-Transfer-Encoding: binary');
更新:
我看到了另一个问题.您将Content-Length设置为不是文件的大小,而是设置为fopen()打开的文件句柄,这会错误地通知浏览器预期的字节数. filesize()将字符串文件名作为其参数,而不是文件句柄.在调用filesize()之前,您可能需要使用fclose($NewFile)关闭句柄.
// Instead of:
header('Content-Length: ' . filesize($NewFile));
// You mean to use $FileName
// close the file handle first...
fclose($NewFile);
header('Content-Length: ' . filesize($FileName));