【发布时间】: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