【问题标题】:Read and write using fgetcsv and fputcsv使用 fgetcsv 和 fputcsv 读写
【发布时间】:2014-12-15 18:18:50
【问题描述】:

我有一个第 3 方来源,我从中获取“csv”文件。我把它写在一个引用中,因为它说它是一个 csv 文件,但基本上它不是。

所以我正在获取该主要源文件,然后读取数据并将其放入“正确”的 csv 文件中。

读取和写入都很好,但问题是当它保存正确引用的数据时正在写入脚本文件本身。例如,如果我的 php 文件名是“fixcsv.php”,那么我得到的可下载文件为“修复csv.php”。

我的代码

$headings = array('HID');
$handle = fopen("MonC1.csv", "r");
$data = fgetcsv($handle, 0, ";",'"');
$fh = fopen('php://output', 'w');
ob_start();
fputcsv($fh, $headings);
// Loop over the * to export
if (! empty($data)) {
  foreach ($data as $item) {
     // echo $item;
     fputcsv($fh, array($item));
  }
}
$string = ob_get_clean();

$filename = 'csv_' . date('Ymd') .'_' . date('His');

// Output CSV-specific headers
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment filename=\"$filename.csv\";" );
header("Content-Transfer-Encoding: binary");

exit($string);

非常感谢任何帮助。提前致谢。

【问题讨论】:

    标签: php csv fgetcsv fputcsv


    【解决方案1】:

    您的Content-Disposition 的分号位置错误 (per the spec)。应该是:

    header("Content-Disposition: attachment; filename=\"$filename.csv\" );
    

    【讨论】:

    • 谢谢,但它仍然给了我保存文件的脚本名
    • 刷新浏览器缓存? (我意识到这就是Cache-Control: private 应该做的事情,但是……)
    • 清除了缓存但仍然没有运气。不知道为什么提示我保存脚本文件。
    • 成功了,问题出在文件名上。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多