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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Script qui liste les repertoires donnant des liens sur les fichiers


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut Script qui liste les repertoires donnant des liens sur les fichiers
    Bonjour,

    J'essaye de mettre en place le script http://cyberzoide.developpez.com/php4/file/

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
     
    <html> 
    <head> 
    <style type="text/css"> 
    * {font-size: 10pt;} 
    </style> 
    </head> 
    <body> 
     
    <?php 
     
    /* racine */ 
    $BASE = "../.."; 
     
    /* infos à extraire */ 
    function addScheme($entry,$base,$type) { 
      $tab['name'] = $entry; 
      $tab['type'] = filetype($base."/".$entry); 
      $tab['date'] = filemtime($base."/".$entry); 
      $tab['size'] = filesize($base."/".$entry); 
      $tab['perms'] = fileperms($base."/".$entry); 
      $tab['access'] = fileatime($base."/".$entry); 
      $t = explode(".", $entry); 
      $tab['ext'] = $t[count($t)-1]; 
      return $tab; 
    } 
     
    /* liste des dossiers */ 
    function list_dir($base, $cur, $level=0) { 
      global $PHP_SELF, $BASE, $order, $asc; 
      if ($dir = opendir($base)) { 
        $tab = array(); 
        while($entry = readdir($dir)) { 
          if(is_dir($base."/".$entry) && !in_array($entry, array(".",".."))) { 
            $tab[] = addScheme($entry, $base, 'dir'); 
          } 
        } 
        /* tri */ 
        usort($tab,"cmp_name"); 
        foreach($tab as $elem) { 
          $entry = $elem['name']; 
          /* chemin relatif à la racine */ 
          $file = $base."/".$entry; 
         /* marge gauche */ 
          for($i=1; $i<=(4*$level); $i++) { 
            echo "&nbsp;"; 
          } 
          /* l'entrée est-elle le dossier courant */ 
          if($file == $cur) { 
            echo "<img src=\"dir-open.gif\" />&nbsp;$entry<br />\n"; 
          } else { 
            echo "<img src=\"dir-close.gif\" />&nbsp;<a href=\"$PHP_SELF?dir=". rawurlencode($file) ."&order=$order&asc=$asc\">$entry</a><br />\n"; 
          } 
          /* l'entrée est-elle dans la branche dont le dossier courant est la feuille */ 
          if(ereg($file."/",$cur."/")) { 
            list_dir($file, $cur, $level+1); 
          } 
        } 
        closedir($dir); 
      } 
    } 
     
    /* liste des fichiers */ 
    function list_file($cur) { 
      global $PHP_SELF, $order, $asc, $order0; 
      if ($dir = opendir($cur)) { 
        /* tableaux */ 
        $tab_dir = array(); 
        $tab_file = array(); 
        /* extraction */ 
        while($file = readdir($dir)) { 
          if(is_dir($cur."/".$file)) { 
            if(!in_array($file, array(".",".."))) { 
              $tab_dir[] = addScheme($file, $cur, 'dir'); 
            } 
          } else { 
              $tab_file[] = addScheme($file, $cur, 'file'); 
          } 
        } 
        /* tri */ 
        usort($tab_dir,"cmp_".$order); 
        usort($tab_file,"cmp_".$order); 
        /* affichage */ 
        echo "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">"; 
        echo "<tr style=\"font-size:8pt;font-family:arial;\"> 
        <th>".(($order=='name')?(($asc=='a')?'/\\ ':'\\/ '):'')."<a href=\"$PHP_SELF?dir=".rawurlencode($cur). "&order=name&asc=$asc&order0=$order\">Nom</a></th><td>&nbsp;</td> 
        <th>".(($order=='size')?(($asc=='a')?'/\\ ':'\\/ '):'')."<a href=\"$PHP_SELF?dir=".rawurlencode($cur). "&order=size&asc=$asc&order0=$order\">Taille</a></th><td>&nbsp;</td> 
        <th>".(($order=='date')?(($asc=='a')?'/\\ ':'\\/ '):'')."<a href=\"$PHP_SELF?dir=".rawurlencode($cur). "&order=date&asc=$asc&order0=$order\">Dernière modification</a></th><td>&nbsp;</td> 
        <th>".(($order=='type')?(($asc=='a')?'/\\ ':'\\/ '):'')."<a href=\"$PHP_SELF?dir=".rawurlencode($cur). "&order=type&asc=$asc&order0=$order\">Type</a></th><td>&nbsp;</td> 
        <th>".(($order=='ext')?(($asc=='a')?'/\\ ':'\\/ '):'')."<a href=\"$PHP_SELF?dir=".rawurlencode($cur). "&order=ext&asc=$asc&order0=$order\">Extention</a></th><td>&nbsp;</td> 
        <th>".(($order=='perms')?(($asc=='a')?'/\\ ':'\\/ '):'')."<a href=\"$PHP_SELF?dir=".rawurlencode($cur). "&order=perms&asc=$asc&order0=$order\">Permissions</a></th><td>&nbsp;</td> 
        <th>".(($order=='access')?(($asc=='a')?'/\\ ':'\\/ '):'')."<a href=\"$PHP_SELF?dir=".rawurlencode($cur). "&order=access&asc=$asc&order0=$order\">Dernier accès</a></th></tr>"; 
        foreach($tab_dir as $elem) { 
          echo "<tr><td><img src=\"dir-close.gif\" />&nbsp;".$elem['name']."</td><td>&nbsp;</td> 
          <td>&nbsp;</td><td>&nbsp;</td> 
          <td>".date("d/m/Y H:i:s", $elem['date'])."</td><td>&nbsp;</td> 
          <td>".assocType($elem['type'])."</td><td>&nbsp;</td> 
          <td>&nbsp;</td><td>&nbsp;</td> 
          <td>".$elem['perms']."</td><td>&nbsp;</td> 
          <td>".date("d/m/Y", $elem['access'])."</td></tr>\n"; 
        } 
        foreach($tab_file as $elem) { 
          echo "<tr><td><img src=\"file-none.gif\" />&nbsp;".$elem['name']."</td><td>&nbsp;</td> 
          <td align=\"right\">".formatSize($elem['size'])."</td><td>&nbsp;</td> 
          <td>".date("d/m/Y H:i:s", $elem['date'])."</td><td>&nbsp;</td> 
          <td>".assocType($elem['type'])."</td><td>&nbsp;</td> 
          <td>".assocExt($elem['ext'])."</td><td>&nbsp;</td> 
          <td>".$elem['perms']."</td><td>&nbsp;</td> 
          <td>".date("d/m/Y", $elem['access'])."</td></tr>\n"; 
        } 
        echo "</table>"; 
        closedir($dir); 
      } 
    } 
     
    /* formatage de la taille */ 
    function formatSize($s) { 
      /* unités */ 
      $u = array('octets','Ko','Mo','Go','To'); 
      /* compteur de passages dans la boucle */ 
      $i = 0; 
      /* nombre à afficher */ 
      $m = 0; 
      /* division par 1024 */ 
      while($s >= 1) { 
        $m = $s; 
        $s /= 1024; 
        $i++; 
      } 
      if(!$i) $i=1; 
      $d = explode(".",$m); 
      /* s'il y a des décimales */ 
      if($d[0] != $m) { 
        $m = number_format($m, 2, ",", " "); 
      } 
      return $m." ".$u[$i-1]; 
    } 
     
    /* formatage du type */ 
    function assocType($type) { 
      /* tableau de conversion */ 
      $t = array( 
        'fifo' => "file", 
        'char' => "fichier spécial en mode caractère", 
        'dir' => "dossier", 
        'block' => "fichier spécial en mode bloc", 
        'link' => "lien symbolique", 
        'file' => "fichier", 
        'unknown' => "inconnu" 
      ); 
      return $t[$type]; 
    } 
     
    /* description de l'extention */ 
    function assocExt($ext) { 
      $e = array( 
        '' => "inconnu", 
        'doc' => "Microsoft Word", 
        'xls' => "Microsoft Excel", 
        'ppt' => "Microsoft Power Point", 
        'pdf' => "Adobe Acrobat", 
        'zip' => "Archive WinZip", 
        'txt' => "Document texte", 
        'gif' => "Image GIF", 
        'jpg' => "Image JPEG", 
        'png' => "Image PNG", 
        'php' => "Script PHP", 
        'php3' => "Script PHP", 
        'htm' => "Page web", 
        'html' => "Page web", 
        'css' => "Feuille de style", 
        'js' => "JavaScript" 
      ); 
      if(in_array($ext, array_keys($e))) { 
        return $e[$ext]; 
      } else { 
        return $e['']; 
      } 
    } 
     
    function cmp_name($a,$b) { 
        global $asc; 
        if ($a['name'] == $b['name']) return 0; 
        if($asc == 'a') { 
            return ($a['name'] < $b['name']) ? -1 : 1; 
        } else { 
            return ($a['name'] > $b['name']) ? -1 : 1; 
        } 
    } 
    function cmp_size($a,$b) { 
        global $asc; 
        if ($a['size'] == $b['size']) return cmp_name($a,$b); 
        if($asc == 'a') { 
            return ($a['size'] < $b['size']) ? -1 : 1; 
        } else { 
            return ($a['size'] > $b['size']) ? -1 : 1; 
        } 
    } 
    function cmp_date($a,$b) { 
        global $asc; 
        if ($a['date'] == $b['date']) return cmp_name($a,$b); 
        if($asc == 'a') { 
            return ($a['date'] < $b['date']) ? -1 : 1; 
        } else { 
            return ($a['date'] > $b['date']) ? -1 : 1; 
        } 
    } 
    function cmp_access($a,$b) { 
        global $asc; 
        if ($a['access'] == $b['access']) return cmp_name($a,$b); 
        if($asc == 'a') { 
            return ($a['access'] < $b['access']) ? -1 : 1; 
        } else { 
            return ($a['access'] > $b['access']) ? -1 : 1; 
        } 
    } 
    function cmp_perms($a,$b) { 
        global $asc; 
        if ($a['perms'] == $b['perms']) return cmp_name($a,$b); 
        if($asc == 'a') { 
            return ($a['perms'] < $b['perms']) ? -1 : 1; 
        } else { 
            return ($a['perms'] > $b['perms']) ? -1 : 1; 
        } 
    } 
    function cmp_type($a,$b) { 
        global $asc; 
        if ($a['type'] == $b['type']) return cmp_name($a,$b); 
        if($asc == 'a') { 
            return ($a['type'] < $b['type']) ? -1 : 1; 
        } else { 
            return ($a['type'] > $b['type']) ? -1 : 1; 
        } 
    } 
    function cmp_ext($a,$b) { 
        global $asc; 
        if ($a['ext'] == $b['ext']) return cmp_name($a,$b); 
        if($asc == 'a') { 
            return ($a['ext'] < $b['ext']) ? -1 : 1; 
        } else { 
            return ($a['ext'] > $b['ext']) ? -1 : 1; 
        } 
    } 
    ?> 
     
    <table border="1" cellspacing="0" cellpadding="10" bordercolor="gray"> 
    <tr valign="top"><td> 
     
    <!-- liste des répertoires 
    et des sous-répertoires --> 
    <?php  
    if(!in_array($order, array('name','date','size','perms','ext','access','type'))) { 
      $order = 'name'; 
    } 
    if(($order == $order0) && ($asc != 'b')) { 
      $asc = 'b'; 
    } else { 
      $asc = 'a'; 
    } 
    /* lien sur la racine */ 
    if(!$dir) { 
      echo "<img src=\"dir-open.gif\" />&nbsp;/<br />\n"; 
    } else { 
      echo "<img src=\"dir-close.gif\" />&nbsp;<a href=\"$PHP_SELF\">/</a><br />\n"; 
    } 
    list_dir($BASE, rawurldecode($dir), 1);  
    ?> 
     
    </td><td> 
     
    <!-- liste des fichiers --> 
    <?php 
    /* répertoire initial à lister */ 
    if(!$dir) { 
      $dir = $BASE; 
    }  
    list_file(rawurldecode($dir));  
    ?> 
     
    </td></tr> 
    </table> 
     
    </body> 
    </html>

    J'ai plusieurs erreurs :
    Notice: Undefined variable: dir in E:\Program Files\EasyPHP 2.0b1\www\listest1.php on line 94

    Notice: Undefined variable: dir in E:\Program Files\EasyPHP 2.0b1\www\listest1.php on line 99

    Notice: Undefined variable: dir in E:\Program Files\EasyPHP 2.0b1\www\listest1.php on line 107

    comment lui déclarer cette variable...

    je peux pas répeter quand meme $dir = $BASE en plus ça n'a pas de sens non?


    Je vous remercie

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    les NOTICE ne sont pas à proprement parler des erreurs mais juste des avertissements ;-)


    pour régler ce problème sans toucher à la configuration de ton serveur, met juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if( !isset($dir) )
          $dir = "";
    au début de ton script ;-)

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    OK merci

    Donc j'ai bien mon tableau avec la liste des dossiers par contre lorsque je clique sur un dossier... rien ne se passe, comme s'il recharger la page mais avec le meme dossier...

    Une idée ?

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    bah ça vient du même problème qu'au-dessus... tu lui dis nul part que tu as sélectionné un dossier...

    faut modifier la ligne que je t'ai donné plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if( !isset($_GET["dir"]) )
         $dir = "";
    else
         $dir = $_GET["dir"];

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup !

    Wow c'est rapide ces réponses...

    Donc j'ai continué la suite du script du même site...

    j'ai mis la partie triage :

    J'ai le message d'avertissement

    >> Notice: Undefined variable: order in E:\Program Files\EasyPHP 2.0b1\www\listest1.php on line 294



    <?php
    if(!in_array($order, array('name','date','size','perms','ext','access','type'))) {
    $order = 'name';
    Je suppose que c'est le même probleme quand haut, dois je déclarer $order = "" ; ?


    >>Notice: Undefined variable: asc in E:\Program Files\EasyPHP 2.0b1\www\listest1.php on line 300

    Pareil c'est une déclaration de variable....

    Mais ce que je comprend pas c'est que dans la source, il a définit des variables globlal ex:

    function cmp_access($a,$b) {
    global $asc;
    if ($a['access'] == $b['access']) return cmp_name($a,$b);
    if($asc == 'a') {
    return ($a['access'] < $b['access']) ? -1 : 1;
    } else {
    return ($a['access'] > $b['access']) ? -1 : 1;
    }
    }
    dois je encore redéclarer asc ?





    >>Notice: Undefined variable: PHP_SELF in E:\Program Files\EasyPHP 2.0b1\www\listest1.php

    j'ai rajouté cette ligne $PHP_SELF = $_SERVER['PHP_SELF']; au début de mon script. Est ce la bonne méthode ?



    Merci !

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    oui en fait, ce script est codé en PHP4... à l'époque (lol) la variable register_globals était sur ON ce qui faisait que tu ne devais pas spécifier la provenance des variables...

    exemple :

    ton URL : monsite.com?page=test

    en php4 : echo $page; // affiche "test"
    en php5 : echo $page; // affiche Notice : undefined index 'page'
    en php5 correct : echo $_GET["page"]; // affiche "test"


    tu dois donc travailler sur un serveur en PHP5 ou en tout cas, configuré avec les register_globals sur OFF. il faudra donc définir chaque variables de la façon décrite dans mon post plus haut, c-a-d :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if( !isset($_GET["maVar"]) ) 
          $maVar = $_GET["maVar"];
    else
          $maVar = "";
    Evidemment, il ne faut faire cela que pour les variables qui te retourne une Notice undefined index ;-)


    EDIT :
    il en est de même pour les autres types de variables ($_POST, $_SERVER, $_SESSION) donc au moment du register_globals, on écrivait $PHP_SELF et le serveur interprétait tout seul la variable en tant que $_SERVER["PHP_SELF"] tu as donc bien fait ;-)

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    par contre en attendant ta réponse j'ai essayé de me débrouiller ... et en faisant un global $PHP_SELF, $order, $asc, $order0; -> ca fonctionne...

    Il m'a mit aucune erreur...

    donc c'est du code PHP4 pour un serveur PHP5 trouvé l'erreur --> moi

    bref est ce grave docteur ?

    Il ne reste plus qu'à faire des liens qui permttent de telecharger les fichiers lorsqu'on clic dessus

  8. #8
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    ce n'est pas très grave d'utiliser ce script sur un serveur en PHP5.. c'est juste qu'il te faut rectifier tous ces petits problèmes liés au register_globals

    Qu'est-ce qui ne va pas avec le lien des fichiers ? ^^

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    En fait dans la colonne de droite, je vois la liste des fichiers mais je peux rien faire dessus... j'aimerai pouvoir cliquer dessus et pouvoir le télécharger ou le visualiser dans une nouvelle fenetre de navigateur.

  10. #10
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    hum il doit pas y avoir de lien dans le code

  11. #11
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Je suppose que je dois allé là

    foreach($tab_file as $elem) {

    echo <tr><a href=\"$PHP_SELF?dir=".rawurlencode($cur).$elem['name'].">.$elem['name'].</a><td>&nbsp;</td>
    <td align=\"right\">".formatSize($elem['size'])."</td><td>&nbsp;</td>
    <td>".date("d/m/Y H:i:s", $elem['date'])."</td><td>&nbsp;</td>
    <td>".assocType($elem['type'])."</td><td>&nbsp;</td>
    <td>".assocExt($elem['ext'])."</td><td>&nbsp;</td>
    <td>".$elem['perms']."</td><td>&nbsp;</td>
    <td>".date("d/m/Y", $elem['access'])."</td></tr>\n";

    J'essaye de mettre se lien :

    <a href=\"$PHP_SELF?dir=".rawurlencode($cur).$elem['name'].">.$elem['name'].</a>

    J'ai le message suivant :

    Parse error: parse error, unexpected '<' in E:\Program Files\EasyPHP 2.0b1\www\listest1.php on line 149

    je vois pas ou j'ai le < en trop

  12. #12
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href=\"$PHP_SELF?dir=".rawurlencode($cur).$elem['name'].">".$elem['name']."</a>
    et pourtant, vu ce que tu avais écrit, PHP disait vrai, tu avais un '<' perdu dans la "nature" ^^

    t'as écrit .$elem['name']. donc pour lui, l'echo() se finissait à partir de là et juste apres tu avais </a> ;-)

    Tu peux copier/coller mon code, j'ai corrigé les " que t'avais oublié :p

  13. #13
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    en fait je n'ai pas compris comment il a codé...

    merci pour la modification mais le résulat n'est pas ce que je veux :

    <a href=\"$PHP_SELF?dir=".rawurlencode($cur).$elem['name'].">".$elem['name']."</a>

    en fait je me rend compte que le $PHP_SELF me sert à rien.

    Je vous pouvoir lui dire de me créer un lien avec le repertoire courant + l'element....
    Car la syntaxe au dessus ne me fait pas ça.

    J'ai essaye des lignes comme ça mais en vein :

    <a href=\"$cur/.$elem['name'].">".$elem['name']."</a>

    Car si je comprends bien le code, la variable $cur permet de récupérer le répertoire courant ?

    Merci à toi pour toutes ces réponses !

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Saut

    Tu es en train de prendre exemple sur un tutoriel totalement dépassé. Abandonne PHP4 et tous les tutoriels qui en parlent, et oriente-toi plutôt vers PHP5. Pour rappel, PHP4 n'évoluera plus du tout passé le mois d'août, même les failles de sécurité ne seront plus corrigées.

    Voici un article qui peut t'intéresser si tu cherches à parcourir des répertoires en PHP : http://julien-pauli.developpez.com/tutoriels/php/spl/

  15. #15
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Merci de m'avoir aiguiller et déplacer le sujet.

    Le problème c'est que je dois monté un site de partage de document.
    J'ai 2 semaines en gros... et oui très court ! Il y a déjà une version Beta
    Je vais faire une version Beta 2 plus ergonomique.

    ALors je cherche avec mon amis google des solutions et je suis tombé sur ce script.

    Je suis si pres du but recherché que je n'ai pas envie de reppartir à zero.
    A moins que tu connaisses un script quasi fait (comme celui que je viens de trouver sur le site) et faire des modifications selon mes désirs

    Je suis administrateur reseau/systeme et non webmaster/developpeur, les classes et les objets commencent à dater !


    Que dois je faire ? un DOS (vite fait mal fait) ou tout reprendre... j'ai peur 2 la deuxieme solutions surtout que je n'ai pas que ça comme projet...

    C'est un peu chaud le tout....

    En fait remarque je peux quand même formuler ma demande "cherche script PHP5 qui liste les repertoires donnant des liens sur les fichiers" ? c'est beau de rêver... je vais continuer google


    EDIT :

    J'avais trouver aussi ce script sur le site

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    <style type="text/css">
    <!--
     body,.mybox {
      font-family:'Lucida console';
      font-size:12px;
      color:#000000;
      background:#DDDDDD;
     }
     .mybox {
      background:#FFFFFF;
      width:100px;
     }
    -->
    </style>
    <?php
     
    //==========================================================//
    //  TAILLE DU DOSSIER (ET SOUS-DOSSIERS)
    //==========================================================//
    function dirsize($path,$recursive=true){
      $result=0;
      if(!@is_dir($path) || !@is_readable($path)) return -1;
      $fd=@dir($path); if(!$fd) return -1;
      $tmo=time();
      while($file=$fd->read()){
        if(substr($file,-1,1)!='.'){
          if(@is_dir($path.'/'.$file.'/'))
            $result+=$recursive?dirSize($path.'/'.$file.'/'):0;
          else $result+=filesize($path.'/'.$file);
        }
        if(time()-$tmo>=2){  // TimeOut de 2 secondes
          $fd->close();
          return -1;
        }
      }
      $fd->close();
      return $result;
    }
     
     
    //==========================================================//
    //  UNITE DE LA TAILLE
    //==========================================================//
    function getfilesize($size){
      if(!isset($size) || $size<0) return 'not found';
      $units=array('',' Ko',' Mo',' Go',' To');
      for($i=0;$size>1024;$i++) $size/=1024; 
      return round($size,2).$units[$i];
    }
     
     
    //==========================================================//
    //  TRAITEMENT DU POST
    //==========================================================//
    $lstd=Array();        // Tableau des dossiers
    $lstf=Array();        // Tableau des fichiers
    $lsts=Array();        // Tailles des fichiers 
    $myd=@$_POST['myd'];  // Sélection du dossier
    $myf=@$_POST['myf'];  // Sélection du(des) fichier(s)
     
    if((substr($myd,-1,1)=='.')&&(substr($myd,-2,2)!='..')) $myd='';
    @chdir($myd);
    echo '<b>'.getcwd().'</b> ('.@getfilesize(dirsize(getcwd())).')<br/>';
    if($handle=@opendir(getcwd()))
      while(($file=@readdir($handle))!==false)
        if((@is_dir($file))||($file=='..')){
          $lstd[]=getcwd().'/'.$file;
        }else{
          $lstf[]=$file;   
          $lsts[]=@getfilesize(filesize(getcwd().'/'.$file));
        }   
    @closedir($handle);
     
     
    //==========================================================//
    //  FORMULAIRE HTML
    //==========================================================//
    echo '<form name="mybrowse" method="post">';
     
     
    echo '<select name="myd" size="20" class="mybox" '.
         'onDblClick="mybrowse.submit();">';
    if(strlen(getcwd())<4){
      if('A:\\'!=getcwd())
        echo '<option value="A:">A:</option>';
      for($x=2;$x<26;$x++){
        $unit=chr(65+$x).':';
        if(@is_dir($unit) && $unit.'\\'!=getcwd())
          echo '<option value="'.$unit.'">'.$unit.'</option>';
      }
    }
    for($x=0;$x<count($lstd);$x++)
      echo '<option value="'.$lstd[$x].'">'.basename($lstd[$x]).'</option>';
    echo '</select>';
     
     
    echo '<select name="myf[]" size="20" class="mybox" '.
         'style="width:300px;" multiple>';
    for($x=0;$x<count($lstf);$x++)
      echo '<option value="'.$lstf[$x].'">'.$lstf[$x].' ('.$lsts[$x].')</option>';
    echo '</select>';
     
     
    echo '<br/>'.
         '<noscript>'.
         '<input type="submit" value=" LISTER " class="mybox"/>'.
         '</noscript>'.
         '</form>';
     
     
    //==========================================================//
    ?>
    Mais pareil je n'arrive pas à lui faire créer des liens dans celui là

    Les 2 scripts que j'ai évoqué me vont parfairtement ou quasi.
    Le deuxieme script est du php5?

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ton sujet voyage

    Est-ce que tu as vu ce sujet ? Un Treeview en PHP
    Dans tous les cas, tu as maintenant les bons mots-clefs pour tes recherches

  17. #17
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Mince je croyai que j'avais recu 2 fois ton email me disant que mon sujet a été déplacé ... (je pensai que c'était un bug) mais nn il voyage

    Bon je regarde ton site...

    EDIT: C'est pas tout à fait ce que je recherche, la personne travaille avec un fichier txt pour faire sa Tree.

    Ce que fais l'utilisateur dans mon cas:

    Il cherche via un moteur de recherche interne un nom de dossier.
    Il y aune conneixon à une BDD
    Une liste apparait avec des liens

    Ce que je veux:

    Lorsqu'on clic sur ses liens, aller directement dans le repertoire correspondant.
    Lorsqu'on clic sur un fichier dans cee repertoire, on le visualise ou le telecharge.

  18. #18
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ok.

    Est-ce que tu as pu tirer quelque chose de ce que je t'ai proposé (SPL) ?

  19. #19
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    malheureusement non,
    Le truc qui m'énerve c'est que je n'ai pas assez de temps pour m'interresse au SPL dont le langage "objet" (entre guillemet) est mieux....

    Je n'ai pas très bien compris qu'est ce que tu voulais me montrer

    Pour mon problème de lien j'ai trouvé :

    $lien = str_replace('%2F', '/',rawurlencode($cur));

    echo "<tr><a href=".$lien.'/'.$elem['name'].">".$elem['name']."</a><td>&nbsp;</td>
    <td align=\"right\">".formatSize($elem['size'])."</td><td>&nbsp;</td>
    <td>".date("d/m/Y H:i:s", $elem['date'])."</td><td>&nbsp;</td>
    <td>".assocType($elem['type'])."</td><td>&nbsp;</td>
    <td>".assocExt($elem['ext'])."</td><td>&nbsp;</td>
    <td>".$elem['perms']."</td><td>&nbsp;</td>
    <td>".date("d/m/Y", $elem['access'])."</td></tr>\n";
    Je sais que str replace n'est pas terrible.... mais j'ai deux problemes...
    Je dois gardé dans mon répertoire les "/" par contre le variable $elem contien le nom du fichier... si je laisse comme ça je vais avoir pour le fichier "Guide d'installation"

    "http://site/repertoire/sousrepertoire/Guide"

    Je pense qu'il existe une fonction qui permet de remplacer tout les carracteres connues "éàè espace..." par %20, %47 ex

  20. #20
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    L'idée est d'encoder en URL puis en entités HTML. Par chance, les entités URL n'ont pas besoin d'être encodées en HTML, mais c'est quand même plus sûr de le faire (pour correspondre à la norme HTML)

    Tu peux essayer le code suivant :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <style type="text/css">
    .folder {
        font-weight:bold;
    }
    </style>
    <?php
    if(!empty($_GET['browse']))
    {
        $browse = base64_decode($_GET['browse']);
        if(is_file($browse))
        {
            $directory = dirname($browse);
        }
        else
        {
            $directory = $browse;
        }
    }
    else
    {
        $directory = dirname(__FILE__).'/..';
    }
     
    $iter = new RecursiveIteratorIterator(
         new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::KEY_AS_FILENAME),
         RecursiveIteratorIterator::SELF_FIRST
    );
     
    echo html($directory).'<br/><br/>';
    echo get_link('', realpath($directory.'/..'), '..');
     
    foreach($iter as $entry)
    {
        if($entry->isDir())
        {
            $type = 'folder';
        }
        else
        {
            $type = 'file';
        }
        $spacing = str_repeat("&nbsp;", 3*$iter->getDepth());
        echo get_link($spacing, $entry->getRealPath(), $entry);
    }
     
     
    function html($string)
    {
        return htmlentities($string, ENT_QUOTES, 'ISO-8859-1');
    }
     
    function get_link($spacing, $realpath, $label)
    {
        if(is_dir($realpath))
        {
            $type = 'folder';
        }
        else
        {
            $type = 'file';
        }
     
        return sprintf(
            '<div class="%s">%s<a title="Voir" href="?browse=%s">%s</a></div>'."\n",
            $type,
            $spacing,
            base64_encode($realpath),
            $label);
    }

Discussions similaires

  1. [XL-2007] Créer des liens sur les formes et verrouiller des formes
    Par kopax dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/08/2011, 11h23
  2. Réponses: 5
    Dernier message: 29/03/2011, 10h33
  3. Éviter les copier coller des tests sur les sessions
    Par frboyer dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2009, 14h17

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