recuperer le nom d'un fichier

Mammouth du PHP | 620 Messages

18 août 2010, 11:20

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 ?

ViPHP
xTG
ViPHP | 7331 Messages

18 août 2010, 11:24

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 août 2010, 11:49

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 620 Messages

18 août 2010, 11:56

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

ViPHP
xTG
ViPHP | 7331 Messages

18 août 2010, 13:14

Essayes d'utiliser la fonction utf8_encode().

Mammouth du PHP | 620 Messages

18 août 2010, 14:08

En fait avec htmlentities sa fonctionne bien.

Est il possible d'afficher les données trouvées dans le repertoire alphabétiquement ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 août 2010, 14:53

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 620 Messages

18 août 2010, 17:08

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 ?

ViPHP
xTG
ViPHP | 7331 Messages

18 août 2010, 18:49

$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"))

ViPHP
AB
ViPHP | 5818 Messages

18 août 2010, 18:58

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.

ViPHP
ViPHP | 5462 Messages

18 août 2010, 21:48

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)

Mammouth du PHP | 620 Messages

18 août 2010, 22:04

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/>';

ViPHP
ViPHP | 5462 Messages

18 août 2010, 22:09

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

ViPHP
xTG
ViPHP | 7331 Messages

18 août 2010, 22:30

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 :D ).

ViPHP
ViPHP | 5462 Messages

18 août 2010, 22:36

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 :wink: