【问题标题】:Big CSV upload - filename could not be empty大 CSV 上传 - 文件名不能为空
【发布时间】: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 明确表示。

标签: php file csv laravel


【解决方案1】:
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';
        }

【讨论】:

  • mysql_* 函数已弃用!选择 PDO 或 mysqli,无论如何,你两次调用相同的查询,我不确定这是否有效。
【解决方案2】:

检查您的 php.ini 配置文件中的 post_max_sizeupload_max_filesize。 PHP 可能不允许上传太大的文件,所以它会从帖子中删除它。

var_dump( ini_get('post_max_size') );

请注意,post_max_size 会覆盖 upload_max_filesize(如答案 here 中所述),您应确保这两个设置都允许您要上传的尺寸。

【讨论】:

  • 确实如此(上传最大文件大小为 20MB,帖子最大大小为 25MB)但仍然出现相同的错误。
  • ini my php.ini 我确实有我所说的设置,但实际上当我执行 ini_get('post_max_size') 和 ini_get('upload_max_filesize') 时它并不相同。但是在编辑 php.ini 之后,我确实 service apache2 restart 了?
  • 确保您重新启动了 apache 并且 PHP 配置从您正在编辑的文件中读取(有时您有多个,例如示例文件和实际配置文件)。
  • 已解决,我正在编辑 /etc/php5/cli/php.ini 而不是 /etc/php5/apache2/php.ini 感谢您的帮助 ;)
猜你喜欢
  • 1970-01-01
  • 2013-12-17
  • 2016-07-05
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
相关资源
最近更新 更多