Как пересылать файл csv, с массовыми колоннами массовых реестров в php?

У меня есть файл с 55 колоннами, это приблизительно 2500 реестров в файле csv. Я не знаю, если был алгоритм для этого, я попробовал создавать один array с именами реестров, и я они ввел один из-за одного, но он дает мне ошибку, и опаздывает много. В настоящее время я реализую эту процедуру пересылая файл из-за phpmyadmin, он очень быстрый: кто-то знает что-то на как эта созданный phpmyadmin чтобы пересылать файлы с эффективностью и скоростью?

ИСТИННАЯ ПРОБЛЕМА здесь состоит в том, что есть один internal server ошибка, так как это слишком много реестров, и я хотел бы знать, есть ли оптимальный способ вводить в основание с массовыми реестрами.

 $cabezal = array("Telefono","DTO","siglas","Nombre"/*más nombres de columnas (hasta 55)*/);
if ($_FILES['csv']['size'] > 0) {
   $csv = $_FILES['csv']['tmp_name'];

   $handle = fopen($csv,'r');
   $i = 0;
   while ($data = fgetcsv($handle,0,",","'")){

    if ($data[0]) { 

       funcion_importar($cabezal[$i]/*nombre de columna*/,data[$i]/*valor*/)

    }

}
0
задан 15.09.2016, 20:18
3 ответа

Чтобы мне удалось решить проблему массовых данных, я хранил их в array и я они приложил в решении (я знаю, что он не является практическим и опасным, но по крайней мере в моей системе нужно быть logeado, чтобы соглашаться на эту функцию) хорошо, следующую проблему, с которой я сталкиваюсь, это 'internal server ошибка', что докуда я знаю, этот случается, потому что время ожидания сервера заканчивается, и изменяются переменными php.ini, что назывались, мне кажется немного как time_max_exec, хотя я не помню Ваше имя хорошо, что проблема происходит отсюда.

-7
ответ дан 24.11.2019, 13:45
  • 1
    Быть должным и # 237; схвати считать в eligir ответ из-за усилия, которое внесли Shaz, Хосе Хавьер Сегура, s и # 237; ни один acert и # 243; в вопрос, по крайней мере, считать в ответ, что я поддерживаю, чтобы решать ее. – Otto 15.09.2016, 19:36

Чтобы создавать договоренность (array) ассоциативно начиная с csv, ты можешь использовать этот код, который также использует первую линию как "keys" произведенной договоренности.

$csv = array_map('str_getcsv', file($file));

array_walk($csv, function(&$a) use ($csv) {
  $a = array_combine($csv[0], $a);
});

array_shift($csv); // eliminar primera línea

Этот код я это использовал с файлами csv приблизительно 1 миллиона линий и 30 колонн, с временами обработки ниже 1-2 секунд, в PHP7.


Более простой и быстрый выбор - комбинация array_map с str_getcsv чтобы производить не ассоциативную договоренность:

$csv = array_map('str_getcsv', file('archivo.csv'));
3
ответ дан 24.11.2019, 13:45
  • 1
    спасибо, но он не отвечает мой вопрос:/ – Knock Code 29.07.2016, 08:32
  • 2
    Я верю в то, что @Shaz s и # 237; ответь на твой вопрос. В моем opini и # 243; n для больших файлов смоги быть лучше fgetcsv , так как он обращается l и # 237; nea в l и # 237; nea файл вместо того, чтобы это загружать, я сообщаю в памяти (в documentaci и # 243; n и #233; sta funci и # 243; n у тебя есть примеры c и # 243; я говорю достаточно полные). Если то, что ты хочешь, c и # 243; я говорю, что phpMyAdmin ты это можешь загружать в phpmyadmin.net/downloads и это проверять все, что ты понравился. – José M. Carnero 29.07.2016, 09:33
  • 3
    #191; Cu и # 225; l - ошибка, которая выходит? и #191; Цюй и # 233; не он и # 237; хорошо? Если мы не понимаем, он вероятно, потому что ты не объясняешь хорошо твою проблему. – Shaz 02.08.2016, 16:53
  • 4
    est и # 225; n закрепляя м и # 225; s в c и # 243; я говорю, чем в вопросе: и quot; и #191; кто-то знает что-то на как эта созданный phpmyadmin, чтобы пересылать файлы с эффективностью и скоростью? " и я это говорю, потому что у пользователя, за которого он ответил внизу, есть идея, м и # 225; s яичный белок проблемы – Knock Code 15.09.2016, 19:13
  • 5
    Есть вопрос в t и # 237; tulo и другая в контенте. Мой ответ пробует решать общую проблему, которая соответствует м и # 225; s в t и # 237; tulo вопроса. – Shaz 15.09.2016, 19:16

Я использую эту функцию, чтобы импортировать данные с CSV, хотя мое более легкое, потому что это едва 8 колонн

        $nombre_archivo = $_FILES['archivo']['name'];
        $tipo_archivo = $_FILES['archivo']['type'];
        $tamano_archivo = $_FILES['archivo']['size'];
        $archivo=$_FILES['archivo']['tmp_name'];

        header("Location: ../partidos/partidos.php");

        if ($nombre_archivo!="")
        {

            $file = $_FILES['archivo']['name'];
            $res = explode(".", $nombre_archivo);
            $extension = $res[count($res)-1];
            $nombre= date("YmdHis")."." . $extension;
            $dirtemp = "../../upload/temp/".$nombre."";

            copy($_FILES['archivo']['tmp_name'], $dirtemp);

            $row = 0; 
            $fp = fopen ($dirtemp,"r"); 
            //el valor mil indica la cantidad de bytes del archivo
            //si el archivo es un poco grande es mejor dejarlo en 0
            //en algunos casos el ";" no es aceptado usa ","
            $i=0;
            while ($data = fgetcsv ($fp, 0, ";")) 
            { 
                $local=$data[0];
                $visitante=$data[1];
                $resultado=$data[2];
                $fecha=cambiaf_a_mysql($data[3]);
                $hora=$data[4];
                $temporada=$data[5];
                $competicion=$data[6];
                $jornada=$data[7];
                $idequipo=$data[8];
                $pabellon=$data[9];
                $direccion=$data[10];

                $campos="local,visitante,rtdo,fecha,hora,temporada,competicion,ronda,idequipo,pabellon,direccion";
                $valores= $local . "|" . $visitante . "|". $resultado ."|" . $fecha . "|" . $hora . "|" . $temporada ."|". $competicion . "|" . $jornada . "|". $idequipo . "|" . $pabellon . "|" . $direccion ;
                insertarBD( $prefijo."partidos", $campos, $valores);
            } 
            fclose ($fp); 
            unlink($dirtemp);
        }
2
ответ дан 24.11.2019, 13:45
  • 1
    Спасибо другу, уже удалось решить это:) – Knock Code 14.09.2016, 05:21
  • 2
    @Jose Пач Дельгадо, если какой-то из ответов подал тебя, пометь ее как принятая, для других людей, у которых будет мочь быть проблема. А, помести твой ответ для того же самого. Приветствие – Jose Javier Segura 14.09.2016, 11:59
  • 3
    Хорошая точка спасибо, har и # 233; – Knock Code 15.09.2016, 10:17