在wordpress woocommerce安装中,我需要将一些自定义订单字段导出到csv文件。一切正常,只有我在下载的文件中没有得到正确的内容。
这是我的代码:
function array_to_csv_download($array, $filename = "export.csv", $delimiter=";") {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="'.$filename.'"');
$output = fopen( get_temp_dir() . $filename, 'w');
foreach ($array as $line) {
fputcsv( $output, $line );
}
fclose($output);
}
数组类似于
$array = array(
array('Head1', 'Head2', 'Head3', 'Head4'),
array('Data1', 'Data2', 'Data3', 'Data4'),
array('Data5', 'Data6', 'Data7', 'Data8')
);
该功能位于自定义管理页面上,由提交按钮触发。
当我按下按钮时,会生成一个csv文件并将其写入临时文件夹,名为$ filename。该文件工作正常。
由函数中的第二个标题条目强制下载的文件被正确命名($ filename),但内容是该自定义管理页面的源代码。
我不需要将该文件存储在临时文件夹中,直到自动下载才有效。我试图在fopen函数中输入'php:// temp'或'php:// output',但这并没有改变下载文件的内容。
我错过了什么?
答案 0 :(得分:0)
$data = array(
array("firstname" => "Mary", "lastname" => "Johnson", "age" => 25),
array("firstname" => "Amanda", "lastname" => "Miller", "age" => 18),
array("firstname" => "James", "lastname" => "Brown", "age" => 31),
array("firstname" => "Patricia", "lastname" => "Williams", "age" => 7),
array("firstname" => "Michael", "lastname" => "Davis", "age" => 43),
array("firstname" => "Sarah", "lastname" => "Miller", "age" => 24),
array("firstname" => "Patrick", "lastname" => "Miller", "age" => 27)
);
function cleanData(&$str)
{
$str = preg_replace("/\t/", "\\t", $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}
// file name for download
$filename = "website_data_" . date('Ymd') . ".csv";
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.csv");
$flag = false;
foreach($data as $row) {
if(!$flag) {
// display field/column names as first row
echo implode("\t", array_keys($row)) . "\n";
$flag = true;
}
array_walk($row, 'cleanData');
echo implode("\t", array_values($row)) . "\n";
}
exit;