PHP – Leer contenido varios ficheros

Respondiendo a un comentario en un artículo anterior para listar los ficheros de una carpeta en PHP, ampliamos el código PHP para leer contenido de varios ficheros.

Por lo pronto, aquí tenéis el código que recorre una carpeta, mira si es un fichero o carpeta lo que lee, y si es fichero, lo lee y lo va almacenando en una string. En este caso, este código está en un fichero index.php que lee los ficheros que contiene una carpeta /content/

<?php

function unirContenidosFicheros( $path ){
 $unioncontenidos= "";
 echo "<h1>Leyendo ficheros de una carpeta:</h1>";
 // Abrimos la carpeta que nos pasan como parámetro
 $dir = opendir($path);
 // Leo todos los ficheros de la carpeta
 while ($elemento = readdir($dir)){
  // Tratamos los elementos . y .. que tienen todas las carpetas
  if( $elemento != "." && $elemento != ".."){
   // Si es una carpeta
   if( is_dir($path.$elemento) ){
    // Muestro la carpeta
    echo "<p><strong>CARPETA: ". $elemento ."</strong></p>";
    // Si es un fichero
   } else {
    // Con este proceso leemos el fichero
    $fp = fopen($path.$elemento, "rb");
    $unioncontenidos .= fread($fp, filesize($path.$elemento));
    fclose($fp);
    echo "<br />". $elemento;
   }
  }
 }

 // Mostramos el resultado final
 echo "<h2>Resultado final</h2><pre><code>". $unioncontenidos ."</code></pre>";
}

unirContenidosFicheros("./content/");

?>

Si os fijáis, leemos todos los contenidos de la carpeta /content/ y si es fichero, lo leemos y lo almacenamos en la variable $unioncontenidos. Para leer el fichero utilizamos dos funciones, el fopen, para abrir fichero y el fread para leerlo. En ésta última función le pasamos el fichero abierto, y la medida de éste (conseguida con la función filesize).

Este proceso en PHP de leer el contenido de varios ficheros, es válido para formatos como .html o .txt. Sin embargo, en el caso de utilizar según que formatos de ficheros, no podremos utilizar la función fread, y deberemos utilizar otras funciones que más abajo os dejamos en forma de enlace para que os informéis.

Otra cosa, al mostrar el resultado por pantalla, si lo que mostráis en contenido html, éste lo interpretará el navegador. Vamos que en la variable $unioncontenido lo tendréis todo, pero al mostrarlo, el navegador lo interpreta y no se mostrará. Para ver si ha ido correctamente, deberéis ver el código fuente de la pàgina para comprobar que está al 100%.

Espero que os sea de utilidad.

Más información