Subir, leer y separar los datos de un archivo (CSV) en PHP

Subir, leer y separar los datos de un archivo (CSV) en PHP

Si necesitamos subir un archivo que esté separado por comas (CSV) o por cualquier otro carácter (en el ejemplo, con tabulador), entonces podemos utili

Funciones y clases en PHP
Obtener post, get y session facilmente en PHP
Estructura básica de una página en PHP
Usar un bot de telegram para enviar mensajes en nuestros sistemas con php, bash y python
Arreglos y matrices en PHP

Si necesitamos subir un archivo que esté separado por comas (CSV) o por cualquier otro carácter (en el ejemplo, con tabulador), entonces podemos utilizar el siguiente código:

Código para leer CSV

Archivo1.php

<form method="post" action="subir_archivo.php" enctype="multipart/form-data" id="testform">
 Archivo
 <input name="archivo" type="file" id="archivo">
 <input name="boton" type="submit" id="boton" value="Subir">
</form>

subir_archivo.php

<?php
/**
 *
 * @author   Horacio Romero Mendez (angelos)
 * @License   Copyleft 2011
 * @since   Sep 4, 2011 5:20:20 PM
 * @Internal  GNU/Linux Arch 2010.05 Notebook
 * 
 */

 
//COMO EL INPUT FILE FUE LLAMADO archivo ENTONCES ACCESAMOS A TRAVÉS DE $_FILES["archivo"]
?>
<table align="center">
 <tr>
  <td>
   <b>Nombre:</b>: <?php echo $_FILES["archivo"]["name"]?>
       
   <b>Tipo:</b>: <?php echo $_FILES["archivo"]["type"]?>
       
   <b>Subida:</b>: <?php echo ($_FILES["archivo"]["error"]) ? "Incorrecta" : "Correcta"?>
       
   <b>Tamaño:</b>: <?php echo $_FILES["archivo"]["size"]?> bytes
  </td>
 </tr>
</table>


<?php
//SI EL ARCHIVO SE ENVIÓ Y ADEMÁS SE SUBIO CORRECTAMENTE
if (isset($_FILES["archivo"]) && is_uploaded_file($_FILES['archivo']['tmp_name'])) {
 
 //SE ABRE EL ARCHIVO EN MODO LECTURA
 $fp = fopen($_FILES['archivo']['tmp_name'], "r");
 //SE RECORRE
 while (!feof($fp)){ //LEE EL ARCHIVO A DATA, LO VECTORIZA A DATA
  
  //SI SE QUIERE LEER SEPARADO POR TABULADORES
  //$data  = explode(" ", fgets($fp));
  //SI SE LEE SEPARADO POR COMAS
  $data  = explode(",", fgets($fp));
  
  //AHORA DATA ES UN VECTOR Y EN CADA POSICIÓN CONTIENE UN VALOR QUE ESTA SEPARADO POR COMA.
  //EJEMPLO    A, B, C, D
  //$data[0] CONTIENE EL VALOR "A", $data[1] -> B, $data[2] -> C.


  //SI QUEREMOS VER TODO EL CONTENIDO EN BRUTO:
  var_dump($data);


  //SI QUEREMOS IMPRIMIR UN SOLO DATO
  echo "<br/>Imprimir el primer dato solo: {$data[0]}<br/>";


  //NOTA CADA VUELTA EQUIVALE A UNA LINEA COMPLETA DEL ARCHIVO CSV
 } 
   
 echo "Archivo recorrido";
   
} else 
 echo "Error de subida";
?> 

CSV de ejemplo

dato1,dato2,dato3,dato4
dato5,dato6

En fp, abre archivo que se envía desde el archivo 1.

Data primero obtiene todo el texto que está en fp [$data = fgets($fp)].

Después se hace un explode a data, es decir, se vectorizan los valores que se encuentran separados por lo que quiera el usuario [$data = explode(” “, $data = fgets($fp))] y se vuelve a guardar en data.

Si el archivo que se envió tiene la siguiente información:
dato1    dato2    dato3    dato4    dato5

Entonces explode crea un vector (arreglo) y en cada celda guarda el valor que se encuentre separado por el primer parámetro que se le envió a explode. (En el ejemplo fue tabulador o coma).

Por lo tanto en el vector data tendría el siguiente valor:

0          1           2           3           4
dato1   dato2    dato3    dato4    dato5

Y finalmente cerramos el archivo abierto

fclose($fp))

Si queremos acceder a lo que contiene la celda 3, lo hacemos con el nombre del vector, y su posición:

echo $data[3]
//Nos muestra dato4

Se puede descargar el código fuente y el ejemplo desde

https://bitbucket.org/Angelos/self-devel-csv/overview

En el panel de la derecha, en Download

COMMENTS

WORDPRESS: 1
  • comment-avatar

    Hola que tal muy bueno tu script, me gustaria saber si me podrias proporcionar un ejemplo para actualizar una tabla en base de datos con datos de un archivo csv desde php por medio de un campo input tipo file