Para leer un archivo .txt línea a línea en PHP vamos a utilizar la función fgets(). Por ejemplo si queremos leer línea por línea el archivo 1.txt que se encuentra ubicado en la misma carpeta que el archivo .php, tenemos que escribir en el archivo PHP:

<?php
$file = fopen("1.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
?>

victor

Hola!. Me llamo Víctor Reyes y soy Ingeniero Agrónomo de formación y programador web de profesión (desde el año 2006). Por otra parte me gusta, entre otras aficiones, el senderismo, jugar al futbol y al FIFA en la PS3. Te animo a participar en mi web www.biolucas.com

This Post Has 44 Comments

  1. Noe

    mmm… no le entiendo muy bien.

  2. Joseph

    Hola muy buenas noches, ante todo te felicito por tu dedicación a impartir el conocimiento y mas de esta web, mira tengo una duda y me gustaría que me apoyase a deducirla, tengo una pagina web ya creada solo somos dos usuarios moderado y usuario común ok entonces yo como moderador, como aplico si con php o JavaScript , subir automáticamente un archivo txt a mi pagina web y mostrar el resultado ejemplo:

    me loggeo
    user
    pas
    valida mi usuario y me redirige a mi pagina de moderador vale aquí todo genial ahora justamente cuando aparezca mi pagina en x lugar mmm no se el nombre de mi pc

    ese archivo lo tome de mi disco duro no se digamos que la ruta sea c:/joseph/mipc.txt ese archivo solo contendrá una línea de máximo 7 letras máximo y que aparezca en mi pagina web gracias espero haberme explicado

  3. Jorge

    Hola Victor,

    Se puede leer un txt o cvs con miles de registros lineales y crear un nuevo txt tabulado de otra forma.
    El archivo origina contiene:

    A; 0; 001; 12;
    A; 0; 002; 14;
    A; 0; 003; 2;

    Y necesito quede:

    A;0;
    001;12;
    002;14;
    003;2;

    Se puede???

    1. victor
      victor

      Hola Jorge, muchas gracias por contactarnos. Realmente quieres quitar los 2 primeros caracteres que hay en todas las líneas (A;0;) y dejarlos en la primera línea, ¿sería así?. Una duda es si los 2 primeros caracteres cambian o siempre son los mismos.

      Saludos!

  4. Eduard José Da gama

    Buenas tardes, Tengo una duda estoy desarrollando un formulario de login quiero que valide buscando los usuario en un txt osea quiero que los usuarios y contraseñas esten contenidos dentro de un txt y cuando valide los busque en el txt ¿que funcion puedo utilizar?

    usuario.tx

    Login: juancho clave: 2233

    y en el php llame al archivo usario.txt lo lea y valile si se encuentra registrado si es asi que pase a la siguiente pagina.

    lo quiero de esa manera para ir agregando al txt usuario

    En que me puedes ayudar

    1. victor
      victor

      Hola Eduard, muchas gracias por contactar y lo publico. Espero que entre todos te podamos ayudar.

      Un saludo, Víctor

  5. Sergio

    necesito hacer un buscador en php ingresando usuario y que jale todos sus datos antes habiendo sido guardado en un txt. Estoy que busco ayuda como loco

    1. victor
      victor

      Hola Sergio, gracias por participar. Lo publico aquí y espero que entre todos te podamos ayudar.

      Saludos!

  6. richard

    dado un txt (fichero plano) que lo importe a excel desde php ¿se puede? Muchas gracias por la ayuda.

    1. victor
      victor

      Hola Richard, gracias por participar en la web. Creo que quieres leer un archivo excel desde php. He visto que se utilizan librerías como la PHPExcel para poder leer las celdas de un archivo xls. No se si alguien te podrá informar con más detalle.

      Saludos, Víctor

  7. phpfan

    Hola amigos yo necesito, o un script que me borre las ultimas 5 lines de un archivo txt o cvs, o uno que lo corte en partes mas chicas. uso el siguiente codigo para dividir pero parece que no sabe bien el final de la linea y se estropean los archivo que genera. talvez sea cosa de el fget, si lo divido en windows tambien se altera los archivos que genera y no sale bien.

    para lo de borrar la ultima linea estoy trabajando pero no he logrado nada, abajo el codigo del split de csv.
    <?php
    /**
    * Split a CSV file
    *
    * Each row is its own line.
    * Each cell is comma-separated
    * This file splits it into piece of size $size, add the header row
    * and names the resulting file filename_X.csv where filename is the
    * name of the original file and X is an incrementing integer.
    */

    // Editable Options
    $size = 20000; // about 20kb
    $to_read = 'populate.csv';

    // Do not edit
    $done = false;
    $part = 0;
    if (($handle = fopen($to_read, "r")) !== FALSE) {
    $header = fgets($handle);
    while ($done == false) {
    $locA = ftell($handle); // gets the current location. START
    fseek($handle, $size, SEEK_CUR); // jump the length of $size from current position
    $tmp = fgets($handle); // read to the end of line. We want full lines solo mide 1k se agragara mas
    $locB = ftell($handle); // gets the current location. END
    $span = ($locB – $locA);
    fseek($handle, $locA, SEEK_SET); // jump to the START of this chunk
    $chunk = fread($handle,$span); // read the chunk between START and END
    file_put_contents($to_read.'_'.$part.'.csv',$header.$chunk);
    $part++;
    if (strlen($chunk)

    1. victor
      victor

      Hola Alexis, gracias por participar. Vamos a ver cómo te podemos ayudar. Saludos!

  8. tecnoayuda

    Estimado Victor, primero agradecer la labor que estas desarrollando (es una grandioso aporte para quienes tenemos dudas o somos autodidactas). Hasta ahora solo te había leído, pero ahora necesito apelar a tu sabiduría directamente. Te comento que estoy trabajando en un sitio web para una amiga que no tiene ni idea de informática, es una web de servicios rubro sicología, el tema es que nos basamos en una plantilla de pago y he andado bastante bien con la adaptación hasta que me pidió la tarea de ver la forma de ayudarla a que ella misma pudiera modificar los contenidos de al menos una de las paginas. Gracias a lo que he aprendido en tu web y otros sitios, he visto como a través de php podría lograr este cometido, entregando a ella solo la tarea de subir un txt predefinido a la raíz del servidor, hasta ahí tola la teoría funciona de pelos, pero la implementación me tiene de cabeza. He creado un archivo txt para usar en la pestaña publicaciones de este sitio que tengo actualmente en modo localhost y he agregado el siguiente código a la web para que lo muestre:
    <?php
    $gestor = @fopen("c:\appserv\www\besthuman\publicacion1.txt", "r");
    if ($gestor) {
    while (($búfer = fgets($gestor, 4096)) !== false) {
    echo "”. $búfer;
    }
    if (!feof($gestor)) {
    echo “Error: fallo inesperado de fgets()\n”;
    }
    fclose($gestor);
    }
    ?>
    El tema es que sin dar ningún tipo de error, el texto no aparece por ningún lado (la web aparece sin texto) y no sé lo que pueda estar sucediendo.
    El tema es que si este mismo código lo inserto en un txt y lo renombro a .php y lo ejecuto: Eureka= es mostrado sin ningún problema.
    Agradeceré alguna sugerencia o ayudita.

    1. victor
      victor

      Hola Hector, perdona la demora en responderte. Aunque necesitaría ver el ejemplo suena a que algo falla en el index de tu aplicación, quizás es un fallo como tenerlo en html y no haberlo grabado con .php, que aunque parezca un fallo tonto puede suceder. Por otra parte, aunque está muy bien aprender desde cero como todos hemos hecho hace 7 años, yo recomendaría utilizar un WordPress e ir tocando la plantilla desde el mismo gestor o desde fuera. Lo bueno de WordPress (Drupal es muy complicado para empezar) que se puede hacer una web más o menos completa casi sin programar y puedes gestionar muy bien tus publicaciones. Cualquier cosa coméntame. Un saludo, Víctor

  9. Andres

    Amigo excelente articulo. Pero necesito una ayuda extra, una vez que leo el contenido del archivo que es un txt como puedo recorrer el texto para tratar la información en variables por ejemplo que cuando encuentre un espacio en la primera linea me almacene todo lo que encontró hasta el espacio en una variable y asi sucesivamente..

    Agradezco cualquier colaboración

    1. DAVID CORNADO

      Para lo que quieres hacer puedes usar lo que se describe en el siguiente artículo, yo lo he probado para parsear IMDB y va de cine (nunca mejor dicho)

      http://wordpresstutoriales.com/extraer-texto-entre-delimitadores-dentro-de-un-string/

  10. edizzz

    Buen artículo, me salvo la vida. Gracias

    1. victor
      victor

      Gracias a ti por participar. Saludos!

  11. Francisco Naranjo

    Hola Victor,

    Es muy de agradecer que haya gente como tú que comparte conocimientos.

    Yo tambien soy autodidacta.

    Tengo una duda que no he posido encontrar aun.

    Cual es la velocidad de lectura para archivos desde PHP.

    Sabes si es mas rapido o mas lento que el acceso a una Base de datos.

    La cuestion es que no logro usar una especie de variable GLOBAL.

    Y creo que lo unico que puedo hacer es grabar el dato en un archivo, pero no se si es lo apropiado.

    Muchas gracias,

    Un cordial saludo.

    Francisco.

    http://www.marbeweb.com

    1. victor
      victor

      Hola Francisco, gracias por participar en la web. La verdad no lo se a ciencia cierta. Supongo que depende cómo esté organizada la base de datos o el archivo y cuantos datos se precisen. Yo he hecho consultas a XML y JSON con Javascript y otras veces PHP y va muy bien, igual que a base de datos. Debe de existir una cantidad de datos a partir de la cual se empieza a notar el tiempo que tarda. De todas formas manejando algo normal no deberías notar diferencias, pero si te dedicas a la bioinformática, minería de datos, seguros, etc si será importante.

      Creo que no te he sido de gran ayuda. Quizás alguien nos pueda ayudar en este tema.

      Un saludo, Víctor

  12. Alan Galan

    Gracias por compartir el código. Saludos!

    1. victor
      victor

      Hola Alan, gracias a ti. Me alegra que el código te haya sido útil. Un saludo, Víctor

  13. carlos

    Muchas gracias, tu aporte es muy claro y sencillo; por eso nos sirve a los principienates.

    1. victor
      victor

      Muchas gracias a ti Carlos por participar. Me alegra que te haya sido útil.

      Un saludo, Víctor

  14. Cristina

    Necesito de su ayuda.

    Estoy aprediendo recién PHP, necesito leer un archivo .csv de 3000 registro, en donde debo separarlo cada 200 registro generando la paginación a un archivo html con sus correspondiente encabezado y pie de pagina.

    He logrado hacer lo siguiente

    $pag=1;
    $fp = fopen ( “archivo.csv” , “r” ); // Lee el archivo
    if ($encabezado== 0) {
    echo $html; //imprime encabezado
    $encabezado++;

    $fila=0;
    while (( $data = fgetcsv ( $fp , 1000, “;” )) !== false ) { // Mientras hay líneas que leer…
    if ($fila <= 200) {
    $i = 0; // control fila
    echo "”;
    foreach($data as $row) {
    echo “” .utf8_encode($row).””; // Muestra todos los campos de la fila actual
    $i++ ;
    }
    echo “”;
    $fila++;

    } else {
    $pag++;
    echo “”;
    echo $html; //imprime encabezado
    echo “cambiar de pagina $pag”;
    $fila=0;

    }
    } //while
    } //if h
    echo “”;
    fclose ( $fp );
    ?>

    Pero aun me falta mucho, ya que en el ejemplo solo imprime todo en la pagina.

    Falta la paginacion creado los archivos hrml.

    Espero que se entienda,

    Gracias
    Saludos cordiales,

  15. Erik Garcia

    Buenas colega, tengo una duda y es que no lo he podido realizar, al leer un txt donde almaceno comentarios estos se almacenan con fecha y hora y al momento de que los lea el php para postrarlo quiero que se muestre primero el mas reciente y al final el mas antiguo pero lo que hace es mostrarme el mas antiguo. Espero haberme explicado bien.

    PD: perdona las faltas de ortografia.

    1. victor
      victor

      Hola Erik, gracias por participar en el foro. Para poder ayudarte mejor podrías copiar unas líneas que como están los comentarios con la fecha y hora, ya que depende de si están al principio o al final se puede hacer de una forma u otra. Por ejemplo si estuviera así:
      21-05-2014 | Este es el comentario número 1
      Si fuera así sería más fácil ya que podríamos decir que los primeros elementos son los de la fecha, convertirlos en una variable y filtrar por ahí.

      Un saludo, Víctor

  16. Ricardo

    Hola, me preguntaba como podria hacer para obtener una linea de un archivo como en este tutorial pero aleatoria y solo una?
    Gracias!

    1. victor
      victor

      Hola Ricardo, gracias por participar en la web. He creado un nuevo artículo para que veas ese ejemplo en concreto:Cómo leer en un archivo txt una línea al azar o aleatoria con php utilizando rand y count. Para obtener una línea al azar se hace de una forma más sencilla que en este ejemplo ya que se cuenta las líneas y se escoge una al azar.

      Un saludo, Víctor

  17. roberto

    Estimado. necesito crear un archivo .txt que contenga una url que la lea desde una página php.
    la idea es ir cambiando la url en el txt y no en las páginas.
    saludos

    1. victor
      victor

      Hola Roberto, antes de nada gracias por participar en el blog. No se si he entendido bien la cuestión. Tienes una página php que lee una url de otra página (¿o es de esa misma página php?) y se graba esa url en un txt, ¿sería así?. Pero si no es mucha curiosidad no entiendo bien la finalidad, ¿podrías poner un ejemplo práctico del tipo archivo1.php, archivo1.txt, url de archivo1.php para verlo con un ejemplo claro?. Con un ejemplo más definido te podremos ayudar a resolver esa cuestión.

      Perdona ya que no estoy demasiado clarividente hoy, pero hay cosas que tengo algunas dudas a qué te refieres exactamente.

      Un saludo, Víctor

      1. roberto

        Estimado Victor.
        Tengo como 10 paginas php con un codigo que debo cambiar 1 vez por mes:
        </td

        lo unico que cambio es el mes, en este caso cambio enero2014, por febrero2014.
        esto, editando como 10 paginas.
        por eso consulto si puedo crear un archivo .txt para modificar el mes y que se modifique en todas las paginas php.
        Espero no molestarte con esta consulta.
        gracias desde ya y muy informativo tu blog..

        1. victor
          victor

          Hola Roberto, quizás sea más sencillo con Javascript, puedes poner un código que cambie automáticamente cuando estes en otro mes y otro año, te pongo el código aquí para que en este mes salga febrero2014 (si quieres febrero en mayúscula lo pones en mayúscula en el array y tienes que poner las etiquetas de script antes y después del código):

          var meses = new Array (“enero”,”febrero”,”marzo”,”abril”,”mayo”,”junio”,”julio”,”agosto”,”septiembre”,”octubre”,”noviembre”,”diciembre”);
          var f=new Date();
          document.write(meses[f.getMonth()] + f.getFullYear());

          Un saludo, Víctor

  18. Martin

    Hola buen dia. Ante nada perdon por la molestia, pero antes de ponerme a tratar de obtener lo que deseo, queria consultar si es posible.

    Tengo un txt con muchos datos, y un total de caso 3Millines de registros.

    Por otro lado un excel, en donde me piden una extraccion de 160000 personas, utilizando como campo para cruzar el numero de CUIt.

    Es posible programar algo para que busque cada N! cuit en el txt y me vaya copiando toda esa linea en un txt nuevo?

    Desde ya muchas gracias.
    Atte.-
    Martin.-

    1. victor
      victor

      Hola Martín, gracias por participar en la web. Estoy viendo el problema pero lo veo poco detallado, ¿me puedes especificar más el problema?. Si quieres mándame los archivos (o un modelo de ellos) a mi correo: victor@biolucas.com
      Espero poder ayudarte o si no ponerlo en la web por si alguien lo puede resolver.
      Un saludo, Víctor

  19. Shad

    $tipo = $_FILES[‘archivo’][‘type’];
    $tamanio = $_FILES[‘archivo’][‘size’];
    $archivotmp = $_FILES[‘archivo’][‘tmp_name’];
    $respuesta = new stdClass();

    if( $tipo == ‘text/plain’){

    $archivo = “Bibliotecas/Documentos/inventario.txt”;

    if(move_uploaded_file($archivotmp, $archivo) ){
    $respuesta->estado = true;
    } else {
    $respuesta->estado = false;
    $respuesta->mensaje = “El archivo no se pudo subir al servidor, intentalo mas tarde”;
    }

    if($respuesta->estado){

    $lineas = file(‘Bibliotecas/Documentos/inventario.txt’);

    $respuesta->mensaje = “”;
    $respuesta->estado = true;
    $conexion = new mysqli(‘localhost’,’root’,’srg1887′,’cambalache’,3306);
    foreach ($lineas as $linea_num => $linea)
    {
    $datos = explode(“,”,$linea);
    $stockid = trim($datos[0]);
    $qty = trim($datos[1]);
    $loc=$_POST[‘Location’];
    //$materno = trim($datos[2]);
    //$nombre = trim($datos[3]);

    $consulta = “INSERT INTO stockcounts(stockid,loccode,qtycounted) VALUES(‘$stockid’,’$loc,’$qty”);”;
    if(!$conexion->query($consulta)){
    $respuesta->estado = false;
    $respuesta->mensaje .= “No se guardo, verifica la información \n”;
    }
    }
    }
    if($respuesta->estado == true)
    $respuesta->mensaje = “Todos los registros se guardaron correctamente\n”;
    }
    else {
    $respuesta->mensaje = “Solo se admiten archivos .txt, vuelvelo a intentar\n”; //<- AQUI
    }
    echo json_encode($respuesta);
    ME PODRIAS DECIR PORQUE NO ENTRA AL IF, SE SALTA AL ELSE

    1. victor
      victor

      Hola Shad, no lo he podido analizar en profundidad, veo que has adaptado el código de aquí: http://www.codedrinks.com/importar-archivo-a-servidor-y-guardar-la-informacion-en-una-base-de-datos-mysql-con-php-y-jquery/ por lo que debería funcionar. Si quieres mándame todos tus archivos a: victor@biolucas.com porque así puedo ver directamente el foco del problema, y te respondo con mayor rapidez.

      Saludos!

  20. Eduardo

    Vaya, que mala suerte tío, o sea que descubriste tarde que la agronomía no era lo tuyo, mejor hubieras estudiado Desarrollo web, Desarrollo de Software o Ingenería de Sistemas

    1. victor
      victor

      Hola Eduardo, gracias por escribir en el blog. Nada de mala suerte, la verdad que me gustó mucho estudiar Agrónomos, lo que más me gusto fue Botánica y Entomología (quizás debí estudiar biologia ;D), pero fui aprendiendo de manera autodidacta a diseñar y programar páginas web y me fue gustando. Además me gusta la parte de buscarse los clientes y hacer todo el proceso, desde captar al cliente, la toma de requisitos, el feedback por como va quedando y entregar la web y su mantenimiento. Creo que para esta profesión no se necesita estudiar una carrera, además hay que aprender todos los días (o casí todos) de manera autodidacta leyendo blogs, tutoriales, videotutoriales, libros, por lo que pienso que es más importante saber buscar la información que aprenderse unos libros de 1000 páginas, aunque es verdad que tener una base informática debe ayudar bastante, pero al final es como todo, con los años de práctica se suple la falta de base teórica.

  21. Galathar

    excelente aporte, funciona con una gran gama de archivos.

  22. Tony

    hola buen dia..
    consulta estoy empezando con php…
    tengo un txt de esta forma..
    3101525303 3-101-525309 SOCIEDAD ANONIMA 250
    3101544874 3-101-544834 SOCIEDAD ANONIMA 0
    3101545242 3-101-545262 SOCIEDAD ANONIMA 33932.75
    3101566685 3-101-566285 S.A 64454.9
    necesito buscar por numero de cedula luego que me desplegue la cedula el nombre del contribuyente y el monto adeudado,, por favor podrias ayudarme
    gracias saludosss

  23. Musiqueate

    Hola,
    como hacer para que despues que un archivo .txt llegue a un limite de lineas se cree un archivo nuevo

    1. victor
      victor

      Hola Musiqueate, gracias por contactar conmigo. No se si he entendido bien tu duda, voy a poner un ejemplo para ver si es la cuestión que planteas:
      – Tienes un txt original con 20 líneas, y quiere que, por ejemplo, cada 9 líneas leidas se cree un archivo nuevo, con lo que tendríamos: el archivo original (con 20 líneas), el segundo txt con 9 líneas (de la 10 a la 18 línea) y un último archivo txt con 2 líneas (la línea 19 y 20). ¿Sería así el modelo que planteas?.

      Saludos

  24. Carlos

    ¡Excelente!
    claro y sencillo.
    ¡Felicitaciones!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


*

CommentLuv badge