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


angelinux

Desarrollador de páginas web desde el año 2000 y con experiencia en programación de sistemas para empresas desde el 2008; cofundador de CONSoluciones; autor del blog de software libre “Angelinux-slack”; docente en maestría en UPAV y fundador de la distribución Linux Falco que está en desarrollo para la Universidad Veracruzana. Además, ponente, organizador de congreso, laborista social, impartidor de cursos de programación y servidores Linux, webmaster, y ex invitado en programa de televisión.

1 Comentario

chicaker · 18 diciembre, 2012 a las 23:27

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

Deja un comentario