Des petites améliorations ) un script PHP ?

corentin.bc Messages postés 383 Date d'inscription   Statut Membre Dernière intervention   -  
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir,
j'ai le code suivant :
<?php
$nb_fichier = 0;
echo '<ul>';
?>
<?php
if($dossier = opendir('./logiciels'))
{
?>
<?php
while(false !== ($fichier = readdir($dossier)))
{
?>
<?php
if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
{
?>
<?php
$nb_fichier++; // On incrémente le compteur de 1
echo '<li><a href="./mondossier/' . $fichier . '" rel="nofollow" target="_blank">' . $fichier . '</a></li>';
} // On ferme le if (qui permet de ne pas afficher index.php, etc.)
} // On termine la boucle
?>
<?php
echo '</ul><br />';
echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier';
closedir($dossier);
}
else
echo 'Le dossier n\' a pas pu être ouvert';
?>

j'aimerais 3 choses :
que le script n'affiche pas le fichier .htaccess,
que le script n'affiche pas les dossiers redirections et portables,
que le script affiche les dossiers avant les fichiers.
Comment faire tout cela ?

Merci beaucoup !

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

Amicalement! Corentin.
A voir également:

1 réponse

Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

Une solution possible serait de remplacer l'utilisation de readdir par la fonction glob qui permet de récupérer la liste des fichiers directement dans un tableau.

A partir de ce tableau de fichier, on peut effectuer deux boucles pour le parcourir, la première n'affichera que les dossiers et la seconde que les fichiers.
(Idéalement on pourrait utiliser une seule boucle en triant le tableau avec une fonction de tri personnalisée pour que les dossiers soient en premier)

Enfin on peut vérifier à chaque fois qu'on affiche un fichier ou un dossier si ce-dernier fait partie des fichiers ou dossiers qu'on ne souhaite pas afficher (tel que tu le fait actuellement pour le fichier index.php ainsi que les dossiers spéciaux . et ..).

Un début de solution :
<?php 

// liste des fichiers et dossiers contenu dans ./logiciel
$files = glob('./logiciels/*');

// dossiers à ne pas afficher
$dirExclude = array('redirections', 'portables');
// fichier à ne pas afficher
$filesExclude = array('index.php', '.htaccess');

echo '<ul>';

// affichage des dossiers
foreach($files as $file) {
 $filename = basename($file);
 
 if (is_dir($file) && !in_array($filename, $dirExclude)) {
  echo '<li>' . $filename . '</li>';
 }
}

// affichage des fichiers
foreach($files as $file) {
 $filename = basename($file);
 
 if (is_file($file) && !in_array($filename, $filesExclude)) {
  echo '<li>' . $filename . '</li>';
 }
}

echo '</ul>';


Bonne journée,
0