PHP, affichage dossiers, pb \ et /

Résolu
redyom Messages postés 19 Statut Membre -  
 redyom -
Bonjour tout le monde,

J'ai récupéré un bout de code car j'ai besoin d'afficher une arborescence avec mes dossiers, mes sous-dossiers et mes fichiers (et qu'on puisse ouvrir les fichiers).

Le code fonctionne mais les liens vers les fichiers ne fonctionnent pas car ça me met un slash au lieu d'un antislash ???

Là on peut voir le slash juste avant le "coucou.php" :)
c:\program files\easyphp1-8\www\tests\Dossiers\Trois dossier/coucou.php

Donc impossible d'ouvrir mes fichiers en cliquant sur ces liens.

J'ai essayé avec str_replace mais comme il s'agit de remplacer un / par un \ ça marche pô.

Voici mon code

  <?php
  function scan($rep)
  {
  	$dir = opendir($rep);
  	if($dir)
  	{
  		while (false !== ($f = readdir($dir)))
  		{
  			if(is_file($rep.$f))
 			 {
				echo '<a href="'.$rep.$f.'"><span class="fichier">|__'.$f.'</span></a><br />';
  			 }
		    if(is_dir($rep.$f) && $f!=".." && $f!="." )
  			 {
	  			echo '<ul><span class="dossier">'.$f.'</span><br />';
			    $new_dir=realpath($rep.$f);
   				scan("$new_dir/");
  			 }
        }
   }
  echo "</ul>";
 }
  scan("./");
?>


Si quelqu'un peut m'aider ça serait super sympa, je galère encore un peu en php :)
Configuration: Windows XP
Firefox 2.0.0.8

12 réponses

  1. redyom Messages postés 19 Statut Membre
     
    Euh en fait j'avai pas vu mais c'est encore plus chaint que ça :)

    Quand il liste les fichiers qu sont à la racine le lien est bon :
    par exemple
    http://127.0.0.1/tests/concatenation.php

    Mais pour tous les autres il me met le lien en partant de c:\program files etc etc...

    Bref, donc en gros il faudrait que je puisse avoir un lien de type http://127.0.0.1/dossier/fichier.php pour chaque fichiers de tous mes sous dossiers

    Voilà :)
    0
  2. Archeus01 Messages postés 1566 Date d'inscription   Statut Membre Dernière intervention   455
     
    Dans le navigateur, tu remarqueras que ce n'est pas des antislashs mais bel et bien des slash. Essaye d'ouvrir un fichier avec ton navigateur (fichier->ouvrir) et tu te retrouveras avec une adresse du genre :
    file:///C:/Documents%20and%20Settings/Administrateur/Mes%20documents/maths/parcoursLargeur.htm
    0
  3. redyom Messages postés 19 Statut Membre
     
    Salut,

    bah oui justement je m'en rend compte :)

    Comment ça se fait qu'il y ait des "problèmes" avec les slash et antislash, ça devrait pas être QUE des slash normalement si c'est des liens web ?
    0
  4. Archeus01 Messages postés 1566 Date d'inscription   Statut Membre Dernière intervention   455
     
    Le problème ne vient pas à mon avis des slash et antislash.

    Si tu arrives à ouvrir les fichiers qui sont dans le dossier test et pas les autres... Mauvaise gestion du PHP? Tu as du installer un logiciel qui "comprends le PHP". (logiciel type wamp). Hé bien avec WAMP, il ne gèrera sur mon PC que les fichiers PHP mis dans le répertoire adéquate.

    echo "<img src='photos/ordinateur.jpg'>"
    revient en fait chez moi à aller à C:\wamp\www\site\Photos\ordinateur.jpg

    Et évidemment, le programme ne fera comme si rien n'existe en dessous du dossier www
    [edit] Dés que j'essaye effectivement d'atteindre un fichier qui n'est plus dans le sous-dossier www, et je ne peux pas.
    Ton http://127.0.0.1 doit déjà correspondre, lui aussi, à un dossier sous lequel tu ne peux atteindre aucun fichier avec des commandes du style echo "<img src='../../../ordinateur.jpg'>".
    Par contre, si je met un lien direct echo "<img src='c:/ordinateur.jpg'>"; la oui sa marche <- Peut-être revoir ton code dans ce sens.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. redyom Messages postés 19 Statut Membre
     
    Re-salut :)

    Je crois que j'ai réussi, avec ce code là ça fonctionne
    <?php
    function scan($repert)
      {	
      	$dir = opendir($repert);
      	if($dir) // suite au commentaire
      	{
      		while (false !== ($f = readdir($dir))) //lecture du contenu ,prend en compte si le fichier est nommé 0 et n'arrete la boucle merci pour cette remarque très judicieuse :)
      		{
      			if(is_file($repert.$f))
     			 {
    				//echo '<span class="fichier">|__'.$f.'</span><br />';
    				echo '<a target="_blank" href='.$f.'>'.str_replace(".pdf","",str_replace("_"," ",$f)).'</a><br>';
      			 }
    		    if(is_dir($repert.$f) && $f!=".." && $f!="." ) // on regarde si il ya des sous répertoires si oui on recommence la fonction.
      			 {
    	  			echo '<ul><span class="dossier">'.$f.'</span><br />';
    			    $new_dir=realpath($repert.$f); ///chemin absolu du répertoire
       				scan("$new_dir/"); //fonction récurrente qui prend le chemin absolu du dossier et le scanne à nouveau.
      			 }
            }
       }
      echo "</ul>";
     }
    //Utilisation de la fonction
    scan('./');
    echo '<br><br>OK';
    ?>


    Je vais faire d'autres test mais j'ai bon espoir que ça marche enfin :)
    0
    1. quad
       
      Bonjour,

      Bout de code fort sympa, qui me rend service!

      Henri
      0
  7. Archeus01 Messages postés 1566 Date d'inscription   Statut Membre Dernière intervention   455
     
    N'oublie aps de mettre ton sujet en tant que résolu :).
    0
  8. redyom Messages postés 19 Statut Membre
     
    Arrrrggghhh, toujours pas résolu!!!!

    Je pensai que j'y étais mais non, toujours pas :)

    J'arrive enfin à afficher tout ce que je veux MAIS... les liens ne comportent pas les sous dossiers! Je n'ai plus de probleme de slash ou antislash, la liste des fichiers contenus dans les sous-dossiers est OK mais le lien zape le sous-dossier.

    Voici le code que j'ai maintenant :)

    <?php
    function scan($repert)
      {	
      
      $num_cont= mysql_fetch_array(mysql_query("SELECT cont_num, cont_pol, pol_nom, pol_id, comp_id, comp_nom, cont_comp FROM contrat, police, compagnies WHERE pol_id = cont_pol AND comp_id = cont_comp AND cont_id='".$_SESSION['extranetUser_contrat']."'")) or die (mysql_error());
      
      	$dir = opendir($repert);
      	if($dir) // suite au commentaire
      	{
      		while (false !== ($f = readdir($dir))) //lecture du contenu ,prend en compte si le fichier est nommé 0 et n'arrete la boucle merci pour cette remarque très judicieuse :)
      		{
      			if(is_file($repert.$f))
     			 {
    				//echo '<span class="fichier">|__'.$f.'</span><br />';
    				echo '<a target="_blank" href='.$num_cont['cont_num'].'/ATTESTATIONS/'.$f.'>'.str_replace(".pdf","",str_replace("_"," ",$f)).'</a>';
      			 }
    		    if(is_dir($repert.$f) && $f!=".." && $f!="." ) // on regarde si il ya des sous répertoires si oui on recommence la fonction.
      			 {
    	  			echo '<ul><span class="dossier">'.$f.'</span><br />';
    			    $new_dir=realpath($repert.$f); ///chemin absolu du répertoire
       				scan("$new_dir/"); //fonction récurrente qui prend le chemin absolu du dossier et le scanne à nouveau.
      			 }
            }
       }
      echo "</ul>";
     }
    //Utilisation de la fonction
    
    ?>
    <?php
    scan($num_cont['cont_num'].'/ATTESTATIONS/');
    echo '<br><br>OK';
    ?>


    Au final ça m'affiche :

    Dossier
    fichier.pdf <== lien cliquable

    Autre_dossier
    autre_fichier.pdf <== lien cliquable aussi

    Mais les liens zapent les sous-dossiers : j'ai ça comme lien http://127.0.0.1/Monsite/22551A2RT/ATTESTATIONS/fichier.pdf

    Alors que je devrai avoir http://127.0.0.1/Monsite/22551A2RT/ATTESTATIONS/Dossier/fichier.pdf

    Rholala j'aurai pas du essayer tous ces codes différents je m'y retrouve plus :)
    0
  9. Archeus01 Messages postés 1566 Date d'inscription   Statut Membre Dernière intervention   455
     
    Dans
    href='.$num_cont['cont_num'].'/ATTESTATIONS/'.$f.'>

    $f représente bien juste le nom du fichier ou j'ai mal compris ton code?

    Si tu remplaces ce morceau par
    href='.$num_cont['cont_num'].'/ATTESTATIONS/'.$repert.$f.'>'
    Sa fait n'importe quoi je pense mais vu que $f représente seulement le nom du fichier (selon moi, mais je suis pas sur), c'est normal qu'il n'y ait pas de sous-dossier
    0
  10. redyom Messages postés 19 Statut Membre
     
    Oui $f c'est le nom de fichier, mais justement j'ai essayé en mettant $repert.$f mais le lien devient :
    http://127.0.0.1/Monsite/22551A2RT/ATTESTATIONS/c:\program !!!!!

    Donc ouai ça fait n'importe quoi, ce qu'il faudrait c'est que je puisse différencier mes dossier/sous-dossiers et mes fichiers? que ce soit pas dans la même variable.
    0
  11. Archeus01 Messages postés 1566 Date d'inscription   Statut Membre Dernière intervention   455
     
    Oui.
    Une suggestion me vient en tête mais que tu n'es pas du tout obligé de suivre : dans un tableau avec un petit truc du genre $repert[$i]
    0
  12. redyom Messages postés 19 Statut Membre
     
    Oué je crois que je vais essayer quelque chose comme ça. Mais là ça commence à me prendre la tête, je vais me faire une petite fonction maison pour faire tout ça selon mon bon désir :) :) Je posterai mon code quand j'aurai réussi :)

    En tout cas merci beaucoup Archeus01 :)

    Bonne journée
    0
  13. lina22
     
    PHP, affichage dossiers, pb \ et /
    redyom, le vendredi 2 novembre 2007 à 10:42:33

    bonjour, je suis trés intéréssé par ton code j'ai eu bcp de probléme aussi pour afficher mes rép et sous rep tu peux m'expliquer stp comment ta fait si sa te dérange pas
    0