IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Listing de répertoires


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 68
    Points
    68
    Par défaut Listing de répertoires
    Rebonjour à tous,

    Je suis très bavard aujourd'hui !!

    Je voudrais avoir la liste des répertoires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    	$chemin = opendir("/dossier");
    	$listfichier = array();
     
    	$m=0;
    	while(($encours = readdir($chemin)) !== FALSE)
    	{
    		if(is_dir($encours))
    		{$listfichier[$m++] = "$encours";}
    	}
     
    	foreach($listfichier as $temp)
    	{echo $temp."<BR>";}
     
    	?>
    Le problème est que le chemin n'est pas le bon :
    Si je mets $chemin = opendir("."); il me liste bien mes répertoires, mais des que je mets $chemin = opendir("/nomdudossier") ca ne marche plus.

    Quel est le problème?

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 83
    Points : 95
    Points
    95
    Par défaut
    Il te met quoi comme erreur ?

    Sinon tu as essayé avec opendir("nomdudossier/"); plutot ?

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Dans la variable $encours vous ne récupérez que le nom du fichier (ou répertoire) et non son chemin complet, ce qui fait que le test is_dir est toujours faux (le fichier n'existant pas dans le répertoire courant). Il faudrait écrire cela différemment, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    define('BASE', '/dossier'); // Sans / ou \ final
     
    $chemin = opendir(BASE . DIRECTORY_SEPARATOR);
    $listfichier = array();
     
    while (($encours = readdir($chemin)) !== FALSE)
    {
        if(is_dir(BASE . DIRECTORY_SEPARATOR . $encours))
        {
            $listfichier[] = $encours;
        }
    }
    closedir($chemin);
     
    # ...
    ?>

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 68
    Points
    68
    Par défaut
    Ok, je vois mon erreur...

    Je vais réessayer avec ta solution !!

    et... peut etre à dans 5mn

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 68
    Points
    68
    Par défaut
    Bon, j'ai essayé pleins de trucs et rien n'y fait, je n'y arrive pas !!

    Voici le message d'erreur que je recois :
    /mesphotos
    Warning: opendir(/mesphotos) [function.opendir]: failed to open dir: No such file or directory in /home/domaine/public/comptes/SB/pages/listing.php on line 4
    Et voici le code que j'ai tapé, suite aux conseils de Julp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    	define('BASE', '/mesphotos');
    	echo BASE;
    	$chemin = opendir(BASE);
    	$listfichier = array();
     
    	while(($encours = readdir($chemin)) !== FALSE)
    	{
    		if(is_dir(BASE . DIRECTORY_SEPARATOR . $encours))
    		{$listfichier[] = "$encours";}
    	}
     
    closedir($chemin);
    echo $temp."<BR>";
     
    	?>
    Pour info, mon arborescence est la suivante :

    public
    |
    |->index.php
    |
    |->Rep[mesphotos]
    |
    |->Rep[pages]->listing.php(le code ci-dessus)
    |

    et l'index.php me fait un tout bete include :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	if(isset($_GET['page']))
    	{
    	$nompage=htmlentities($_GET['page'],ENT_QUOTES);
    		switch($nompage)
    		{
    		case "X":
    		include("./pages/listing.php");
    		break;
    		}
    	}
    Pour etre franc, j'aimerais vraiment comprendre mes erreurs, car je traine betement !!
    pour votre aide !!!

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Le chemin est absolu ici, c'est pour cela. Je pense que vous devez utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define('BASE', './mesphotos');
    Si j'ai bien compris votre utilisation et votre arborescence.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 68
    Points
    68
    Par défaut


    Ca y est, ca marche !!
    Deux erreurs :

    1/ Le . devant /mesphotos;
    Mais je comprend pas bien, je croyais que :
    c'est du relatif: ./monrepertoire
    l'absolu : http://www.mondomaine/repertoir1
    (je met le tag resolu mais si vous m'expliquez la différence je regarderai

    2/erreur : A force de bidouiller, j'ai tout melangé et mon echo n'affichait que le chemin et pas la liste. J'ai donc rajouté un print_r pour voir, ET CA MARCHE !!!

    beaucoup !!!

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par WagaSeb
    1/ Le . devant /mesphotos;
    Mais je comprend pas bien, je croyais que :
    c'est du relatif: ./monrepertoire
    l'absolu : http://www.mondomaine/repertoir1
    Relatif, c'est à partir du répertoire courant : ./mesphotos (ou mesphotos tout court), ../.. (on remonte de deux répertoire donc ça doit vous donner /home/domaine/public/comptes/), ...
    Absolu, c'est le chemin complet à partir de la racine : /home/domaine/public/comptes/SB/mesphotos

    On peut passer d'un chemin relatif à absolu via la fonction realpath() et on peut obtenir le chemin absolu du répertoire courant via getcwd().

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    J'ai un soucis avec la fonction define :

    Suite aux posts précédents, j'ai retapé mon script et tout allait bien. J'ai donc rajouté des petites fioritures et j'ai rajouté une liste déroulante qui m'affiche les répertoires. Ca, ca marche !

    Le problème c'est que :
    define('BASE', '/mesphotos/'. $repertoire);
    ne fonctionne pas : $repertoire, qui n'est pourtant pas vide, n'est pas pris en compte.

    Quelqun peut me l'expliquer ?

    Le code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <p>Veuillez sélectionner le répertoire de photos à visualiser :</p>
    <form method="post" action="index.php?page=photos">
    Répertoire : <SELECT name="repertoire">
    <?php
    listrep();
    ?>
    <br />
    <input type="submit" name="ok" value="Valider !"/><br />
    </form>
     
    <p>Page actuellement en cours de modification !</p>
     
    <?php
    echo "Le post vaut : ".$_POST['repertoire'] . "<BR>";
    if(isset($_POST['repertoire']))
    {
    	$repchoisi = htmlentities($_POST['repertoire'], ENT_QUOTES);
    	echo '<table><tr><td id="icone"></td><td>Fichier</td><td>Poids</td></tr>';
     
    	define('BASE', '/mesphotos/'. $repertoire);
     
    echo 'Le chemin vaut ' . BASE;
    	$chemin = opendir(BASE);
    	$listfichier = array();
     
    	while(($encours = readdir($chemin)) !== FALSE)
    	{
    		if(is_file(BASE . DIRECTORY_SEPARATOR . $encours))
    		{$listfichier[] = "<tr><td id=\"icon\"></td><td><a id=\"puce\" href=\"mesphotos/laurence/$encours\">$encours</a></td></tr>";}
    	}
    //****************************************************************************
    //	$listfichier_minuscule = array_map('strtolower', $listfichier);
    //	array_multisort($listfichier_minuscule, SORT_ASC, SORT_STRING, $listfichier);
    //****************************************************************************	
    	closedir($chemin);
     
    	$temp_ranger = array_map('strtolower', $listfichier);
    	array_multisort($temp_ranger, SORT_ASC, SORT_STRING, $listfichier);
     
    	foreach($temp_ranger as $tempfinal)
    	{
    	echo $tempfinal;
    	}
    }
    else
    	{echo "Choisissez un repertoire";}
    	?>
    	</table>

  10. #10
    ALkyD
    Invité(e)
    Par défaut
    Je crois qu'il faudrait que tu utilise plutôt que qui n'est pas défini avant ($_POST['repertoire'] ne donne pas $repertoire si la directive register_globals est activée).

    Ou alors c'est la variable

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Points : 68
    Points
    68
    Par défaut
    Alors j'ai fais le test : j'ai remplacé $repertoire par $_POST['repertoire'] et na ne change rien ...
    Par contre, oui j'ai bien REGISTER_GLOBALS sur ON

    Et concernant $repchoisi, je il prend bien la bonne valeur ...

    Donc je vois pas trop ...

    Si quelqu'un voit ...

Discussions similaires

  1. [VBA-E] Liste des répertoires
    Par linda15975 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/03/2006, 08h23
  2. Obtenir la liste des répertoires et le chemin
    Par claralavraie dans le forum Oracle
    Réponses: 2
    Dernier message: 16/02/2006, 17h45
  3. Réponses: 4
    Dernier message: 24/11/2005, 09h11
  4. Récupérer la liste des répertoires d'un répertoire
    Par oursblanc dans le forum Langage
    Réponses: 3
    Dernier message: 19/10/2005, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo