【发布时间】:2015-01-22 04:04:19
【问题描述】:
将 php 5.4.34 和 Laravel 4 与 apache 2.2.22 和 Ubuntu 一起使用。
使用库 https://github.com/goodby/csv 解析上传的 csv。
这是我的代码:
$file = Input::file('file');
//echo $file->getClientOriginalName();
$config = new LexerConfig();
$config
->setDelimiter(";")
->setToCharset('UTF-8')
;
$lexer = new Lexer($config);
$interpreter = new Interpreter();
$salarie_csv = [];
$errors = [];
$lineNb = 0;
$interpreter->addObserver(function (array $rows) use (&$salarie_csv, &$lineNb, &$errors) {
//some code
});
$lexer->parse($file, $interpreter);
return Response::json($errors, 200);
当我上传一个包含 20000 行的 1.5Mb 大小的 csv 时,它可以工作。
当我上传一个包含 38.500 行的 2.5Mb 大小的 csv 时,它给了我错误:
SplFileObject::__construct():Filename cannot be empty in Lexer.php line 50.
我尝试使用相同的文件(只是删除或添加了一些测试行)
有没有办法解决这个问题?
【问题讨论】:
-
如果它需要一个字符串名称,不应该是
Input::file('file')->getRealPath();,还是你的 Goodbye/CSV Laravel 感知的? -
嗨@BastienSander,您是否检查了 php.ini 文件中设置的文件大小限制?默认大小通常为 2mb。所以只是猜测它可能会导致问题。
-
@Wrikken : 它需要文件输入,而不是字符串。
-
@CuriousMind :确实如此(上传最大文件大小为 20MB,帖子最大大小为 25MB)但仍然出现相同的错误。
-
@BastienSander: 文件名 是 字符串,而不是目的。特别是如果SplFileObject 明确表示。