使用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);
当我上传一个1.5Mb大小的csv,其中有20.000行时,它可以工作。
当我上传一个包含38.500行的2.5Mb大小的csv时,它会给我一个错误:
SplFileObject::__construct():Filename cannot be empty in Lexer.php line 50.
我尝试使用相同的文件(刚删除或添加一些行进行测试)
有没有办法解决这个问题?
答案 0 :(得分:4)
检查php.ini配置文件中的post_max_size
和upload_max_filesize
。
PHP可能不允许上传太大的文件,所以它会从帖子中删除它。
var_dump( ini_get('post_max_size') );
请注意,post_max_size
会覆盖upload_max_filesize
(如回答here中所述),您应该确保这两个设置都允许您上传的尺寸。< / p>
答案 1 :(得分:0)
Try This..........
$type=$_FILES['file']['type'];
$filename=$_FILES["file"]["tmp_name"];
$filename_csv = explode(".", $_FILES["file"]["name"]);
$extension = end($filename_csv);
if($extension=="csv")
{
if($_FILES["file"]["size"] > 0)
{
$file = fopen($filename, "r");
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE)
{
$sql = mysql_query("insert into upload_data(spent,click,filename,date) values('$emapData[0]','$emapData[1]','$emapData[2]','$emapData[3]')") or die (mysql_error());
mysql_query($sql);
}
fclose($file);
echo $error1=ucwords('<div style="margin-left:60px;position: absolute;width: 400px; color: #006400;">CSV File has been successfully Imported</div>');
}
}
else
{
echo $error1=ucwords('<div style="margin-left:60px;position: absolute;width: 400px; color: #CC0000;">Invalid File:Please Upload CSV File</div>');
// echo 'Invalid File:Please Upload CSV File';
}