Archive pour la catégorie ‘PHP programming’
Bidouille: imposer la catégorie par défaut pour les permaliens Wordpress
Ce n’est pas le genre de bidouille (hack de code) dont je puisse être fier. Mais si je me résigné à le faire, c’est que je devenais fou à cause des liens permanents (permalink) qui changent au gré des catégories ajoutées ou retirées à un billet.
Vous aurez peut-être également envie de figer les catégories des permaliens dans 2 cas:
- Vous souhaitez rassembler vos billets dans des catégories « majeures ».
- Vous ne souhaitez pas que, lors de l’ajout d’une catégorie à un billet existant, cela modifie l’url de ce billet!
Rechercher des fichiers depuis PHP avec un masque
Ce matin, j’ai eu besoin d’un fonction permettant de rechercher des fichiers d’après un masque (tel que ‘*.txt’) dans un dossier.
Malheureusement, je n’ai pas trouvé mon bonheur parmi les fonctions PHP, même si PHP5 apporte des fonctions interessantes, telle que scandir().
Après avoir achevé d’écrire une petite fonction permettant de trouver les fichiers correspondant à un masque de recherche, j’ai décidé de la partager.
Note: cette fonction requiert PHP5 ou ultérieur, car elle utilise les fonctions scandir() et fnmatch(). Enfin, notez également que cette fonction retourne le contenu filtré du répertoire, quel que soit ce contenu: fichier, lien, dossier..
Bonus: par défaut, cette fonction intègre un système de cache. Lorsque vous scannez le répertoire, le résultat est mis en cache. Ainsi, dès le deuxième appel à la fonction pour le même répertoire, il n’est pas rescanné. Pour dévalider la mise en cache, le troisième paramètre doit être mis à 1.
function searchdir( $path='.', $mask='*', $nocache=0 ){ static $dir = array(); if ( !isset($dir[$path]) || $nocache) { $dir[$path] = scandir($path); } foreach ($dir[$path] as $i=>$entry) { if ($entry!='.' && $entry!='..' && fnmatch($mask, $entry) ) { $sdir[] = $entry; } } if ($nocache) unset($dir); return ($sdir); }
Avez-vous trouvé cette fonction utile? Des améliorations à suggérer? Postez un commentaire pour me le dire!