PHP, affichage dossiers, pb \ et /

Résolu/Fermé
redyom Messages postés 19 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 7 janvier 2008 - 2 nov. 2007 à 10:42
 redyom - 17 juil. 2009 à 12:54
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 :)
A voir également:

12 réponses

redyom Messages postés 19 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 7 janvier 2008
2 nov. 2007 à 10:46
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
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 449
2 nov. 2007 à 10:47
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
redyom Messages postés 19 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 7 janvier 2008
2 nov. 2007 à 10:49
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
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 449
2 nov. 2007 à 11:04
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
redyom Messages postés 19 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 7 janvier 2008
2 nov. 2007 à 11:21
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
Bonjour,

Bout de code fort sympa, qui me rend service!

Henri
0
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 449
2 nov. 2007 à 11:29
N'oublie aps de mettre ton sujet en tant que résolu :).
0
redyom Messages postés 19 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 7 janvier 2008
2 nov. 2007 à 11:40
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
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 449
2 nov. 2007 à 12:15
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
redyom Messages postés 19 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 7 janvier 2008
2 nov. 2007 à 12:25
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
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 449
2 nov. 2007 à 12:35
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
redyom Messages postés 19 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 7 janvier 2008
2 nov. 2007 à 15:47
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
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
Salut!

Je suis plus là dessus depuis longtemps mais au final j'ai utilisé ce code là :

https://codes-sources.commentcamarche.net/

voilà :)
0