我想将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;
}
答案 0 :(得分:2)
您不应将整个文件加载到内存中。
这是一个正确的例子:
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 2000, ",")) !== FALSE) {
// Do your staff with $data array
}
fclose($handle);
}