Ne pas affichier l'extension d'un fichier [Résolu]

Messages postés
86
Date d'inscription
jeudi 24 juin 2010
Dernière intervention
17 avril 2013
- - Dernière réponse : abdoulax
Messages postés
875
Date d'inscription
samedi 17 mai 2003
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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Dernière intervention
23 octobre 2014
3
Merci
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();

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de inwebo
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Dernière intervention
23 octobre 2014
0
Merci
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();
Commenter la réponse de inwebo
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
0
Merci
Salut,

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

D'où que c'est obsolète ?
Commenter la réponse de TychoBrahe
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
0
Merci
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.
Commenter la réponse de TychoBrahe
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Dernière intervention
23 octobre 2014
0
Merci
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();
Commenter la réponse de inwebo
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
0
Merci
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 ?
Commenter la réponse de TychoBrahe
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Dernière intervention
23 octobre 2014
0
Merci
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();
Commenter la réponse de inwebo
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
0
Merci
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.
Commenter la réponse de TychoBrahe
Messages postés
875
Date d'inscription
samedi 17 mai 2003
Dernière intervention
22 juin 2012
0
Merci
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 :-)
Commenter la réponse de abdoulax

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.