我正在从数据库中获取值并将它们插入到要下载并导入到 Outlook 中的 csv 文件中。
我正在使用此代码
// output headers so that the file is downloaded rather than displayed
$today = date("m.d.y");
header('Content-Type: text/csv;');
header('Content-Disposition: attachment; filename='.$today.'-allowners.csv');
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
// output the column headings
fputcsv($output, array('firstname', 'lastname', 'email'));
// fetch the data
$rows = mysql_query('SELECT first_name, last_name, email FROM owners');
// loop over the rows, outputting them
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);
而且我得到了奇怪的结果,首先列标题没有分隔符,其次不是数据库中的所有字段都用'"'分隔。输出如下:
firstname,lastname,email
" aaaaa"," bbbbb",0000
" aaaaa"," bbbbb"," 0000"
"aaaaa ",bbbbb,000@00000.com
aaaaa,bbbbb,000.00.0@00000.com
" aaaaa"," bbbbb"," 000.00000@00000.com"
" aaaaa"," bbbbb"," 000000@000000.com"
当尝试导入到 Outlook 中时,它给我一个错误,指出该文件无效或正在被另一个应用程序或进程使用。
- - - - - - - -解决方案 - - - - - - - -
问题是使用在 linux 上运行的 php 创建的文件的换行符结尾要在 Windows 系统中打开,这在某些软件中并不总是会造成问题,但由于它是 MS Outlook,它们看起来非常严格。我测试了用excel打开文件并保存为覆盖现有文件的CSV,它没有问题。
解决方案可以在其他问题的答案的以下网址中找到。
http://stackoverflow.com/a/12723639/2633609