sql >> Databáze >  >> RDS >> Mysql

Jak analyzovat velký soubor CSV bez vypršení časového limitu?

Můžete udělat něco takového:

<?php

namespace database;

class importcsv
{
    private $crud;

    public function __construct($dbh, $table)
    {
        $this->crud = new \database\crud($dbh, $table);
        return $this;
    }

    public function import($columnNames, $csv, $seperator)
    {
        $lines = explode("\n", $csv);

        foreach($lines as $line)
        {
            \set_time_limit(30);
            $line = explode($seperator, $line);

            $data = new \stdClass();

            foreach($line as $i => $item) 
            {
                if(isset($columnNames[$i])&&!empty($columnNames[$i]))
                    $data->$columnNames[$i] = $item;
            }

            @$x++;

            $this->crud->create($data);
        }

        return $x;
    }

    public function importFile($columnNames, $csvPath, $seperator)
    {
        if(file_exists($csvPath))
        {
            $content = file_get_contents($csvPath);
            return $this->import($columnNames, $content, $seperator);
        }
        else
        {
            // Error
        }
    }
}

TL;DR:\set_time_limit(30); Pokaždé, když budete procházet linkou, může vyřešit váš časový limit.



  1. PERIOD_DIFF() Příklady – MySQL

  2. Dynamické výběrové pole PHP MYSQL

  3. MySQL CURRENT_TIMESTAMP při vytvoření a aktualizaci

  4. Odlišný počet MySQL, pokud jsou podmínky jedinečné