Entiendo +/- que es lo que quieres hacer... pero por lo que veo te recomiendo usar bases de datos y no trabajar con archivos y directorios, estos no están hechos para guardar datos, sino contenidos.
En php.net te explican como se hace un correcto listado de un directorio (busca por readdir), yo solo lo acomodé para ti:
Código PHP:
Ver original<?php
$ruta = "directorio/sub_directorio"; //Directorio sistema (sin / final)
while (false !== ($archivo = readdir($abrir))) { if ($archivo != "." && $archivo != ".." && !is_dir("$ruta/$archivo") && $archivo != "listado.php") { echo "$archivo<br/>";
}
}
}
?>
Todo esto lo resumo en un solo if para evitar lo que haces tu:
Código PSEUDO:
Ver originalif(a == b){
//hacer nada
}
else{
if(c == d){
//hacer nada
}
else{
if(e == f){
//hacer nada
}
else{
//hacer
}
}
}
Entendiendo el if, antes lo único raro que aparece son esos puntitos, explicación:
"." Hace referencia al directorio mismo
".." Hace referencia al directorio "padre" o predecesor
Se que esto sucede en win y unix, bueno para este caso diremos que no son elementos del directorio.
Bueno para listar el elemento sabemos que no puede ser "." Y no puede ".." Y no puede ser un directorio Y no pede ser "listado.php"
Si te fijas usamos las palabras "Y", y "no puede ser" (que es lo mismo que negar) estos son operadores condicionales que en php sus simbolos son && y ! respectivamente es por eso la sintaxis de ese if. fué necesario negar todo para conseguir ese único if, Debes conocer y manejarte en tablas de verdad y si es así entenderás el por que
--- fin explicación
Algunos puntos a considerar
1.- Te entrego el código no para resolver tu problema sino para que aprendas, no explicaré nada, salvo un par de puntos, es tu deber investigar comprender.
2.- Haré todo en un solo código por lo tanto eliminaré ese "listado.php" del sistema y del directiro
3.- Usas is_dir por lo que entiendo que usas subdirectorios en tu sistema
4.- Hay que ser rigurosos, en tu sistema pueden faltar columnas dentro de una fila, es decir, si tienes 7 elementos y 5 columnas sucederá esto:
col1 | col2 | col3 | col4 | col5
elm1 | elm2 | elm3 | elm 4 | elm5
elm6 | elm7
Que estéticamente no haya problema no quiere decir que esté bien
5.- Usas 5 columnas no se porque debe ser cosa tuya, yo seré felxible con las columnas con una variable, porque me ahorrará mucho trabajo, y además tienes como herramienta para cambiar rápidamente la cantidad de columnas.
6.- Usaré scandir en cambio de readdir, me es más fácil, allá quienes no le guste mi decición y método.
Código PHP:
Ver original<?php
//Config sistema
$ruta = "ruta/asd"; //ruta del sisitema sin / final
$columnas = 7; //numero de columnas
//Fin cofig
echo '<table width="100%" border="1" cellspacing="0" cellpadding="0" align="center">
<tr>';
for($k=1;$k<=$columnas;$k++){
echo "<td>columna $k</td>";
}
echo '</tr>';
$indiceArchivos = -1;
for($k=0;$k<sizeof($dirScan);$k++){ if($dirScan[$k] != "." && $dirScan[$k] != ".." && !is_dir("$ruta/".$dirScan[$k])){ $archivos[++$indiceArchivos] = $dirScan[$k];
}
}
$faltantes = $columnas-($largo%$columnas);
if($faltantes == $columnas){ $faltantes = 0; }
$contador = 0;
$contadorFinal = 0;
for($k=0;$k<$largo;$k++){
$contador++;
$contadorFinal++;
if($contador == 1){ echo "<tr>"; }
$archivoCompleto = "$ruta/".$archivos[$k];
$filas = explode("\r\n", fread(fopen($archivoCompleto, "r"), filesize($archivoCompleto))); //hay otro método, que no recuerdo $recurso = $filas[0];
echo "<td>
Archivo: ".$archivos[$k]."<br/>Recurso: $recurso
</td>"; //aqui cambias por tu iframe, yo usé esto para probar
if($contadorFinal == $largo){
for($l=0;$l<$faltantes;$l++){
echo "<td></td>";
}
}
if($contador == $columnas){ echo "</tr>"; $contador = 0; }
}
echo '</table>';
?>
A mi me funciona perfecto, lo que hice fue simular un directorio sistema con este código
Código PHP:
Ver original<?php
//config emulador
$ruta = "ruta/asd"; //ruta sin / final y debe ser la misma que el sistema
//fin config
$generar = rand(10,50); //generaremos una cantidad de archivos for($k=0;$k<$generar;$k++){
$archivo = "$ruta/archivo".md5(rand(100,1000)).".txt"; //crearemos un archivo random
//aquí creé un contenido ejemplo
$cont .= "Linea2: ".md5(rand(1,10000))."\r\n"; $cont .= "Linea3: ".md5(rand(1,10000))."\r\n"; $cont .= "Linea4: ".md5(rand(1,10000))."\r\n"; $cont .= "Linea5: ".md5(rand(1,10000));
//fin contenido
fwrite(fopen($archivo, "w"),$cont); //crear archio y escribir contenido }
$generar = rand(10,50); //generaremos una cantidad subdirectorios para ver que el sistema funcione bien
for($k=0;$k<$generar;$k++){
$dir = "$ruta/".md5(rand(100,1000)); //nuevo subdirectorio aleatorio @mkdir($dir); //crear subdirectorio }
//usé md5 para que se vean nombres no numeritos
?>
No simules esto en tu sistema o se llenará de archivos basura, puedes abrir los archivos generados para que veas como están completados y estructurados.
PD1: Expliqué todo muy rápido, por lo que si algo no concluí o expliqué mal o pasé por alto disculpa
PD2: Me demoré 20mins en el código puede haber incongruencias y/o métodos poco eficientes, no valide rigurosamente.
PD3: Si no es lo que querías disculpa es lo que yo interprete. y me debes 30 mins de vida jajaja
Edito: me falto cerrar la tabla en el código jajaja