Page 1 sur 2
recuperer le nom d'un fichier
Posté : 18 août 2010, 11:20
par fabrice88250
Bonjour,
je m'essai aujourd'hui a recupérer le nom des fichiers qui se trouvent dans un repertoire.
par exemple j'ai dans mon repertoire 10 fichiers tous només de cette façon : nom-prenom_ville-cp.doc
je voudrai recuperer le nom des fichiers afin de les afficher de la facon suivant : nom prenom : ville cp et ej mettrai un lien pour telecharger le fichier sur nom et prenom.
Comment lire ce nom et surtout comment le decomposer afin d'avoir l'affichage desiré au final ?
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 11:24
par xTG
Pour lire un répertoire il te faut utiliser la fonction
readdir(), un exemple complet se trouve dans la documentation.
Lorsque tu as le nom du fichier tu peux utiliser
explode() sur les caractères _ et - afin d'obtenir les différentes parties du nom de façon indépendantes.
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 11:49
par Ryle
Si une succession d'explode() fonctionne pour la lecture du nom du fichier et la récupération des éléments, je te recommande toutefois d'utiliser une expression régulière (avec preg_match) une fois le nom du fichier obtenu. Ce sera plus simple et plus optimisé, et cela te permettra de récupérer les 4 informations en une seule instruction

Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 11:56
par fabrice88250
ok merci j'ai reussi.
voilà se que je fais :
<?php
if ($handle = opendir('../lesdocs')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..")
{
$file = str_replace("-"," ",$file);
$file = str_replace(".doc","",$file);
print(str_replace("_"," : ",$file)).'<br/>';
}
}
closedir($handle);
}
?>
par contre certains de mes fichiers on des caractères accentués et du coup avec le code que je vien de mettre en place au lieu des carteres j'ai des carrés 'ma page est en utf8
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 13:14
par xTG
Essayes d'utiliser la fonction
utf8_encode().
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 14:08
par fabrice88250
En fait avec htmlentities sa fonctionne bien.
Est il possible d'afficher les données trouvées dans le repertoire alphabétiquement ?
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 14:53
par Ryle
Hmm... normalement elles devraient déjà être dans l'ordre alphabétique, mais selon le serveur, il est possible qu'il distingue les majuscules et les minuscules au lieu de les mélanger.
Au besoin, au lieu d'afficher le nom du fichier immédiatement, tu peux stocker celui-ci dans un tableau php, que pourras ensuite trier comme tu le souhaites (sort(), ...), et enfin afficher à l'aide d'une nouvelle boucle

Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 17:08
par fabrice88250
ok j'ai refais mon code et je l'ai adapté pour que les infos soit stocké via un tableau.
<?php
// Configuration
$dossier = '../mesmp3/';
$ouverture = opendir($dossier);
// Stockage des variables
$contenu = array();
while ($fichiers = readdir($ouverture))
{
if ($fichiers != "." && $fichiers != "..")
{
$contenu[] = $fichiers;
}
}
closedir($ouverture);
//on effectu le tri par ordre alphabétique
natcasesort($contenu);
// Affichage + traitement
foreach ($contenu as $liste_fichiers) {
// On récupère les icons à afficher
$fichier = explode('.', $liste_fichiers);
$sizeo = filesize ($dossier.$liste_fichiers);
$size1 = ($sizeo / 1000000);
$size = round($size1, 1);
?>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#353535" width="100%" id="AutoNumber1">
<tr>
<td width="100%">
<?php
$fichier = $liste_fichiers;
$fichier = str_replace("-"," ",$fichier);
$fichier = str_replace(".mp3","",$fichier);
$fichier = str_replace("_"," : ",$fichier);
//strtoupper passe tout en majuscule
$fichier = htmlentities(strtoupper($fichier));
echo $fichier;
?>
</td>
<td width="25%"><?php echo $size; ?> Mo</td>
<td width="6%">
<object type="application/x-shockwave-flash" data="dewplayer.swf?mp3=<?php $dossier.$liste_fichiers;?>" width="200" height="20" id="dewplayer">
<param name="wmode" value="transparent" />
<param name="movie" value="dewplayer.swf?mp3=<?php echo $dossier.$liste_fichiers;?>" />
</object>
</td>
<td width="6%"><a href="'<?php echo $dossier.$liste_fichiers; ?>'"><img src="../images/telecharger.png" alt="telecharger" /></a></td>
</tr>
</table>
<?php
}
?>
Le trie fonctionne ! Merci !
maintenant si je veus disocier en 2 varibales $fichier :
en fichier origine j'ai --> nom-prenom_ville-cp.doc
au final je veu :
$nom = nom et prenom
$adresse = ville et cp
j'ai regardé du coté de explode mais je n'arrive pas a le mettre en application
Est possible ?
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 18:49
par xTG
$var = "nom-prenom_ville-cp.doc";
$tab = explode('.',$var); // array( 0 => "nom-prenom_ville-cp", 1 => "doc")
$tab2 = explode('_',$tab[0]); // array( 0=> "nom-prenom", 1=> "ville-cp")
$tab3[0] = explode('-',$tab2[0]); // array(0 => array(0 => "nom", 1 => "prenom"))
$tab3[1] = explode('-',$tab2[1]); // array(0 => array(0 => "nom", 1 => "prenom"), 1 => array(0=> "ville", 1=> "cp"))
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 18:58
par AB
par contre certains de mes fichiers on des caractères accentués et du coup avec le code que je vien de mettre en place au lieu des carteres j'ai des carrés 'ma page est en utf8
FAUT PAS de caractères accentués dans le nom des fichiers. Cela risque de te poser de gros soucis. Il faut corriger ça à l'enregistrement du fichier et le renommer dans ce cas.
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 21:48
par stealth35
par contre certains de mes fichiers on des caractères accentués et du coup avec le code que je vien de mettre en place au lieu des carteres j'ai des carrés 'ma page est en utf8
FAUT PAS de caractères accentués dans le nom des fichiers. Cela risque de te poser de gros soucis. Il faut corriger ça à l'enregistrement du fichier et le renommer dans ce cas.
un jour peu être... (enfin c'est déjà le cas, mais c'est comme la compatibilité des navigateurs... y'a toujours d'irréductibles gaulois)
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 22:04
par fabrice88250
j'ai essayé ta solution xTG mais j'ai pas de résultat ou plutot j'ai array qui s'affiche au lieu de la decomposition.
j'ai mis dans mon code :
$tab = explode('.',$fichiers); // array( 0 => "nom-prenom_ville-cp", 1 => "doc")
$tab2 = explode('_',$tab[0]); // array( 0=> "nom-prenom", 1=> "ville-cp")
$tab3[0] = explode('-',$tab2[0]); // array(0 => array(0 => "nom", 1 => "prenom"))
$tab3[1] = explode('-',$tab2[1]); // array(0 => array(0 => "nom", 1 => "prenom"), 1 => array(0=> "ville", 1=> "cp"))
echo '$tab'.$tab. '<br/>';
echo '$tab2'.$tab2. '<br/>';
echo '$tab3[0]'.$tab3[0]. '<br/>';
echo '$tab3[1]'.$tab3[1]. '<br/>';
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 22:09
par stealth35
pour récupèrer ne nom de fichier ou l'extension c'est
pathinfo
ensuite si t'as un truc particulier utilise les pcre avec preg_match,
explode te rend un array
pourquoi faire ?
$tab3[0] = explode
c'est
$tab3 = explode
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 22:30
par xTG
Je l'ai fait afin de simplifier l'écriture et la compréhension stealth35.
Si tu avais regardé la ligne suivante je réécris dans le même array à un indice différent.
@fabrice Pour afficher un array il faut utiliser la fonction print_r() et non echo qui elle n'affiche que les variables sur une dimension (classons les String dans les une dimension voulez-vous pour simplifier le problème

).
Re: recuperer le nom d'un fichier
Posté : 18 août 2010, 22:36
par stealth35
Je l'ai fait afin de simplifier l'écriture et la compréhension stealth35.
Si tu avais regardé la ligne suivante je réécris dans le même array à un indice différent.
ca la perturbé du coup
