Autor Tema: Leer fichero csv usando file en php  (Leído 11674 veces)

chicaker

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Leer fichero csv usando file en php
« en: 28 de Diciembre 2012, 20:18 »
Hola que tal soy nueva, tengo un pequeño inconveniente, resulta que necesito leer un fichero csv con php. El problema esta en que necesito leer el fichero pero este no debe estar en la misma carpeta donde esta  el script php, es decir, necesito leer el fichero desde otra carpeta, por ejemplo desde mi escritorio, tengo el siguiente script que me funciona muy bien cuando el fichero esta guardado donde esta guardado el script.
<?php
$conexion=pg_connect("host=localhost port=5432 user=postgres password=prestaciones dbname=prueba");
if(isset($_POST['submit']))
   {
     $filename=$_POST['filename'];
     $handle = fopen("$filename", "r");
     while (($data = fgetcsv($handle, 18192, ";")) !== FALSE)
     {
   
       $import="INSERT INTO prueba (id_prueba,montoneto,montodisponible) VALUES ('$data[0]','$data[1]','$data[2]')";
      pg_query($import) or die(pg_last_error());
       var_dump($data);

     }
     fclose($handle);
     print "Import done";
   }
   else
   {
 
      print "<form action='enviar_csv.php' method='post' >";
      print "Type file name <strong class='highlight'>to</strong> import:<br>";
       
      print "<input type='file' name='filename' size='20'><br>";
      print "<input type='submit' name='submit' value='submit'></form>";
   }
   ?>
« Última modificación: 12 de Septiembre 2014, 17:01 por Alex Rodríguez »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:Leer fichero en php
« Respuesta #1 en: 28 de Diciembre 2012, 23:18 »
Hola chicaker yo creo que lo único que necesitas es que el nombre del fichero csv a leer llegue con la ruta completa para que puedas leerlo desde una carpeta distinta a aquella donde tienes el script. Me refiero a  que si tú como nombre de archivo pones "misDatos.csv" sólo te va a leer el fichero si se encuentra en la misma carpeta donde está el script. En cambio (suponiendo que estás en local) si como nombre de archivo pones "C:\wamp\scripts\misDatos.csv" los datos te los cogerá de la ruta indicada.

Ten en cuenta que cuando estés trabajando con un servidor el sistema de rutas no es igual que cuando estás trabajando en local. Ejemplos de rutas para remoto:

<?php
$fp = fopen("/apr2/fichero.txt", "r");
$fp = fopen("/apr2/fichero2.txt", "w");
$fp = fopen("ht tp://www.aprenderaprogramar.com/texto.txt", "a+");
$fp = fopen("ftp://ftp.elmundo.es/fichero.txt", "w");
?>
« Última modificación: 09 de Febrero 2013, 11:29 por Ogramar »

chicaker

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Leer fichero en php
« Respuesta #2 en: 29 de Diciembre 2012, 00:02 »
Hola gracias por tu respuesta, pero no se si te diste cuenta que estoy abriendo el archivo csv a traves de un campo de tipo file

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:Leer fichero en php
« Respuesta #3 en: 30 de Diciembre 2012, 14:46 »
Pues no me había dado cuenta. He intentado correr tu código y me he encontrado con diversos problemas:

- Cuando usas un formulario html para subir un fichero al servidor, este se almacena en una ruta temporal dentro del servidor. Para poder trabajar con el fichero necesitamos tenerlo en una ruta determinada, podemos crear una carpeta con un nombre que ponemos nosotros y en una ruta conocida por nosotros para almacenar el fichero y poder trabajar con él.

- La función fopen trabaja con rutas, no directamente con ficheros.


El código que he conseguido hacer funcionar es este (he dejado comentadas las partes correspondientes a base de datos, simplemente he comprobado que se suba el fichero al servidor y que se rescate la información contenida en el fichero; ten en cuenta que para que funcione tienes que crear una carpeta denominada ficheros en la misma ruta donde tengas el archivo php):

<?php
//$conexion=pg_connect("host=localhost port=5432 user=postgres password=prestaciones dbname=prueba");
if(isset($_POST['submit'])) {


// Recoge el nombre del fichero que se habrá indicado en el formulario
$fichero = $_FILES["fichero"]["name"];
// Recoge la ubicación temporal del fichero en el servidor
$fichero_tmp = $_FILES["fichero"]["tmp_name"];
// Comprueba que se ha indicado un fichero en el formulario
if ($fichero == "") {
echo "¡Error! No se ha especificado ningún fichero\n";
return;
}
 
// Ruta completa (incluido el nombre del fichero), necesaria para usar fopen; hemos creado una carpeta denominada ficheros
//La carpeta ficheros está en la misma ubicación que el script
$destino = "./ficheros/" . $fichero;
 
// Copia el fichero al directorio de nuestro servidor, cogiéndolo de la ubicación temporal
if (move_uploaded_file($fichero_tmp, $destino)) {
echo "El fichero se ha subido al servidor correctamente\n";
}
else {
echo "Se ha producido un error al subir el fichero\n";
}

    // NO ES CORRECTO $fichero =$_POST['fichero'];
     $handle = fopen("$destino", "r");
     while (($data = fgetcsv($handle, 18192, ";")) !== FALSE)
     {
   
     /*  $import="INSERT INTO prueba (id_prueba,montoneto,montodisponible) VALUES ('$data[0]','$data[1]','$data[2]')";
      pg_query($import) or die(pg_last_error()); */
     echo 'Obtenidos los datos: '. $data[0].', '. $data[1].' ,'. $data[2];
       var_dump($data);

     }
     fclose($handle);
     print "Import done";
   }
   else
   {
 
      print "<form action='enviar_csv.php' enctype='multipart/form-data' method='post' >";
      print "Type file name <strong class='highlight'>to</strong> import:<br>";
       
      print "<input type='file' name='fichero' size='20'><br>";
      print "<input type='submit' name='submit' value='submit'></form>";
   }
   ?>


Espero te sirva!

chicaker

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Leer fichero en php
« Respuesta #4 en: 02 de Enero 2013, 18:38 »
Hola muy bueno tu scipt, gracias por responder; pero necesito actualizar una tabla de una base de datos con los datos del archivo, y en el script que colocaste no aparece para actualizar la tabla

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:Leer fichero en php
« Respuesta #5 en: 03 de Enero 2013, 12:13 »
¿Pero ya lo has intentado? ¿Puedes dejarme un archivo csv para ver cómo vienen los datos? Yo quizás pueda hacer una simulación en mi computador o en un servidor, pero no tengo acceso a tu base de datos. De todas formas si me dejas el csv lo intento aunque sea una simulación.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".