Accueil > Forum > > > > Selection Fichier par nom - PHP
Selection Fichier par nom - PHP
vendredi 21 octobre 2011 à 18:50:50 |
Selection Fichier par nom - PHP

10demon10
|
Bonjour à tous
Voilà je suis à la recherche d'un script PHP qui me permettrais d'afficher uniquement les fichiers commençant par une indication particulière.
exemple:
Afficher fichier commençant par "01_";
Sortie ->
-O1_01.JPG
-01_02.JPG
...
Il me semble que c'est réalisable mais je ne me rappelle plus comment faire ?
Si quelqu'un a une idée. Merci d'avance.
nomad
|
|
vendredi 21 octobre 2011 à 19:34:13 |
Re : Selection Fichier par nom - PHP

cod57
|
bonsoir
Code PHP :
<?php
function listerFichier($dir=null,$commencepar){
$s=strlen($commencepar);
static $liste;
static $files;
$liste=null;
$files=array();
$files[] =glob($dir.'/*');
//ou $dir.'/*.jpg' /
//echo '<pre>';
//print_r($files);
$c = count($files);
for($i=0;$i<$c;$i++){
foreach($files[$i] as $k => $v){
if(isset($v) && !empty($v) && substr($v,strlen($dir)+1,$s)===$commencepar){
$v = str_replace($dir.'/','',$v);
$liste.= $v.'<br>';
}else{
}
}
}
return $liste;
}
echo listerFichier('repertoire','to');
/*to ou autre chose*/
?>
 Bonne programmation !
|
|
samedi 22 octobre 2011 à 01:40:22 |
Re : Selection Fichier par nom - PHP

TychoBrahe
|
Salut,
Spécialement pour toi cod57 :D
Et je reprend ta fonction pour illustrer mon propos :
Code PHP : <?php
function listerFichier($dir, $commencepar) {
$lst = scandir($dir);
if ($lst === false)
return false;
$len = strlen($commencepar);
$cmp = function($elem) use ($commencepar, $len) {
return strncmp($commencepar, basename($elem), $len) == 0;
};
return array_filter($lst, $cmp);
}
var_dump(listerFichier('./','toto'));
?>
Et voilà comment avec quelques fonctions on arrive a ses fins très rapidement, sans se compliquer la vie, et en gérant les erreurs en plus ! Soit dit en passant, le echo d'un array c'était pas top ;p
Pour ceux qui se demandent le pourquoi du comment :
Avec scandir(), on obtient dans un array la liste de tous les fichier du dossier passé en paramètre, ou false s'il y a une erreur, d'où le test pour sortir de la fonction s'il y en a une. Il ne nous reste plus qu'a retirer de ce tableau les fichiers dont le nom ne commence pas parce que l'on souhaite, pour ceci la fonction array_filter() est toute indiquée. Il nous suffis de lui passer une fonction de rappel capable de prendre en paramètre un élément du tableau et de retourner true s'il faut garder l'élément, sinon false. Il suffis donc de créer cette callback, et vu que nous n'avons strictement aucun intérêt à faire une "véritable" fonction avec un nom, nous nous contenterons d'une function anonyme assignée à une variable pour que le code soit plus clair. Dans cette fonction, on utilise :
- basename() afin d'être certain d'avoir le nom du fichier sans aucun truc louche.
- strncmp() afin de comparer les premiers caractères du nom du fichier avec ce que l'on veux.
Au sujet de cette comparaison, on utilise use afin que notre fonction anonyme connaisse cette chaîne de caractères par laquelle nos noms de fichiers doivent commencer. Et vu que l'on a besoin de la longueur de cette chaîne, autant la calculer une seule fois avant et la passer également.
Et voila, le tour est joué, on a un code simple, efficace et super facile a maintenir et faire évoluer. Enjoy :-)
|
|
samedi 22 octobre 2011 à 02:10:16 |
Re : Selection Fichier par nom - PHP

TychoBrahe
|
PS : on me chuchote dans l'oreille que sinon il y a glob($dir . '/' . $commencepar . '*');
mais c'est carrément moins fun et ça ne permet pas de montrer la puissance des callback :D
|
|
samedi 22 octobre 2011 à 09:34:31 |
Re : Selection Fichier par nom - PHP

cod57
|
bonjour
@TychoBrahe merci pour l'image ...  c'est vrai que ta fonction est plus jolie et c'est bien aussi que tu présentes une autre solution j'ai mis ton exemple dans mes favoris
++
 Bonne programmation !
|
|
mardi 25 octobre 2011 à 17:41:18 |
Re : Selection Fichier par nom - PHP

10demon10
|
Bonjour à tous
Tous d'abord je remercie tous le monde pour ces petits conseils très précieux.
Néanmoins à force de travail je n'arrive toujours pas au résultat que je recherche.
J'ai fait des essais avec le script de TychoBrahe et de Code57 mais en vain (et je viens de faire une après-midi complète sur la fonction "glob").
Alors en fait le but de mon script était d'afficher des images et des textes dans un même dossier portant le même préfix
exemple:
01.TXT
01_01.jpg
01_02.jpg
02.TXT
02.01.jpg
.....
Malgré toute mes recherches sur internet et de bidouillage de code je ne parviens pas ce résultat. Ce qui me serait fort utile je pense est de pouvoir filtrer le "readdir" que j'ai dans un while ->
Code PHP : while($element = readdir($dir)) {
if($element != '.' && $element != '..')
{
if (!is_dir($dir_nom.'/'.$element))
{
$tabfichier[] = $element;
}
else
{
$dossier[] = $element;
}
}
}
closedir($dir);
mais même en remplaçant par ->
Code PHP : if($element != '.txt' && $element != '..')
...j'ai du mal. Si quelqu'un à une suggestion je suis preneur.
Merci d'avance.
nomad & wild [ ]
|
|
mercredi 26 octobre 2011 à 11:51:22 |
Re : Selection Fichier par nom - PHP

nemo_1
|
Chalute,
Voilà ce que je te propose:
Code PHP : <?php
function commence_par($dir, $prefixe="01"){
return (substr($dir, 0, 2) == $prefixe);
}
$dir_name = "tondossier";
if($dir_list = scandir($dir_name)){
var_dump(array_filter($dir_list, "commence_par"));
}
?>
Tu met juste le prefixe soit manuellement (01, 02, 03) soit tu lui passe un array avec tes prefixes et il taffiches le contenu du dossier commencant par ce prefixe.
A la fin, je fais un var_dump pour te montrer que tu auras bien ces fichiers là dans un array() que tu peux exploiter comme bon te semble.
J'espère t'avoir aidé :).
Bon courage
|
|
mercredi 26 octobre 2011 à 14:42:49 |
Re : Selection Fichier par nom - PHP

TychoBrahe
|
Salut,
@10demon10 : Tout mélanger c'est juste mauvais. Essaye donc de nager avec les bras effectuant des mouvement de nage indienne, la jambe gauche en crawl et la droite en brasse. Je te promet que tu ne vas pas tenir longtemps et couler vite fait. Ici c'est pareil, si tu veux "bidouiller" plusieurs méthodes totalement différentes qui n'ont strictement aucun rapport, tu ne peux pas y arriver. Choisis l'une ou l'autre mais pas les deux. Pour info, dans ce que je t'ai passé tu as juste à modifier la fonction anonyme qui permet de savoir si un fichier correspond à ce que tu cherches. Vu que tu veux juste des images, tu peux vérifier l'extension en plus du préfixe mais également le type mime par exemple.
@nemo_1 : dit moi, à part rajouter des bugs et enlever des fonctionnalités de ce que j'ai posté plus haut tu as fait quoi exactement ? Allez on va regarder de plus prêt ce que tu as mis :
if($dir_list = scandir($dir_name)){
Une jolie bêtise que ceci. Lorsqu'un array vide est converti en bool, il est convertis à false. Avec ce genre de choses, tu traite un retour normal de la fonction (tableau vide) exactement au même titre qu'un retour anormal (false) indiquant une erreur... dans pas mal de code c'est le genre d'erreur bête qui introduit des "bug mystiques". Après, dans le cas présent, je t'accorde que scandir() n'a presque aucune chance de retourner un tableau vide vu que la quasi totalité des OS actuels considèrent qu'un dossier contient au moins deux fichiers, à savoir . et .. représentant respectivement le dossier courant et le dossier parent. Cependant, si tu commences à ne pas être rigoureux ça va te jouer des tours et tu t'en mordras les doigts. Si tu voullais vraiment faire ça en une ligne, tu aurais du faire ceci, mais perso je trouve cette notation franchement lourde à lire :
if(($dir_list = scandir($dir_name)) === false)
Maintenant un autre point :
function commence_par($dir, $prefixe="01"){
return (substr($dir, 0, 2) == $prefixe);
}
Il sert a quoi ton paramètre optionnel $prefixe ? Réponse : strictement à rien. Vu ta manière d'appeler la fonction tu ne peux pas lui passer de paramètres et donc il sera toujours à sa valeur par défaut, passez moi l'expression mais c'est franchement con. Dans le même genre on notera le 2 mis en dur dans le substr(), encore une bêtise vu que du coup, si on change de préfixe pour un autre d'uen autre longueur le code ne fonctionne plus.
Tant que j'y suis j'en profite pour tapper sur l'utilisation d'une fonction nommée. C'était quoi l'intérêt de ne plus utiliser une fonction anonyme ? Si jamais tu comptes la réutilsier autre part, ok. Mais vu comment elel est faite je doute qu'elle soit vraiment générique et réutilisable dans d'autres cas...
|
|
mercredi 26 octobre 2011 à 15:50:50 |
Re : Selection Fichier par nom - PHP

nemo_1
|
Chalute TychoBrahe,
je vais essayer de te répondre malgré tes insultes, j'ai une grandeur d'esprit pour celà.
J'apporte ma contribution, si elle est fausse je m'excuse je n'ai pas eu le temps de le tester je l'ai construite à la hate.
maintenant si je peux me permettre, sort un peu, respire de l'air je pense que tu en auras grandement besoin.
|
|
mercredi 26 octobre 2011 à 16:08:42 |
Re : Selection Fichier par nom - PHP

TychoBrahe
|
Salut,
maintenant si je peux me permettre, sort un peu, respire de l'air je pense que tu en auras grandement besoin
On va dire que tu as écrit ça à la hâte et sans avoir le temps de tester ;)
|
|
Cette discussion est classée dans : fichier, php, afficher, selection, commençant
Répondre à ce message
Sujets en rapport avec ce message
comment afficher un fichier pdf avec php? [ par satellite34 ]
bonjour,voila, je developpe un site ou l'utilisateur envoi un fichier pdf.Je cherche donc a savoir comment, ayant récup le fichier, je peux l'afficher
XML ou MySQL [ par jipe32 ]
Bonjour à tous,je conçois des sites pour des gens et je voudrais afficher de la publicité sur ceux-ci, mais sans passer par AdSense ou autre. Donc je
Afficher le nom d'une image en php [ par karim88 ]
Bonjour, je débute en php donc merci de votre aide. Voilà, j'aimerai afficher les images d'un dossier (ici photos) mais SURTOUT leur nom de fichier pa
PHP et XML [ par romain14g59 ]
Bonjour je voudrais savoir si il et possible d'afficher dans un tableau en php ce fichier XML par exemple, j'arrive à afficher le premier enregistreme
Problème php javascript [ par neoscars ]
Bonjour,J'ai une petite question (pour une petite réponse ).J'ai un script php qui me permet d'afficher tous les champs d'une bdd mysql dans un tablea
msql.o absent [ par shadowfox666 ]
Bonjour, (Je précise je suis chez OVH avec un abonnement serveur dédié)J'ai réalisé un script PHP qui marche correctement lorsqu'on le lance manuellem
Variables et fichier texte [ par vita83 ]
Bonjour a tous,J'aimerai savoir si Php agit comme Msdos sur la gestion des variables dans un fichier.txtEn gros pour mon exemple 2 fichiers : index.ph
problème incompréhensible... [ par keithsize ]
bonjour,alors voila sur une page php j'ai un script qui génére un fichier avec un ID://La fonction génère un id aléatoirefunction ID() { srand(time
lire un fichier odt en php [ par matali ]
Salut tout le mondevoila ca fait longtemps que ke je cherche sur le net comment faire maisje trouve vraiment rien ki puisse maider donc si kkn pourrai
modifier le fichier php.ini [ par cyrilherve ]
bonjour je cherche comment modifier mon fichier php.ini afin de pouvoir appeler les fichiers a inclure avec la fonction 'include' de n'importe ou san
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|