数组限制问题

时间:2013-07-03 16:05:49

标签: php arrays memory-limit

我想将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;
    }

1 个答案:

答案 0 :(得分:2)

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

这是一个正确的例子:

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