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
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