0

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

当我尝试上传该文件时,在数组中上传 63296 行数据后脚本不起作用。我检查了论坛,大部分都说它是 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;
    }
4

1 回答 1

2

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

这是一个正确的例子:

if (($handle = fopen("test.csv", "r")) !== FALSE) {
  while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
    // Do your staff with  $data array
  }
  fclose($handle);
}
于 2013-07-03T16:19:53.890 回答