una por only nombre mostrar listar listado files directorio descargar carpeta buscar archivos php scandir hidden-files

php - por - Excluir archivos ocultos de scandir



scandir php (9)

Estoy usando el siguiente código para obtener una lista de imágenes en un directorio:

$files = scandir($imagepath);

pero $files también incluye archivos ocultos. ¿Cómo puedo excluirlos?


En Unix, puede usar preg_grep para filtrar los nombres de archivo que comienzan con un punto:

$files = preg_grep(''/^([^.])/'', scandir($imagepath));


Encontré un comentario de php.net, específicamente para sistemas Windows: http://php.net/manual/en/function.filetype.php#87161

Citando aquí para propósitos de archivo:

Uso la versión CLI de PHP en Windows Vista. A continuación se detalla cómo determinar si un archivo está marcado como "oculto" por NTFS:

function is_hidden_file($fn) { $attr = trim(exec(''FOR %A IN ("''.$fn.''") DO @ECHO %~aA'')); if($attr[3] === ''h'') return true; return false; }

Cambiar if($attr[3] === ''h'') a if($attr[4] === ''s'') buscará los archivos del sistema.

Esto debería funcionar en cualquier sistema operativo Windows que proporcione comandos de shell de DOS.


Reconozco porque estás tratando de ''filtrar'' los archivos ocultos, tiene más sentido y se ve mejor para hacer esto ...

$items = array_filter(scandir($directory), function ($item) { return 0 !== strpos($item, ''.''); });

Tampoco llamo a la variable $files ya que implica que solo contiene archivos, pero de hecho también se pueden obtener directorios ... en algunos casos :)


Suponiendo que los archivos ocultos comienzan con a . puedes hacer algo como esto cuando salgas:

foreach($files as $file) { if(strpos($file, ''.'') !== (int) 0) { echo $file; } }

Ahora revisa cada artículo si no hay ninguno . como el primer personaje, y si no te hace sentir como lo harías.


Tiendo a utilizar DirectoryIterator para cosas como esta, que proporciona un método simple para ignorar los archivos de puntos:

$path = ''/your/path''; foreach (new DirectoryIterator($path) as $fileInfo) { if($fileInfo->isDot()) continue; $file = $path.$fileInfo->getFilename(); }


Todavía estoy dejando la marca de verificación para la solución de seengee y habría publicado un comentario a continuación para una ligera corrección de su solución.

Su solución enmascara los directorios (. Y ..) pero no enmascara archivos ocultos como .htaccess

Un pequeño tweak resuelve el problema:

foreach(new DirectoryIterator($curDir) as $fileInfo) { //Check for something like .htaccess in addition to . and .. $fileName = $fileInfo->getFileName(); if(strlen(strstr($fileName, ''.'', true)) < 1) continue; echo "<h3>" . $fileName . "</h3>"; }


Use el siguiente código si también desea restablecer el índice de la matriz y establecer el orden:

$path = "the/path"; $files = array_values( preg_grep( ''/^([^.])/'', scandir($path, SCANDIR_SORT_ASCENDING) ));

Una línea:

$path = "daten/kundenimporte/"; $files = array_values(preg_grep(''/^([^.])/'', scandir($path, SCANDIR_SORT_ASCENDING)));


use preg_grep para excluir nombres de archivos con caracteres especiales, por ejemplo

$dir = "images/"; $files = preg_grep(''/^([^.])/'', scandir($dir));

preg_grep


function nothidden($path) { $files = scandir($path); foreach($files as $file) { if ($file[0] != ''.'') $nothidden[] = $file; return $nothidden; } }

Simplemente usa esta función

$files = nothidden($imagepath);