begin process at 2012 05 31 09:24:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

Selection Fichier par nom - PHP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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 &amp; 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 ;)

1 2

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,232 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales