/**
 * Almacena la ruta de todas las carpetas, subcarpetas y archivos en un array.
 * @param string $ruta -> Ruta de la que se quiere obtener su contenido en forma de array
 * @return boolean | array -> False: En caso de no ser un directorio la ruta especificada.
 *                            Array: De ficheros, carpetas y subcarpetas de la ruta pasada por parámetro.
 */
function RecorrerArchivos($ruta = "")
{
    if (!is_dir($ruta)) {
        return false;
    }
    // Si la ruta no es un directorio, termino la función devolviendo un 'false'
    $files = array();
    // En caso de existir la ruta, la función devolverá un array de ficheros y carpetas.
    if ($dh = opendir($ruta)) {
        // Crea un manejador de directorios a partir de la ruta y lo almacena en la variable 'dh' ('directory handler')
        while (false !== ($file = readdir($dh))) {
            // 'readdir' lee línea a línea el contenido del directorio. Devuelve un false en caso de no haber contenido (despúes del último archivo/carpeta leída)
            if ($file == '.' || $file == '..') {
                // Omitir '.' y '..'
                continue;
            }
            // Salto a la siguiente iteración
            $subruta = $ruta . '/' . $file;
            if (is_dir($subruta)) {
                $files += RecorrerArchivos($subruta);
            } else {
                $files[] = $subruta;
            }
            // Variante del 'array_push($files, $subruta)'. (Ojo!!! NO en JS)
        }
        closedir($dh);
    }
    return $files;
}
<?php

require_once 'libreria/RecorrerArchivos.php';
$archivos = RecorrerArchivos("c:/wamp");
foreach ($archivos as $archivo) {
    echo $archivo . "<br />";
}