Pour une raison quelconque, je continue à recevoir un '1' pour les noms de fichiers avec ce code:
if (is_dir($log_directory))
{
if ($handle = opendir($log_directory))
{
while($file = readdir($handle) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
}
}
Lorsque je répète chaque élément dans $ results_array, j'obtiens une série de "1", pas le nom du fichier. Comment puis-je obtenir le nom des fichiers?
Ne vous embêtez pas avec open/readdir et utilisez glob
à la place:
foreach(glob($log_directory.'/*.*') as $file) {
...
}
SPL style:
foreach (new DirectoryIterator(__DIR__) as $file) {
if ($file->isFile()) {
print $file->getFilename() . "\n";
}
}
Consultez les classes DirectoryIterator et SplFileInfo pour obtenir la liste des méthodes disponibles que vous pouvez utiliser.
Vous devez entourer $file = readdir($handle)
de parenthèses.
Voici:
$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 />';
}
Il suffit d'utiliser glob('*')
. Voici Documentation
Comme la réponse acceptée comporte deux lacunes importantes, je publie la réponse améliorée pour les nouveaux arrivants qui recherchent une réponse correcte:
foreach (array_filter(glob('/Path/To/*'), 'is_file') as $file)
{
// Do something with $file
}
globe
avec is_file
est nécessaire car il peut également renvoyer certains répertoires..
dans leurs noms, donc */*
le motif est nul en général.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='_blank' >".$value."</a><br/><br/>";
}
Sur certains OS, vous obtenez .
..
Et .DS_Store
, Nous ne pouvons pas les utiliser, alors laissez-nous les cacher.
Commencez par 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>";
}
}
C'est dû à la priorité de l'opérateur. Essayez de le changer pour:
while(($file = readdir($handle)) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
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 )
);
Une autre façon de répertorier les répertoires et les fichiers serait d’utiliser la réponse RecursiveTreeIterator
ici: https://stackoverflow.com/a/37548504/2032235 .
Une explication détaillée de RecursiveIteratorIterator
et des itérateurs dans PHP peut être trouvée ici: https://stackoverflow.com/a/12236744/2032235
Vous pouvez simplement essayer la fonction scandir(Path)
. il est rapide et facile à mettre en œuvre
Syntaxe:
$files = scandir("somePath");
Cette fonction renvoie une liste de fichiers dans un tableau.
pour voir le résultat, vous pouvez essayer
var_dump($files);
Ou
foreach($files as $file)
{
echo $file."< br>";
}
Je viens d'utiliser 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>";
?>
Utilisation:
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
Code récursif pour explorer tout le fichier contenu 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
*/
}
}
}
Voici un exemple plus avancé pour montrant tous les fichiers d’un dossier