Php csv文件下载在本地主机上工作,但在实时运行时不工作

Php csv文件下载在本地主机上工作,但在实时运行时不工作,php,csv,http-headers,download,Php,Csv,Http Headers,Download,我正在从嵌套数组创建一个csv文件,它可以通过本地主机中指向csv文件的下载链接正常工作,但在live主机上它不会下载。这是我的php文件中的内容: 声明的标题: /** * Declare headers for CSV */ header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=registration.csv"); header("Pragma: no-cache"); he

我正在从嵌套数组创建一个csv文件,它可以通过本地主机中指向csv文件的下载链接正常工作,但在live主机上它不会下载。这是我的php文件中的内容:

声明的标题:

/**
* Declare headers for CSV
 */
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=registration.csv");
header("Pragma: no-cache");
header("Expires: 0");
输出csv文件的函数:

/**
* Function will output the scsv file
* @param the csv $data in nested array form array(array("","",""),array("",""...)...)
*/
function outputCSV($data) {
$outstream = fopen("php://output", "w");
function __outputCSV(&$vals, $key, $filehandler) {
    fputcsv($filehandler, $vals); // add parameters if you want
}
array_walk($data, "__outputCSV", $outstream);
fclose($outstream);
}
我在本地使用的链接:

<a href=".../csv/csv.php">Download CSV</a>

不会在现场工作。它没有下载,而是将我带到csv.php页面,并以如下字符串形式输出数组


…ID,“Coach One”、“Coach Two”、工作、手机、电子邮件……

尝试将csv硬编码到代码中。将这些行替换为您必须查看所传递数据是否包含错误字符的行。也许指定字符集会有所帮助

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'));
如下所述:


我没有真正调试代码的能力。如果你愿意,你可以试试这个。我知道这很有效

$out = fopen("php://temp", 'r+');
while (($row = $res->fetch(Zend_Db::FETCH_NUM)) != false) {
    fputcsv($out, $row, ',', '"');
}                       
rewind($out);
$csv  = stream_get_contents($out);
header("Content-Type: application/csv;");
header("Content-Disposition: attachment; filename=\"foo.csv\"");        
header("Pragma: no-cache");
header("Expires: 0");        
echo $csv;
exit(0); 

根据需要调整循环以迭代结果。

如果更改
标题(“内容类型:text/csv”)用于
标题(“内容类型:应用程序/八位字节流”)?尝试取出pragma和expires标题。将文件名用双引号括起来,字符串周围用单引号括起来,如下图所示:我刚刚尝试了上面发布的内容,但它仍然只是将其输出到屏幕上。听起来像是服务器配置问题或文件路径问题。如果你不扩展“在现场无法工作”的功能,很难说。当你的功能被替换时,它就起作用了。它一定是用坏字符读的。在打印数据时,数据周围有很多问题。数据看起来像这样。。。ID,“一号教练”,“二号教练”,工作,手机,电子邮件,“学校/队名”,这是否是问题所在?如果我的有效,而你的无效,那么你所做的是错误的。以这段代码为基础,慢慢地向其中添加代码片段,这样它就可以完成您想要的任务,并在每次添加代码时对其进行测试。当它停止工作时,你做的最后一件事是错的。谢谢你的帮助。明白了,请在回答中张贴更正后的代码,您将收到投票。