php - PHP 中生成的 CSV 文件 : last value is truncated

标签 php csv codeigniter-2

在 CodeIgniter 2 中,我通过从 Oracle 数据库获取数据来生成 CSV 文件(数据量可以是不到 10 行到数十万行,这就是我“取消设置”每个 $line 的原因)使用以下代码:

        $conn = $this->db;

        $stid = oci_parse($conn->conn_id, $sql);
        oci_execute($stid);

        // Header extraction
        $headers = "";
        $values = "";

        $row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS );

        foreach($row as $key => $value) {
            $headers = $headers.$key.';';
            $values = $values.$value.';';
        }
        // Remove of last comma and adding in a line break
        $headers = substr($headers,0,-1). "\r\n";
        $values = substr($values,0,-1). "\r\n";
        $data = $headers . $values;

        $values = "";

        // Parsing all data to concatenate the values
        while (($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) != false) {
            $line = "";
            foreach ($row as $key => $value) {
                $line .= $value . ';';
            }
            $line = substr($line, 0, -1) . "\n";
            $data = $data . $line;
            // Freeing memory for the line
            unset($line);
        }
        return $data;

使用这段代码,除了一件事之外,我的 CSV 文件已正确生成。

当我只导出少量行时,一切都很好。我有所有行的所有值,以逗号分隔。 但是,当我导出几百或几千行时,最后一行的 LAST 值总是被截断 5 个字符(数据库中的数据没问题)。

HEADER1;HEADER2;HEADER3;HEADER4;HEADER5
1-XXXXXX;F1;IDX1;ERR_IDX_CAX_0001
1-XXXXXX;F1;IDX1;ERR_IDX_CAX_0001
1-XXXXXX;F1;IDX1;ERR_IDX_CAX_0001
1-XXXXXX;F1;IDX1;ERR_IDX_CAX_0001
1-XXXXXX;F1;IDX1;ERR_IDX_CAX_0001
[.......]
1-XXXXXX;F1;IDX1;ERR_IDX_CAX_0001
1-XXXXXX;F1;IDX1;ERR_IDX_CAX

我以为可能是某些缓存限制或其他原因,但它发生在导出几百行之后,无论是几百行还是几十万行。

我无法弄清楚这个...

有人可以帮忙吗?

提前致谢。

最佳答案

本文中描述的原始问题与代码无关。

问题来自 CodeIgniter force_download() 函数(来自 CI 下载帮助程序)传递的 header 内容长度。

header("Content-Length: ".strlen($data));

strlen($data) 不会返回(在我的情况下)正确的数据长度,然后我的浏览器仅下载 header 中传递的数据量,因此在末尾截断了一些字符。

没有找到关于这个“问题”的任何内容,我决定注释掉标题内容长度行

关于php - PHP 中生成的 CSV 文件 : last value is truncated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32482263/

相关文章:

java - 如何将csv文件中的某些数据添加到ArrayList

c# - 将 CSV 文件复制到 MS Access 表

java - 如何按计划按需执行 Java 任务?

php - 如何使用php脚本删除目录中的文件

codeigniter - 在 Codeigniter 下,是否可以看到 mysql_error()?

PHP CURL 创建和使用唯一命名的 cookie 文件

php - 如何使用jquery和php验证密码?

php - 在 Gearman/PHP 和 YouTube 中使用 SSL

php - 尝试使用 PHP 执行 Python 脚本

javascript - codeigniter 2.1.4 中的旧代码库阻止 session 和 ajax