csv的文件下载适用于本地主机,但不适用于实时主机

时间:2012-12-20 17:00:43

标签: php csv http-headers download

我正在从嵌套数组创建一个csv文件,它可以正常使用本地主机中csv文件的下载链接,但在实时主机上它不会下载。这是我的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>

无法在Live网站上工作。而不是下载它只是带我到csv.php页面并以这样的字符串输出数组。

... ID,&#34; Coach One&#34;,&#34; Coach Two&#34;,Work,Cell,Email,...

2 个答案:

答案 0 :(得分:1)

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

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'));

如下所述:

http://code.stephenmorley.org/php/creating-downloadable-csv-files/

答案 1 :(得分:0)

我没有设置为真正调试你的代码。如果你愿意,你可以试试这个。我知道它有效。

$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); 

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