PHP中的CSV生成文件:最后一个值被截断

时间:2015-09-09 14:25:41

标签: php csv codeigniter-2

在CodeIgniter 2中,我正在从我的Oracle数据库中获取数据生成一个CSV文件(数据量可能少于10行到数十万行,这就是为什么我“取消设置”每个$行的原因)使用以下代码:

        $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行的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

我想也许是一些缓存限制或者某种东西,但它发生在几百行导出后,它只是几百或几十万行。

我无法想出这个......

有人可以帮忙吗?

提前致谢。

0 个答案:

没有答案