Apache设置和PHP标题(下载csv)

Apache设置和PHP标题(下载csv),php,apache,csv,header,Php,Apache,Csv,Header,我正在尝试使用PHP标题创建一个.csv报告。我使用的标题如下: header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=certificates.csv"); header("Pragma: no-cache"); header("Expires: 0"); 最初,代码输出了一个.xls文件,但本质上是html输出。我没有编写这段原始代码,所以我所做

我正在尝试使用PHP标题创建一个.csv报告。我使用的标题如下:

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=certificates.csv");
header("Pragma: no-cache");
header("Expires: 0");

最初,代码输出了一个.xls文件,但本质上是html输出。我没有编写这段原始代码,所以我所做的只是更改输出和上面的第二个标题。出于某种原因,这在我的暂存服务器上可以正常工作,但在生产服务器上却不行。权限是相同的,所以我想可能与Apache设置有关。有什么想法吗?

好吧,您没有使用正确的内容类型标题,应该是:

header('Content-type: text/csv');

那么,您没有使用正确的内容类型标题,应该是:

header('Content-type: text/csv');

那么,您没有使用正确的内容类型标题,应该是:

header('Content-type: text/csv');

那么,您没有使用正确的内容类型标题,应该是:

header('Content-type: text/csv');

正确的方法如下:

在适当的位置向.htaccess文件或主服务器配置文件添加一行“AddType”,如下所示(我不能确切地说在哪里,因为我不知道Apache运行的是哪个发行版)

然后使用下面的PHP代码片段交付您的文件

header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=example.csv');
header('Pragma: no-cache');
readfile("name and path of CSV file you wish to send");
或者使用PHP发送CSV行,而不是使用ReadFile从磁盘生成CSV行。请确保您也使用了正确的行终止符“\n”在每行的末尾应该为您可能需要的Internet Explorer目标执行此任务“\r\n”

您还需要发送一封电子邮件

header("Content-Length: xxxx");
如果上面的“xxxx”应替换为CSV内容的大小,如果您不提供内容长度,则服务器可能不知道何时关闭连接并发出下载完成的信号(实际上很少发生,但也可能发生)

如果在发送之前在服务器磁盘上创建文件,那么获得正确的长度非常容易

header("Content-Length: " . filesize("path and file name of csv to send"));
然而,归根结底,这并不是一门精确的科学,虽然你可以做很多事情来尝试强迫浏览器下载你的文件,但如果用户将他们的浏览器配置为做完全不同的事情,那么无论你采取什么步骤,都会发生这种情况

如果您希望将mime类型添加到apache配置中以支持此类场景,则需要查找apache“AddType”关键字:


如果您要使用AddType,您需要确保在Apache服务器上也安装了“mod_mime”,通常情况下,这是默认设置之一,因此默认情况下应该安装在那里。

正确的方法如下:

在适当的位置向.htaccess文件或主服务器配置文件添加一行“AddType”,如下所示(我不能确切地说在哪里,因为我不知道Apache运行的是哪个发行版)

然后使用下面的PHP代码片段交付您的文件

header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=example.csv');
header('Pragma: no-cache');
readfile("name and path of CSV file you wish to send");
或者使用PHP发送CSV行,而不是使用ReadFile从磁盘生成CSV行。请确保您也使用了正确的行终止符“\n”在每行的末尾应该为您可能需要的Internet Explorer目标执行此任务“\r\n”

您还需要发送一封电子邮件

header("Content-Length: xxxx");
如果上面的“xxxx”应替换为CSV内容的大小,如果您不提供内容长度,则服务器可能不知道何时关闭连接并发出下载完成的信号(实际上很少发生,但也可能发生)

如果在发送之前在服务器磁盘上创建文件,那么获得正确的长度非常容易

header("Content-Length: " . filesize("path and file name of csv to send"));
然而,归根结底,这并不是一门精确的科学,虽然你可以做很多事情来尝试强迫浏览器下载你的文件,但如果用户将他们的浏览器配置为做完全不同的事情,那么无论你采取什么步骤,都会发生这种情况

如果您希望将mime类型添加到apache配置中以支持此类场景,则需要查找apache“AddType”关键字:


如果您要使用AddType,您需要确保在Apache服务器上也安装了“mod_mime”,通常情况下,这是默认设置之一,因此默认情况下应该安装在那里。

正确的方法如下:

在适当的位置向.htaccess文件或主服务器配置文件添加一行“AddType”,如下所示(我不能确切地说在哪里,因为我不知道Apache运行的是哪个发行版)

然后使用下面的PHP代码片段交付您的文件

header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=example.csv');
header('Pragma: no-cache');
readfile("name and path of CSV file you wish to send");
或者使用PHP发送CSV行,而不是使用ReadFile从磁盘生成CSV行。请确保您也使用了正确的行终止符“\n”在每行的末尾应该为您可能需要的Internet Explorer目标执行此任务“\r\n”

您还需要发送一封电子邮件

header("Content-Length: xxxx");
如果上面的“xxxx”应替换为CSV内容的大小,如果您不提供内容长度,则服务器可能不知道何时关闭连接并发出下载完成的信号(实际上很少发生,但也可能发生)

如果在发送之前在服务器磁盘上创建文件,那么获得正确的长度非常容易

header("Content-Length: " . filesize("path and file name of csv to send"));
然而,归根结底,这并不是一门精确的科学,虽然你可以做很多事情来尝试强迫浏览器下载你的文件,但如果用户将他们的浏览器配置为做完全不同的事情,那么无论你采取什么步骤,都会发生这种情况

如果您希望将mime类型添加到apache配置中以支持此类场景,则需要查找apache“AddType”关键字:


如果您要使用AddType,您需要确保在Apache服务器上也安装了“mod_mime”,通常情况下,这是默认设置之一,因此默认情况下应该安装在那里。

正确的方法如下:

在.htaccess文件或主服务器配置文件的适当位置添加一行“AddType”,如下所示(我不能说exactl