php - listar - mostrar todas las imagenes de una carpeta html
Obtener los nombres de todos los archivos en un directorio con PHP (15)
Aquí hay un ejemplo más avanzado para mostrar todos los archivos en una carpeta
Por alguna razón, sigo obteniendo un ''1'' para los nombres de archivo con este código:
if (is_dir($log_directory))
{
if ($handle = opendir($log_directory))
{
while($file = readdir($handle) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
}
}
Cuando repito cada elemento en $ results_array, obtengo un montón de ''1'', no el nombre del archivo. ¿Cómo obtengo el nombre de los archivos?
Código recursivo para explorar todo el archivo contenido en un directorio (''$ path'' contiene la ruta del directorio):
function explore_directory($path)
{
$scans = scandir($path);
foreach($scans as $scan)
{
$new_path = $path.$scan;
if(is_dir($new_path))
{
$new_path = $new_path."/";
explore_directory($new_path);
}
else // A file
{
/*
Body of code
*/
}
}
}
Como la respuesta aceptada tiene dos deficiencias importantes, estoy publicando la respuesta mejorada para aquellos recién llegados que están buscando una respuesta correcta:
foreach (array_filter(glob(''/Path/To/*''), ''is_file'') as $file)
{
// Do something with $file
}
- Es necesario
is_file
resultados de la función delglobe
conis_file
, porque también puede devolver algunos directorios. - No todos los archivos tienen a
.
en sus nombres, por lo que el patrón*/*
es una mierda en general.
En algunos sistemas operativos, obtienes .
..
y .DS_Store
, bueno, no podemos usarlos así que vamos a esconderlos.
Primero comience a obtener toda la información sobre los archivos, utilizando scandir()
// Folder where you want to get all files names from
$dir = "uploads/";
/* Hide this */
$hideName = array(''.'',''..'',''.DS_Store'');
// Sort in ascending order - this is default
$files = scandir($dir);
/* While this to there no more files are */
foreach($files as $filename) {
if(!in_array($filename, $hideName)){
/* echo the name of the files */
echo "$filename"{<br>$filename}";<br>";
}
}
Estilo SPL :
foreach (new DirectoryIterator(__DIR__) as $file) {
if ($file->isFile()) {
print $file->getFilename() . "/n";
}
}
Compruebe las clases DirectoryIterator y SplFileInfo para ver la lista de métodos disponibles que puede usar.
No se moleste con abrir / leer y usar glob
lugar:
foreach(glob($log_directory.''/*.*'') as $file) {
...
}
Otra forma de enumerar directorios y archivos sería usar el RecursiveTreeIterator
responde aquí: https://.com/a/37548504/2032235 .
Puede encontrar una explicación detallada de RecursiveIteratorIterator
e iteradores en PHP aquí: https://.com/a/12236744/2032235
Puede probar la función scandir(Path)
. es rápido y fácil de implementar
Sintaxis:
$files = scandir("somePath");
Esta función devuelve una lista de archivos en una matriz.
para ver el resultado, puedes probar
var_dump($files);
O
foreach($files as $file)
{
echo $file."< br>";
}
Se debe a la precidencia del operador. Intenta cambiarlo a:
while(($file = readdir($handle)) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
Solo usa glob(''*'')
. Aquí hay glob
Solo uso este código:
<?php
$directory = "Images";
echo "<div id=''images''><p>$directory ...<p>";
$Files = glob("Images/S*.jpg");
foreach ($Files as $file) {
echo "$file<br>";
}
echo "</div>";
?>
Tengo un código más pequeño que hace esto:
$path = "Pending2Post/";
$files = scandir($path);
foreach ($files as &$value) {
echo "<a href=''http://localhost/".$value."'' target=''_black'' >".$value."</a><br/>";
}
Utilizar:
if ($handle = opendir("C:/wamp/www/yoursite/download/")) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
echo "<b>" . preg_replace(''///.[^.//s]{3,4}$/'', '''', $entry) . "</b>";
}
}
closedir($handle);
}
Fuente: http://chandreshrana.blogspot.com/2016/08/how-to-fetch-all-files-name-from-folder.html
glob y FilesystemIterator
ejemplos:
/*
* glob() examples
*/
// get the array of full paths
$result = glob( ''path/*'' );
// get the array of file names
$result = array_map( function( $item ) {
return basename( $item );
}, glob( ''path/*'' ) );
/*
* FilesystemIterator examples
*/
// get the array of file names by using FilesystemIterator and array_map()
$result = array_map( function( $item ) {
// $item: SplFileInfo object
return $item->getFilename();
}, iterator_to_array( new FilesystemIterator( ''path'' ), false ) );
// get the array of file names by using FilesystemIterator and iterator_apply() filter
$it = new FilesystemIterator( ''path'' );
iterator_apply(
$it,
function( $item, &$result ) {
// $item: FilesystemIterator object that points to current element
$result[] = (string) $item;
// The function must return TRUE in order to continue iterating
return true;
},
array( $it, &$result )
);
$file = readdir($handle)
rodear $file = readdir($handle)
con paréntesis.
Aqui tienes:
$log_directory = ''your_dir_name_here'';
$results_array = array();
if (is_dir($log_directory))
{
if ($handle = opendir($log_directory))
{
//Notice the parentheses I added:
while(($file = readdir($handle)) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
}
}
//Output findings
foreach($results_array as $value)
{
echo $value . ''<br />'';
}