Dans PHP, la fonction Scandir est utilisée pour obtenir une liste de fichiers et répertoires dans un répertoire spécifié. Il renvoie un tableau contenant les noms de tous les fichiers et sous-répertoires dans le répertoire spécifié. L'utilisation de base de Scandir est très simple, mais elle ne fournit pas directement l'identification qui distingue les fichiers des répertoires. Cependant, nous pouvons facilement identifier le type de chaque entrée en combinant d'autres fonctions.
La fonction de syntaxe de Scandir est la suivante:
<span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$directory</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$sorting_order</span></span><span> = SCANDIR_SORT_ASCENDING [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span> ]] )
</span></span>$ Directory : le chemin d'accès au répertoire à numériser.
$ triging_order : spécifie l'ordre de tri, défautant à l'ordre croissant ( scandir_sort_ascences ).
$ Context : Spécifie le flux de contexte, facultatif.
Scandir renvoie un tableau contenant le contenu d'un répertoire, qui sont généralement le nom de fichier et le nom du sous-répertoire. La valeur de retour comprend les noms du répertoire actuel ( . ) Et le répertoire parent ( .. ).
Pour distinguer les fichiers et les répertoires renvoyés par Scandir , nous pouvons utiliser les fonctions is_file () et is_dir () . Ils sont utilisés pour déterminer si un chemin donné est un fichier ou un répertoire. En traversant les résultats de Scandir , nous pouvons facilement identifier le type de chaque entrée.
Voici un exemple montrant comment utiliser Scandir pour obtenir une liste de répertoires et juger les fichiers et répertoires par is_file () et is_dir () :
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/your/directory'</span></span><span>; </span><span><span class="hljs-comment">// Définir le répertoire sur Scan</span></span><span>
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$files</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
</span><span><span class="hljs-comment">// franchir "." et ".."</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file</span></span><span> == </span><span><span class="hljs-string">'.'</span></span><span> || </span><span><span class="hljs-variable">$file</span></span><span> == </span><span><span class="hljs-string">'..'</span></span><span>) {
</span><span><span class="hljs-keyword">continue</span></span><span>;
}
</span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-variable">$directory</span></span><span> . DIRECTORY_SEPARATOR . </span><span><span class="hljs-variable">$file</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">" C'est un répertoire\n"</span></span><span>;
} </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_file</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">" C'est un fichier\n"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">" Est un type inconnu\n"</span></span><span>;
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Nous appelons d'abord Scandir ($ répertoire) pour obtenir tous les fichiers et répertoires dans le répertoire spécifié.
Utilisez ForEach pour faire une boucle via la liste des fichiers renvoyés.
Pour chaque entrée, à l'exclusion . et .. Premièrement, car ils représentent respectivement le répertoire actuel et le répertoire parent, et ne nécessitent généralement pas de traitement supplémentaire.
Ensuite, utilisez IS_DIR () pour vérifier si l'entrée est un répertoire. S'il s'agit d'un répertoire, l'invite correspondante est sortie.
Ensuite, utilisez is_file () pour déterminer s'il s'agit d'un fichier. S'il s'agit d'un fichier, l'invite correspondante est sortie.
Si aucune des conditions ci-dessus n'est remplie, nous pouvons considérer l'entrée comme un fichier spécial (comme un lien symbolique, etc.).
Supposer / path / to / votre répertoire contient ce qui suit:
file1.txt (fichier)
file2.php (fichier)
subdir1 (répertoire)
subdir2 (répertoire)
Après avoir exécuté le code ci-dessus, la sortie peut être la suivante:
<span><span>file1.txt C'est un fichier
file2.php C'est un fichier
subdir1 C'est un répertoire
subdir2 C'est un répertoire
</span></span>En combinant les fonctions scandir et is_file () et is_dir () , nous pouvons facilement juger les types d'entrée dans le système de fichiers, puis distinguer les fichiers et les répertoires. Scandir lui-même ne fournit pas d'informations d'identification directe, mais son utilisation avec d'autres fonctions du système de fichiers rend cette tâche très simple.