Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/04/2017, 00:37
Triby2
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Problemas con lectura de directorio de archivos

Cita:
Iniciado por freesoftwarrior Ver Mensaje
Buenas tardes:
Hace poco he empezado el estudio de PHP y luego de un tiempo empecé un pequeño proyecto, pero sucede que no responde como esperaba y no logro encontrar la causa.

Se trata de 2 archivos php, uno lee el contenido de una carpeta y lo muestra, y el otro, ubicado dentro de la carpeta mencionada, abre uno a uno los archivos TXT y lee la primera línea. Nada complicado.

El código del primer archivo es el siguiente

directorio.php

El resultado es un listado de 16 archivos, 15 txt y 1 php. Hasta ahí todo normal y sin problemas.

Al ejecutar el archivo PHP que está dentro de dicha carpeta, debería de mostrarme 15 contenidos, pero sólo me muestra 13. Y siempre son los mismos archivos los que omite. El código del archivo PHP es el siguiente:

En cada archivo TXT hay un link a una imagen publicada en Instagram, nada que ocasione problemas al cargar, sin embargo, no me muestra todos. Inicialmente había probado con 92 y sólo cargaban 76, así que separé los 15 que no eran leídos por si encontraba algún error, pero al probar con los 15 mencionados, omitía siempre 2. Sin embargo, al dejar los 2 que siempre omitía, los muestra sin ningún problema.

Eso me hace pensar que algo esta mal en el código, pero por más que le doy vueltas, no encuentro que puede ser.

Espero me puedan dar una orientación al respecto.

Un saludo desde Lima, Perú
Bendiciones
Bueno, lo primero que te aconsejo es que depures tu código, pues así reducirá los riesgos a fallos.

Lo segundo que te recomiendo es que te acostumbres separar el codigo php del html pues reduces el tiempo de programacion al obtener menos fallos a la hora de ejecutar el codigo, pues asi es muy facil equivocarse y aumentas la posiblidad de tener un codigo mas feo con lo cual mas posibilidades a sufrir bugs.

Y ya por ultimo tambien te aconsejo a que leas cada linea de codigo que creas y lo vayas ejecutando mentalmente para asi darte cuenta de las incongruencias de tu codigo.

Por ejemplo cuando dices si el contador es menor a 5, cierra la fila y vuelve el contador a 1... si lo ejecutas mentalmetne, cuando entras en el loop tienes un contador valor 1 y como es menor a 5, estas cerrando la fila por cada archivo ya que el contador siempre valdra 1.

El orden de ejecucion del codigo es erroneo y puede llevar a equivocaciones futuras pues en mitad del proceso esta evitando el archivo php cuando puedes hacerlo junto con la condicional inicial que comprueba si es un directorio. A parte no estas utilizando <td> para cada celda.

Asi que quzias el fallo te venga por ahi, por lo mal que se crea la tabla porque lo demas parece estar bien aunque no sea la mejor manera de imprimir esos datos.

Asi lo haria yo:

Código PHP:
Ver original
  1. <?php
  2. $directorio = opendir("./txt");
  3. $contador = $filas = 1;
  4. $html = $archivos = array();
  5.  
  6. while ($archivo = readdir($directorio)) {
  7.     if(is_dir($archivo)) continue;
  8.    
  9.     # listamos los archivosen un array
  10.    $archivos[] = $archivo;
  11.  
  12.     //abrimos el archivo y leemos la primera línea
  13.     $fp = fopen($archivo, "r");
  14.  
  15.     if($contador  == 1 ) $html .= '<tr>';
  16.  
  17.     $html .= '<td>' . fgets($fp) . '</td>';
  18.     fclose($fp);    
  19.  
  20.     If($contador == 5) {
  21.         $html .='</tr>';
  22.         $contador = 1;
  23.     }
  24.  
  25.    $contador++;
  26. }
  27.  
  28. # imprimimos en pantala la list de archivos
  29. foreach ($archivos as $archivo) {
  30.      echo  $filas."&nbsp;&nbsp;&nbsp;".$archivo . "<br />";
  31.      $filas++;
  32. }
  33. ?>
  34.  
  35. <table width="100%" border="1" cellspacing="0" cellpadding="0" align="center">
  36.       <?=$html ?>
  37. </table>

Eso te deberia de funcionar bien y ademas, si te das cuenta, con solo ese codigo te estas ahorrando el 2° archvo, asi tienes todo en un solo archivo, no he puesto lo del iframe pq no entiendo la logica de tenerlo ahi.

Y aquí hay otro tema, te faltaria añadir la logica para cerrar la fila en caso que el num de archivos no sea un multiplo de 5

Última edición por Triby2; 09/04/2017 a las 09:55