【问题标题】:Array limit issue [duplicate]数组限制问题[重复]
【发布时间】:2013-07-03 16:05:49
【问题描述】:

我想将 csv 文件上传到数据库,所以我使用 word-press 插件来做到这一点。我的文件大小为 350 MB。虽然我复制了一些数据并将其保存到新文件中,但现在它的文件大小为 14 MB,总行数为 66872 。

当我尝试上传该文件时,脚本在上传 63296 行数据后无法运行 array 。我检查了论坛,大部分都说它是 memory_limit 问题。我什至更改了 memory_limit = 2000M 但没有帮助。

这是插件的代码

    function csv_file_data($file, $delim) {
            $this->checkUploadDirPermission ();
            ini_set ( "auto_detect_line_endings", true );

            $data_rows = array ();
            $resource = fopen ( $file, 'r' );
            //print $file;  
            $init = 0;
            while ( $keys = fgetcsv ( $resource, '', $this->delim, '"' ) ) {
                    print $keys;
                    print $init;
                    if ($init == 0) {
                            $this->headers = $keys;
                    } else {
                            array_push ( $data_rows, $keys );
                    }

                    $init ++;
            }
            //print_r($data_rows);
            print $init;
            fclose ( $resource );
            ini_set ( "auto_detect_line_endings", false );
            return $data_rows;
    }

【问题讨论】:

  • 如果在上传过程中发生这种情况,我猜想问题出在file uploads
  • 您是否尝试将完整文件读入数组?显然,这对于大文件来说是个坏主意,应该逐行完成。如果脚本运行时间过长,它也可能下降到 max_execution_time,请尝试增加它。
  • @Andrew 是的,它就是这样做的,我增加了 max_execution_time 但它没有用
  • @Jack 我不认为它的上传问题,因为我可以从文件中获取数据
  • 你得到什么错误,它在哪里退出?你检查了 php 错误日志并启用了 display_errors 吗?

标签: php arrays memory-limit


【解决方案1】:

您不应该将整个文件加载到内存中。

这是一个正确的例子:

if (($handle = fopen("test.csv", "r")) !== FALSE) {
  while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
    // Do your staff with  $data array
  }
  fclose($handle);
}

【讨论】:

  • 感谢您的回复,所以它会一直加载 2000 行直到文件结束?如果我错了,请纠正我
  • 你错了。此代码将读取整个文件。 2000 是最大字符串长度,在 php5 中你可以简单地使用 fgetcsv($handle) 来读取字符串,没有字符串长度限制。
  • 字符串长度超过2000怎么办?
  • fgetcsv 将首先读取 2000。但如前所述,您可以只使用 1 个参数来避免限制或在 php >= 5.4 中使用 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2013-09-14
  • 1970-01-01
  • 2014-01-17
  • 2013-12-16
  • 2019-05-04
相关资源
最近更新 更多