Cómo leer un archivo .txt línea a línea en PHP con fgets()

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);
?>

Publicado por

victor

Hola!. Me llamo Víctor 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 PS4. Te animo a participar en mi web www.biolucas.com

52 comentarios en «Cómo leer un archivo .txt línea a línea en PHP con fgets()»

  1. Hola, estoy iniciandome en PHP.
    Tengo una consulta, debo importar un txt con muchos registros a mysql.
    El problema es q el txt viene de la siguiente manera:

    6999INSSJyP-PAMI INSULINAS CUBIERTAS 0000T20180518C0000341COLEGIO DE CORDOBA COFA 90320705100007473ECOFARMA AOT0003ADEM 0015SUIZO ARGENTINA S.A. 000002132074+0000001824867223/05/2018ENTIDAD FARMACEUTICA

    6999INSSJyP-PAMI INSULINAS CUBIERTAS 0000T20180518C0000341COLEGIO DE CORDOBA COFA 90302057000004588DOMENINO AOT0003ADEM 0243DROGUERIA DEL SUD-SUCURSAL COR000002129010+0000000170209223/05/2018ENTIDAD FARMACEUTICA

    Mi consulta es, como hago para separar los registros ? ya que vienen todos juntos ?

  2. hola consulta sobre como buscar un id y luego imprimir la info correspondiente a ese id. Considerando que son 45 lineas de datos por id, entonces el id esta en la fila 7, de ahi hacia arriba imprimir 7 lineas, y hacia abajo 35 lineas.

  3. Ayuda!!! estoy creando un archivo de texto pero guando le guardo este carácter me lo cambia alguien sabe por que ?

    este es el carácter : ¬
    y me lo escribe así ¬

    el código q tengo es así : fputs($file,»¬»);

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

  5. 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. 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!

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

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

  8. 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)

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

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

  11. 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. 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. 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,

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

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

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

  16. $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

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

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

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

Responder a victor Cancelar la respuesta

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

CommentLuv badge