12/07/2022
PHP: Función para escanear o leer los archivos de un directorio

Muchas veces veces es necesario establecer ciertos parámetros de configuración en nuestros sistemas, sobre la base de los objetos o archivos existentes en un directorio, como por ejemplo: el directorio de «lenguajes» o «lang», el cual contendría información sobre los archivos preestablecidos para el idioma del sistema o del usuario actual o tal vez, los nombres de los directorios y archivos específicos relacionados a la personalización del diseño de una página web.
Creando la función «_files»
Para comprender el código es necesario tomar en cuenta lo siguiente:- Se requieren conocimientos básicos de HTML y Php.
- Versión de PHP 7.2 o superior
La función ha sido definida con el nombre de «_files», la cual debe retornar una matriz o array y son necesarios tres parámetros o argumentos de tipo string.

<?php
/**
* @method: _files : array
* @description: Función que permite leer o acceder a los nombres de los objetos de un directorio,
* por ejemplo: todos los archivos, directorios y subdirectorios; solo los archivos o directorios
* @param: (string) $key, (string) $dir, (string) $reading ["all", "files", "directories"]
* @treatment: ´public´
*/
function _files( string $key, string $dir, string $reading = "all" ) : array {
$count = 0;
$objects = [];
if( is_dir( $dir ) ) :
$objs = array_diff( scandir( $dir ), array( '.', '..' ) );
$readDir = true;
asort( $objs );
foreach( $objs as $ley => $obj ) {
$object = $dir . DIRECTORY_SEPARATOR . $obj;
if( "all" == $reading ) :
$readDir = true;
elseif( "files" == $reading ) :
$readDir = !is_dir( $object );
elseif( "directories" == $reading ) :
$readDir = is_dir( $object );
endif;
if( $readDir )
if( file_exists( $object ) ) {
$objects[$ley][$key] = $obj;
$count++;
}
}
endif;
return array( "count" => $count
, "objects" => $objects );
}
?>
/**
* @method: _files : array
* @description: Función que permite leer o acceder a los nombres de los objetos de un directorio,
* por ejemplo: todos los archivos, directorios y subdirectorios; solo los archivos o directorios
* @param: (string) $key, (string) $dir, (string) $reading ["all", "files", "directories"]
* @treatment: ´public´
*/
function _files( string $key, string $dir, string $reading = "all" ) : array {
$count = 0;
$objects = [];
if( is_dir( $dir ) ) :
$objs = array_diff( scandir( $dir ), array( '.', '..' ) );
$readDir = true;
asort( $objs );
foreach( $objs as $ley => $obj ) {
$object = $dir . DIRECTORY_SEPARATOR . $obj;
if( "all" == $reading ) :
$readDir = true;
elseif( "files" == $reading ) :
$readDir = !is_dir( $object );
elseif( "directories" == $reading ) :
$readDir = is_dir( $object );
endif;
if( $readDir )
if( file_exists( $object ) ) {
$objects[$ley][$key] = $obj;
$count++;
}
}
endif;
return array( "count" => $count
, "objects" => $objects );
}
?>
Probando la función.
Como ya se pudieron dar cuenta, la función debe recibir tres valores de tipo «string». El primer valor es simplemente un valor clave, el segundo valor es la ruta del directorio que se desea escanear y el tercer valor, es una opción que indica si se quiere leer todos los objetos, los archivos o los directorios ("all", "files", "directories").
<?php
$objects = _files( "key", "/var/www/html/example.com/directory/", "files" );
foreach( $objects["objects"] as $obj ) {
$array[] = $obj["key"];
}
var_dump( $array );
?>
$objects = _files( "key", "/var/www/html/example.com/directory/", "files" );
foreach( $objects["objects"] as $obj ) {
$array[] = $obj["key"];
}
var_dump( $array );
?>
Nota: Si este recurso te ha servido de ayuda recuerda que puedes apoyar mi trabajo realizando una contribución voluntaria a través de mi perfil de usuario de la página y/o puedes enviar tus comentarios a través del sistema de contacto.
Consulta Lo+ Top de Lenguajes De Programación