Position actuelle: Accueil> Derniers articles> Comment combiner les fonctions IS_DIR () et glob () pour obtenir des fichiers correspondant à un répertoire spécifique?

Comment combiner les fonctions IS_DIR () et glob () pour obtenir des fichiers correspondant à un répertoire spécifique?

M66 2025-07-04

Comment combiner les fonctions IS_DIR () et glob () pour obtenir des fichiers correspondant à un répertoire spécifique?

Dans PHP, la manipulation des fichiers et des répertoires est une exigence très courante. is_dir () et glob () sont deux fonctions très utiles qui nous aident à vérifier l'existence des répertoires et à trouver des fichiers correspondants. Cet article présentera comment combiner ces deux fonctions pour obtenir des fichiers correspondant à un répertoire spécifique. Les scénarios d'application spécifiques incluent le filtrage en fonction des extensions de fichiers, des modèles de nom de fichier, etc.

1. Introduction à la fonction is_dir ()

La fonction is_dir () est utilisée pour détecter si un chemin est un répertoire. Renvoie vrai si le chemin pointe vers un répertoire, autrement faux .

 <span><span><span class="hljs-variable">$isDirectory</span></span><span> = </span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-string">'path/to/directory'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$isDirectory</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Ceci est un répertoire'</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-string">'Ce n&#39;est pas un répertoire'</span></span><span>;
}
</span></span>

2. Introduction à la fonction glob ()

La fonction glob () est utilisée pour trouver un chemin qui correspond à un motif donné. Il peut rechercher des fichiers en spécifiant les caractères génériques et renvoyer un tableau correspondant de chemins de fichier. Par exemple, glob ('*. Txt') renvoie tous les fichiers de suffixe .txt .

 <span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-string">'path/to/directory/*.txt'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>);  </span><span><span class="hljs-comment">// Sortie de la correspondance *.txt Chemin de fichier pour le modèle</span></span><span>
</span></span>

3. Combinaison des fonctions IS_DIR () et glob ()

En utilisant une combinaison d' Is_Dir () et Glob () , nous pouvons implémenter la recherche de fichiers correspondant à un modèle spécifique dans un répertoire spécifié et rechercher uniquement si ce répertoire existe. Cela évite les recherches de fichiers dénuées de sens lorsque le répertoire n'existe pas.

Exemple: Trouvez tous les fichiers .php dans un répertoire spécifique

 <span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'path/to/directory'</span></span><span>;

</span><span><span class="hljs-comment">// Utiliser d&#39;abord is_dir() Vérifiez si le répertoire existe</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">$directory</span></span><span>)) {
    </span><span><span class="hljs-comment">// Si le répertoire existe,Utiliser glob() Trouver tout .php document</span></span><span>
    </span><span><span class="hljs-variable">$phpFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span> . </span><span><span class="hljs-string">'/*.php'</span></span><span>);
    
    </span><span><span class="hljs-comment">// 输出匹配的document</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$phpFiles</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Trouvez ce qui suit PHP document:\n"</span></span><span>;
        </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$phpFiles</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-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">"\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-string">"Rien n&#39;a été trouvé .php document。\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-string">"Le répertoire spécifié n&#39;existe pas。\n"</span></span><span>;
}
</span></span>

Exemple: Trouvez tous les fichiers commençant par Test_ dans un répertoire spécifique

 <span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'path/to/directory'</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">$directory</span></span><span>)) {
    </span><span><span class="hljs-variable">$testFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span> . </span><span><span class="hljs-string">'/test_*'</span></span><span>);
    
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$testFiles</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Trouvez ce qui suit以 'test_' 开头的document:\n"</span></span><span>;
        </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$testFiles</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-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">"\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-string">"没有找到符合条件的document。\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-string">"Le répertoire n&#39;existe pas。\n"</span></span><span>;
}
</span></span>

4. Combiné avec une recherche récursive de fichiers dans le répertoire

Parfois, nous devons non seulement rechercher des fichiers dans un répertoire spécifié, mais nous voulons également rechercher de manière récursive dans ses sous-répertoires. Pour le moment, nous pouvons combiner des fonctions IS_DIR () , glob () et récursives pour atteindre cette fonction.

Exemple: Recherchez tous les fichiers .txt récursivement

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">recursiveGlob</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$dir</span></span></span><span>, </span><span><span class="hljs-variable">$pattern</span></span><span>) {
    </span><span><span class="hljs-comment">// Vérifiez si le répertoire existe</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">$dir</span></span><span>)) {
        </span><span><span class="hljs-keyword">return</span></span><span> [];
    }

    </span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-variable">$dir</span></span><span> . </span><span><span class="hljs-string">'/'</span></span><span> . </span><span><span class="hljs-variable">$pattern</span></span><span>);
    </span><span><span class="hljs-variable">$directories</span></span><span> = </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-variable">$dir</span></span><span> . </span><span><span class="hljs-string">'/*'</span></span><span>, GLOB_ONLYDIR);

    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$directories</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$directory</span></span><span>) {
        </span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>, </span><span><span class="hljs-title function_ invoke__">recursiveGlob</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>, </span><span><span class="hljs-variable">$pattern</span></span><span>));  </span><span><span class="hljs-comment">// Recherche récursive des sous-répertoires</span></span><span>
    }

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$files</span></span><span>;
}

</span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'path/to/directory'</span></span><span>;
</span><span><span class="hljs-variable">$txtFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">recursiveGlob</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>, </span><span><span class="hljs-string">'*.txt'</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$txtFiles</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Trouvez ce qui suit .txt document:\n"</span></span><span>;
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$txtFiles</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-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">"\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-string">"Rien n&#39;a été trouvé .txt document。\n"</span></span><span>;
}
</span></span>

5. Résumé

En combinant les fonctions is_dir () et glob () , nous pouvons facilement trouver et traiter les fichiers. Dans le développement réel, ces deux fonctions peuvent nous aider à filtrer efficacement les fichiers et à éviter de fonctionner sur des répertoires inexistants. Avec une combinaison simple et un traitement récursif, des fonctions de recherche de fichiers puissantes et flexibles peuvent être obtenues.