Ne pas affichier l'extension d'un fichier

Résolu
aureliemerlin Messages postés 82 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 17 avril 2013 - 4 juin 2012 à 10:54
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 - 19 juin 2012 à 10:32
Bonjour à tous,


J'utilise un script qui me permet de lister les pages php présent dans un dossier, je voudrais savoir comment afficher la liste sans l'extension et que lorsque je clique sur l'un des liens il m'ouvre ma page.

Voici le script utilisé :

<?php
$dir_nom '.'; // dossier listé (pour lister le répertoir courant : $dir_nom '.' --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers

while($element = readdir($dir) and $element != "ListeNewsLetters.php") {
$extension=strrchr($element,'.');
if($element != '.' && $element != '..' && $extension != '.jpg' && $extension != '.JPG' && $extension != '.jpeg' && $extension != '.JPEG' && $extension != '.bmp' && $extension != '.BMP') {
if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
else {$dossier[] = $element;}
}
}

closedir($dir);

if(!empty($dossier)) {
sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
?>
LISTE DES NEWSLETTERS :



<?php
echo "\t\t\n";
foreach($dossier as $lien){
echo "\t\t\t<li>$lien</li>\n";
}?>

<?php
echo "\t\t";
}
if(!empty($fichier)){
sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
?>
LISTE DES NEWSLETTERS :



<?php
echo "\t\t\n";
foreach($fichier as $lien) {
?>


<?php
echo "\t\t\t<li>$lien</li>\n";
?>


<?php
}
echo "\t\t";
}
?>



j’espère avoir été assez claire.

Merci
Bonne journée

Aurélie

9 réponses

inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
5 juin 2012 à 01:58
Bonjour,

D'accord elle ne l'est pas strictement.

Par contre obsolète dans son utilisation elle l'est. A part pour quelques vieux hébergeurs ne supportant pas glob(), là d'accord. Nous sommes maintenant en 2012 (captain obvious) et selon certaines stats PHP 5 domine. Il existe maintenant de meilleurs outils que opendir().

Glob() (PHP 4 >= 4.3.0, PHP 5) est plus rapide et je pense plus simple.
$files = glob(__DIR__);


ou

$files = opendir(__DIR__);
while($element = readdir($dir)) {}
closedir($files);


Avec la spl

$files = new DirectoryIterator(__DIR__);


Sur 100000 itérations cela me donne :

[list]
[*] glob() : 0.2216 s
[*] openDir() : 0.8584 s
[*] DirectoryIterator() : 0.8656 s
/list

Enfin cela vaut ce que cela vaut.


________________________________________
( $toBe || !$toBe ) = $this->Question();
3
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
4 juin 2012 à 16:16
Bonjour,

Hmm message illisible manque la coloration syntaxique.

Ce que j'ai remarqué c'est le readdir, méthode obsoléte. Il existe glob() et encore mieux dans la SPL, il y a SplFileInfo qui dispose de la méthode getBaseName().

Un suffixe optionnel à omettre dans le nom de fichier retourné.

________________________________________
( $toBe || !$toBe ) = $this->Question();
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
4 juin 2012 à 23:22
Salut,

Ce que j'ai remarqué c'est le readdir, méthode obsoléte.

D'où que c'est obsolète ?
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
18 juin 2012 à 19:33
Salut,

@inwebo : Ton argumentation est naze et ne vaut pas un clou. Se baser sur un seul test de performance pour dire que des fonctions sont obsolète ne signifie rien du tout. Je vais te le prouver en te proposant un nouveau test : lister les fichiers contenus dans le dossier ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/9.0-RELEASE/

<?php

$d = opendir('ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/9.0-RELEASE/');
if ($d !== false)
  {
    while (false !($f readdir($d)))
      {
echo $f, PHP_EOL;
      }
    closedir($d);
  }

?>

Temps d'exécution : chez moi environ 0.75 secondes, variable en fonction de ma connexion.

Regardons comment la doc nous dis de faire avec glob() :
Note: Cette fonction ne fonctionne pas avec les fichiers distants, car le fichier utilisé doit être accessible sur le système de fichiers local.

Temps d'exécution : plus l'infini.

Ho zut, on a trouvé un cas où glob() ne peux même pas lister les fichiers, contrairement à opendir/readdir/closedir. Et après tu oses dire que ce sont des fonctions obsolète ? Moins performantes sur un système local peut être, mais elles ont une portée d'utilisation bien plus grande et ne sont donc pas du tout obsolètes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
18 juin 2012 à 21:15
Bonjour,

Tout d'abord je souhaite enrichir votre vocabulaire d'un mot qui il me semble est tout à fait approprié pour un forum publique d'entraide. Courtoisie.

Ensuite, chose importante répondre à la problèmatique qui est je le rappelle :

Ne pas afficher l'extension d'un fichier.
Il apparait qu'il faut lister un dossier sur un système local


J'affirme donc qu'utiliser le trio opendir/readdir/closedir pour récupérer le nom d'un fichier sans son extension est obsolète.
Et qu'il existe maintenant des outils plus simple ou* plus rapide.

Il existe glob() et encore mieux dans la SPL, il y a SplFileInfo qui dispose de la méthode getBaseName().


Que de

[list]
[*] Initialiser un tableau
[*] D'ouvrir un ressource
[*] Itérer sur toutes les entrées.
[*] De traiter une chaine de caractère pour avoir son extension.
[*] De fermer la ressource
/list

Donc je suis désolé TychoBrae mais vous ne prouvez rien du tout. Vous êtes hors-sujet. Ce qui est plutôt original comme argumentation.

En ce qui concerne l'utilisation des fichiers distants, nous sommes d'accord opendir/readdir/closedir peut être une solution.

Car avec votre exemple, shazaam, temps d'execution sur un serveur free.fr : plus l'infini (cela ne vous rappelle rien ?).

* Le ou français n'est pas exclusif
________________________________________
( $toBe || !$toBe ) = $this->Question();
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
18 juin 2012 à 22:30
Salut,

J'affirme donc qu'utiliser le trio opendir/readdir/closedir pour récupérer le nom d'un fichier sans son extension est obsolète.

Non. Le fait que dans ce cas précis ce ne soit pas le plus judicieux ne signifie pas que c'est obsolète, loin de là. Visiblement tu confond "obsolète" et "mal choisi" (qui sont deux choses totalement différentes) et ça te fais dire des bêtises, j'y suis pour rien moi.

Donc je suis désolé TychoBrae mais vous ne prouvez rien du tout. Vous êtes hors-sujet. Ce qui est plutôt original comme argumentation.

Par rapport à la question du départ sans doute, mais c'est pas le problème. Pour rappel : j'ai réagis à ton "Ce que j'ai remarqué c'est le readdir, méthode obsoléte." en demandant en quoi c'était obsolète. Tu t'es lancé dans une argumentation qui n'a strictement rien à voir avec le caractère obsolète de ces fonctions et je t'ai donc prouvé que non elles ne sont pas obsolètes. Bref, je répond parfaitement à ton post même si oui nous avons déviés du sujet initial.

Car avec votre exemple, shazaam, temps d'execution sur un serveur free.fr : plus l'infini (cela ne vous rappelle rien ?).

Exactement le même code que plus haut sur ftp://ftp.free.fr/ :
-> time php dir.php
MPlayer
awstats
lost+found
mirrors
nzb
pub
stats
tmp

real	0m0.255s
user	0m0.032s
sys	0m0.028s

Nice try, essaye encore. Sérieux, pourquoi veux-tu que les serveurs de free soient différents des autres ?
0
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
19 juin 2012 à 00:18
Bonjour,

Je ne confonds rien du tout, par contre la seul chose que je peux vous concéder c'est que ce mot n'est pas le plus judicieux.

Mais vous avez entièrement raison continuons à utiliser opendir et tout le reste c'est tellement plus pratique et simple à mettre en oeuvre pour récupérer un malheureux nom de fichier. C'est une bonne idée à encourager car il n'existe pas mieux à l'heure actuelle.

Nice try, essaye encore. Sérieux, pourquoi veux-tu que les serveurs de free soient différents des autres ?


Vous n'avez jamais rien hébergé chez eux tout simplement.

Pour avoir hébergé plusieurs sites sans prétentions sur leurs serveurs et ce pendant quelques années. Avec votre exemple les sources. Et surement suite aussi à ce sujet, dont voici l'explication. Mais à part ça rien du tout.

Non désolé vous ne prouvez toujours rien, discussion stérile et dialectique polluante.

NB : Je fais l'effort de vous tutoyer hein ce n'est pas pour rien, je ne suis pas votre 'pote'.
________________________________________
( $toBe || !$toBe ) = $this->Question();
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
19 juin 2012 à 10:17
Salut,

Je ne confonds rien du tout, par contre la seul chose que je peux vous concéder c'est que ce mot n'est pas le plus judicieux.

Obsolète : Désuet, qui n’a plus cours, qui a cessé d’être en usage. Dans php les fonctions obsolètes sont des fonctions qui sont totalement remplacées par de nouvelles et qui sont moins recommandées que ces dernières (pour divers raisons). Elle sont indiquées comme tel dans la documentation (exemple: ereg()).
opendir/readdir/closedir ne sont pas signalées comme obsolètes. Elles ont des domaines d'application qui ne sont pas couverts par d'autres fonctions. Elles n'ont donc strictement rien d'obsolète. Maintenant si tu te crois plus intelligent que les mecs qui font PHP libre à toi, mais ça ne te mènera pas bien loin.

Mais vous avez entièrement raison continuons à utiliser opendir et tout le reste c'est tellement plus pratique et simple à mettre en oeuvre pour récupérer un malheureux nom de fichier. C'est une bonne idée à encourager car il n'existe pas mieux à l'heure actuelle.

Dans certains cas tu n'as juste pas le choix. Dans d'autres, comme je le disais, il est en effet préférable de ne pas l'utiliser. Tout dépends de ce que l'on veux faire, et si pour la problématique de base de ce sujet glob() est sans doute meilleur (mais pas parfait je crois), ce n'est pas forcément le cas dans d'autres domaines d'application. Visiblement tu as l'air bien trop coincé sur un cas précis, tu n'arrive pas à voir les choses à une échelle plus générale, c'est dommage.

Pour avoir hébergé plusieurs sites sans prétentions sur leurs serveurs et ce pendant quelques années. Avec votre exemple les sources. Et surement suite aussi à ce sujet, dont voici l'explication. Mais à part ça rien du tout.

Ha nous nous sommes mal compris, il faut dire que ton message portais à confusion. Je pensais que tu disais qu'on ne pouvais, depuis n'importe où, pas lister un répertoire d'un serveur free. Visiblement ce que tu voulais dire c'est qu'un script hébergé chez free ne peux pas lister un dossier distant. A ce sujet je te répondrais ceci :
C'est simplement parce que free a désactivé cette possibilité, sans doute pour des raisons de "sécurité". Et qu'ils aient fait ça ne change rien. Tu dois déjà le savoir, mais un hébergeur peut également désactiver n'importe quelle fonction de PHP, est-ce que ça signifie pour autant que toutes les fonctions PHP sont "obsolète" parce qu'on peux ne pas y avoir accès partout ? Clairement non, ça ne change strictement rien, ton argument était totalement hors-sujet.

NB : Je fais l'effort de vous tutoyer hein ce n'est pas pour rien, je ne suis pas votre 'pote'.

C'est vrai qu'en France les gens sont bien plus distant, c'est bien dommage. Je ne te tutoie pas parce que je te considère comme un pote, je te tutoie parce que de là d'où je viens tout le monde se tutoie.
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
19 juin 2012 à 10:32
inwebo, tout dépend ce que tu souhaites faire. Il est vrai que glob est bien plus simple d'utilisation et dans la plupart des cas le plus adequate. Cependant opendir peut aussi être plus rapide DANS CERTAIN CAS, surtout sur une grande quantité de fichier.

http://stackoverflow.com/questions/2763290/which-is-faster-glob-or-opendir

Quand j'ai lu que c'était obselete j'ai eu peur!!! Il ne faut pas inventer de tel chose :-)
0
Rejoignez-nous