fputcsv最多只能生成2.6kb的文件

时间:2017-10-06 18:20:23

标签: php csv fputcsv

我创建了一个查询数据库,加载到数组,然后输出到CSV文件的函数。问题是当它达到2.6kb的大小时会截断文件。其他一切都很好。在我创建CSV之前和之后,我已经抛弃了数组,所以我知道它不是数组问题。这是代码。

    $rs = [];
    foreach($result as $r) {
        if($r['Valid'] == 1) {
            $r['Valid'] = 'Yes';
        } elseif($r['Valid'] == 0) {
            $r['Valid'] = 'No';
        }

        if($r['Border'] !== NULL) {
            $r['Border'] = 'Yes';
        } else {
            $r['Border'] = 'No';
            $r['County'] = ' - ';
        }
        $rs[] = $r;
    }

    $output = fopen('php://output', 'w');
    fputcsv($output, array('Zipcode', 'Count', 'Valid', 'Border', 'County'));
    foreach($rs as $row) {
        fputcsv($output, $row);
    }
    fclose($output);

$ result被定义为查询的返回值。

输出是一个CSV文件,在128行x 5 cols处停止,并在填充第128行和第4列的过程中截断。我很难过。

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 1751
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1751
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

这是ulimit -a

的输出
[Fri Oct 06 13:40:30 2017] [notice] SELinux policy enabled; h
ttpd running as context unconfined_u:system_r:httpd_t:s0
[Fri Oct 06 13:40:30 2017] [notice] suEXEC mechanism enabled
(wrapper: /usr/sbin/suexec)
[Fri Oct 06 13:40:30 2017] [notice] Digest: generating secret
for digest authentication ...
[Fri Oct 06 13:40:30 2017] [notice] Digest: done
[Fri Oct 06 13:40:31 2017] [notice] Apache/2.2.15 (Unix) DAV/
2 PHP/5.6.30 configured -- resuming normal operations
[Fri Oct 06 13:40:38 2017] [notice] caught SIGTERM, shutting
down
[Fri Oct 06 13:40:39 2017] [notice] SELinux policy enabled; h
ttpd running as context unconfined_u:system_r:httpd_t:s0
[Fri Oct 06 13:40:39 2017] [notice] suEXEC mechanism enabled
(wrapper: /usr/sbin/suexec)
[Fri Oct 06 13:40:39 2017] [notice] Digest: generating secret
for digest authentication ...
[Fri Oct 06 13:40:39 2017] [notice] Digest: done
"error_log" 37L, 3239C

我的错误日志输出。

1 个答案:

答案 0 :(得分:0)

我能够让我的同事在这里确定潜在的问题。它与我在zend表达式HTML响应中返回文件的方式有关。我不完全理解它,但我知道他现在正在返回文件流并写入临时文件。

 $output = fopen('php://temp', 'wb+');
    //zend to Stream Interface to return expected Zend Expressive body
    $stream = new Stream($output);

    fputcsv($output, array('Zipcode', 'Count', 'Valid'));

    foreach($rs as $row) {
        fputcsv($output, $row);
    }

    return $stream;

这将返回使用正确的标头返回流的process方法。

感谢大家的帮助,对于迟到的回复感到抱歉!