Obtenir les noms de tous les fichiers dans un répertoire avec PHP

pour une raison quelconque, je continue à obtenir un '1' pour les noms de fichier avec ce code:

if (is_dir($log_directory))
{
    if ($handle = opendir($log_directory))
    {
        while($file = readdir($handle) !== FALSE)
        {
            $results_array[] = $file;
        }
        closedir($handle);
    }
}

quand j'echo chaque élément dans $results_array, je reçois un tas de '1', pas le nom du fichier. Comment puis-je obtenir le nom des fichiers?

60
demandé sur Facundo Casco 2010-05-27 20:31:09

15 réponses

ne vous embêtez pas avec open/readdir et utilisez glob à la place:

foreach(glob($log_directory.'/*.*') as $file) {
    ...
}
132
répondu Tatu Ulmanen 2015-07-20 09:37:13

SPL style:

foreach (new DirectoryIterator(__DIR__) as $file) {
  if ($file->isFile()) {
      print $file->getFilename() . "\n";
  }
}

Vérifier DirectoryIterator et SplFileInfo les classes de la liste des méthodes disponibles que vous pouvez utiliser.

37
répondu Ilija 2015-09-29 16:59:51

vous devez entourer $file = readdir($handle) de parenthèses.

Ici, vous allez:

$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 />';
}
13
répondu Mike Moore 2010-05-27 16:47:47

il suffit d'utiliser glob('*') . Voici Documentation

12
répondu Fletcher Moore 2010-05-27 16:34:11

comme la réponse acceptée a deux lacunes importantes, je poste la réponse améliorée pour ces nouveaux venus qui sont à la recherche d'une réponse correcte:

foreach (array_filter(glob('/Path/To/*'), 'is_file') as $file)
{
    // Do something with $file
}
  1. filtrer les résultats de la fonction globe avec is_file est nécessaire, parce qu'il pourrait retourner certains répertoires.
  2. pas tous les fichiers ont un . dans leurs noms, donc */* motif craint en général.
9
répondu Aliweb 2016-01-16 18:52:17

j'ai un code plus petit pour faire ceci:

$path = "Pending2Post/";
$files = scandir($path);
foreach ($files as &$value) {
    echo "<a href='http://localhost/".$value."' target='_black' >".$value."</a><br/>";
}
5
répondu YooRich.com 2013-10-22 08:35:25

c'est dû à l'accident de l'opérateur. Essayez de le changer en:

while(($file = readdir($handle)) !== FALSE)
{
    $results_array[] = $file;
}
closedir($handle);
4
répondu ircmaxell 2010-05-27 16:46:26

sur certains OS vous obtenez . .. et .DS_Store , bien nous ne pouvons pas les utiliser, alors cachons-les.

First start obtenir toutes les informations sur les fichiers, en utilisant 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>";
    }
}
3
répondu TheCrazyProfessor 2018-05-11 12:08:39

glob() et FilesystemIterator exemples:

/* 
 * 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 )
);
2
répondu Danijel 2015-03-24 18:43:46

vous pouvez simplement essayer la fonction scandir(Path) . il est rapide et facile à mettre en œuvre

syntaxe:

$files = scandir("somePath");

cette fonction retourne une liste de fichier dans un tableau.

pour voir le résultat, vous pouvez essayer""

var_dump($files);

ou

foreach($files as $file)
{ 
echo $file."< br>";
} 
1
répondu Ad Kahn 2016-03-29 10:23:07

une autre façon de lister les répertoires et les fichiers serait d'utiliser le RecursiveTreeIterator répondu ici: https://stackoverflow.com/a/37548504/2032235 .

une explication détaillée de RecursiveIteratorIterator et des itérateurs en PHP peut être trouvée ici: https://stackoverflow.com/a/12236744/2032235

1
répondu jim_kastrin 2017-05-23 12:10:38

est un exemple plus avancé pour montrant tous les fichiers dans un dossier

0
répondu m1crdy 2015-05-27 09:57:05

j'utilise juste ce code:

<?php
    $directory = "Images";
    echo "<div id='images'><p>$directory ...<p>";
    $Files = glob("Images/S*.jpg");
    foreach ($Files as $file) {
        echo "$file<br>";
    }
    echo "</div>";
?>
0
répondu merrais 2017-08-31 23:34:40

utiliser:

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);
}

Source: http://chandreshrana.blogspot.com/2016/08/how-to-fetch-all-files-name-from-folder.html

0
répondu Chandresh 2017-08-31 23:36:33

Récursive code d'explorer tous les fichiers contenus dans un répertoire ('$path contient le chemin du répertoire):

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
            */
        }
    }
}
0
répondu Prashant Goel 2017-08-31 23:37:50