8796 sujets

Développement web côté serveur, CMS

Bonjour à tous,
Déjà je me présente je me nomme Sarah, je suis étudiante en informatique dans la région de la haute vienne.
Je me suis inscrite sur votre forum car une amie m'as parlé de vous.

Donc je vient aujourd'hui car j'ai un soucis pour réaliser une arborescence.

J'ai réalisé se code:

<html>
	<head>
		<title>Explorateur de fichier</title>
	</head>
	<body>
		<form name="Explorateur" action="explorateur.php">
			<center><h2>Explorateur de Fichiers</h2>
				<?php
					session_start();
					
					$dossier_chemin ="Explorateur/Cours";
					$_SESSION["parent"]="Explorateur/Cours";
					$dossier = opendir ($_SESSION["parent"]);
					$fin = false;
					
					print ("<TABLE border='1' align='center' cellpadding='5%'>");
						print ("<th>Dossier Parent</th>");
						print ("<th>Fichier</th>");
						print ("<th>Droits</th>");
						print ("<tr><td>Cours</td><td>..</td></tr>");
						while($fin == false)
						{
							$fichier_nom = readdir ($dossier);
							if($fichier_nom == '')
							{
								$fin = true;
							}
							
							$fichier_chemin = $dossier_chemin.'/'.$fichier_nom;
							
							if (($fichier_nom != ".") && ($fichier_nom != ".."));
							if(is_dir($fichier_nom) !=1);

							if(filetype($fichier_chemin) == 'dir')
							{
								$_SESSION["dossier"]=$fichier_chemin;
								$sous_dossier = opendir ($_SESSION["dossier"]);
								$sous_fichier_nom = readdir ($sous_dossier);
								$fichier_chemin = $fichier_chemin.'/'.$sous_fichier_nom;
								if (($sous_fichier_nom != ".") && ($sous_fichier_nom != ".."));
								if(is_dir($sous_fichier_nom) !=1);
								print ("<tr><td></td><td><a href='$fichier_chemin' target='_blank'>$sous_fichier_nom</a></td></tr>");
							}
							
							print ("<tr><td></td><td><a href='$fichier_chemin' target='_blank'>$fichier_nom</a></td></tr>");
						}
					print ("</TABLE>");
				?>
			</center>
		</form>
	</body>
</html>


Je ne suis pas très douée en PHP.
Mon soucis c'est que je n'arrive pas à ouvrir le contenu de mes sous-dossiers, si vous avez une idée je vous en serais très reconnaissante.

Bonne après-midi à tous.

Cordialement.
Modifié par etudiante87 (16 Mar 2010 - 08:14)
Salut,

Plutôt que d'utiliser le triplet opendir () / readdir () / closedir (), regarde du côté de la fonction scandir (), qui est bien plus pratique et retourne un tableau, que tu peux explorer avec une boucle foreach et avec n'importe quelle fonction permettant de manipuler un tableau.
scandir() est très puissant en effet, mais malheureusement pas accessible sous PHP4 (uniquement PHP5 et +)

Sinon tu peux aussi utiliser une fonction récursive à qui tu fournit en paramètre le nom du dossier à explorer.. comme ça tu t'embête pas à réécrire 2 fois un opendir() et readdir()

:)
Merci pour vos réponses, j'ai remarqué que mon code ne fonctionnais pas du tout comme il fallait donc j'ai changer de vision et essayé un nouveau code.

Le voici:

<?php

session_start();

$_SESSION['parent'] = "Explorateur/";


?>

<html>
	<head>
		<title>Explorateur de fichier</title>
	</head>
	<body>
		<form method="POST">
			<center><table border="3px">
				<tr border="1px">
					<td >Dossier Parent</td>
					<td>Fichiers</td>
					<td>Droits</td>
				</tr>
				<tr border="1px">
					<td ><?php echo $_SESSION['parent']; ?></td>
					<?PHP
						if ($dir = @opendir($_SESSION['parent'])) 
						 {
							while (($file = readdir($dir)) !== false) 
							{
							  if($file != ".." && $file != ".")
							   {
							   $filelist[] = $file;
					?>
					<td><?php
						echo $filelist;
					?></td>
					<?php
								}
							} 
							closedir($dir);
						 }
						 //Test a faire pour ne pas avoir d'erreur si il n'y a pas d'image dans le dossier
						 if(sizeof($filelist) != '0') {
						  sort($filelist);
						 }
					?>
					<td></td>
				</tr>
			</table></center>
		</form>
	</body>
</html>


Mais encore une fois ça ne fonctionne pas Smiley bawling , ma liste ne s'affiche pas mais affiche "array".

Je commence à désespérer, ça fait plus d'une semaine que je suis sur cette arborescence.
Evidemment que ça affiche "Array" ; il y a un $filelist[] = $file; et juste derrière tu met echo $filelist;

Je pense qu'un echo $file serait mieux adapté ^^
salut

plutôt :

if(sizeof($filelist) !== 0) ou mieux if(count($filelist) > 0)

et puis supprimer l'affichage des erreurs par l'arobase c'est...une erreur Smiley cligne
Modifié par keran (15 Mar 2010 - 11:49)
Bonjour,

Merci beaucoup pour vos réponses, mais ça ne fonctionne toujours pas, j'ai du changer encore de code car ça ne convenais pas au prof.

Voici mon code:

<html>
	<head>
		<title>Explorateur de fichier</title>
	</head>
	<body>
		<form name="Explorateur" action="explorateur1.php">
			<center><h2>Explorateur de Fichiers</h2>
				<?php
					if($source = "Explorateur/")
					{
						$source = "Explorateur";
					}
					else
					{
						$nom = $fichier_nom;
						$source = "Explorateur/".$nom;
					}
					
					echo $source;
					$dossier = opendir ($source);
					$fin = false;
					
					print ("<TABLE border='1' align='center' cellpadding='5%'>");
						print ("<th>Dossier Parent</th>");
						print ("<th>Fichier</th>");
						print ("<th>Droits</th>");
						print ("<tr><td>Cours</td><td>..</td></tr>");
						
						while($fin == false)
						{
							$fichier_nom = readdir ($dossier);
							
							if($fichier_nom == '')
							{
								$fin = true;
							}

							$source = "Explorateur/".$fichier_nom;
							
							if (($fichier_nom != ".") && ($fichier_nom != ".."));
							if(is_dir($fichier_nom) !=1);
							
							
							if(filetype($source) == 'dir')
							{
								print ("<tr><td></td><td><a href='Explorateur/$fichier_nom'>$fichier_nom</a></td></tr>");
								$source = "Explorateur/".$fichier_nom;
							}
							else
							{
								print ("<tr><td></td><td><a href='$source' target='_blank'>$fichier_nom</a></td></tr>");
							}
						}
						
					print ("</TABLE>");
					
						echo $source;
				?>
			</center>
		</form>
	</body>
</html>



Mes fichiers qui se trouve à la racine s'ouvre bien, mais dés que je sélectionne un dossier il me met :

Forbidden

You don't have permission to access /Explorateur/Explorateur/Cours/ on this server.


Il ne boucle pas dans ma page explorateur1.php, il prend le chemin de mes fichiers.

Je ne sais plus quoi faire et le prof veut un code un peu comme celui ci.

Merci d'avance si vous avez une solution pour qu'il boucle sur ma page explorateur1.php

Bonne fin de matinée.
Ben oui mais si nos solutions ne conviennent pas ça va être fastidieux puisque...

côté html :
* tu n'utilises pas de doctype.
* tu utilises des éléments obsolètes de mise en forme (<center>) au lieu du css.
* tu utilises des attributs obsolètes de mise en forme (border, align...) au lieu du css.
* tu utilises un formulaire sans INPUT submit (donc qui ne sert à rien).
* ...

côté php :
* tu utilises des variables non déclarées ($source, $fichier_nom).
* tu te trompes dans ton test d'égalité et tu fais une affectation : ce n'est pas
if($source = "Explorateur/")
mais
if($source == "Explorateur/")
* tu fais 2 tests inutiles puisque tu termines les lignes par un point-virgule au lieu d'ouvrir une accolade
if (($fichier_nom != ".") && ($fichier_nom != ".."));
if(is_dir($fichier_nom) !=1);
* ...
Merci pour tes réponses.
Pour la css, je vais faire ça quand mon code fonctionneras correctement.

J'ai fait les modifications dans le php comme tu l'as fait remarquer, mais je doit faire comment pour qu'à chaque fois que je sélectionne un dossier il boucle sur la même page et m'affiche les sous-dossiers et fichiers qu'il comporte?

J'ai mis un <form></form> pour faire ça mais je sais pas du tout comment faire pour que ça boucle.

Pour le INPUT SUBMIT, je pensais que c'était pas obligatoire.
Voici le code que je vient de faire:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
	<head>
		<title>Explorateur de fichier</title>
	</head>
	<body>
		<form name="Explorateur" action="explorateur1.php" style='align:center'>
			<h2 style='text-align:center'>Explorateur de Fichiers</h2>
				<?php
					$source = "Explorateur/Cours/";
					
					if($source == "Explorateur/Cours/")
					{
						$source = "Explorateur/Cours/";
						$dossier = opendir ($source);
					}
					else
					{
						$nom = $fichier_nom;
						$source = "Explorateur/Cours/".$nom;
						$dossier = opendir ($source);
					}
					
					echo $source;
					$fin = false;
					
					print ("<TABLE border='1' align='center' cellpadding='5%'>");
						print ("<th>Dossier Parent</th>");
						print ("<th>Fichier</th>");
						print ("<th>Droits</th>");
						print ("<tr><td>Cours</td><td>..</td><td></td></tr>");
						
						while($fin == false)
						{
							$fichier_nom = readdir ($dossier);
							
							if($fichier_nom == '')
							{
								$fin = true;
							}

							$source = "Explorateur/Cours/".$fichier_nom;
							
							if (($fichier_nom != ".") && ($fichier_nom != ".."))
							if(is_dir($fichier_nom) !=1)
							
							
							if(filetype($source) == 'dir')
							{
								print ("<tr><td></td><td><a href='explorateur1.php'>$fichier_nom</a></td></tr>");
								$source = "Explorateur/Cours/".$fichier_nom;								
							}
							else
							{
								print ("<tr><td></td><td><a href='$source' target='_blank'>$fichier_nom</a></td></tr>");
								$source = "Explorateur/Cours/";
							}
						}
						
					print ("</TABLE>");
					
						echo $source;
				?>
		</form>
	</body>
</html>



Il boucle sur la bonne page, mais il ne m'affiche pas les sous-dossiers et fichiers qui sont dans les dossiers.
Je sais qu'il y a un soucis au niveau du href pour les dossiers, mais je vois pas comment le modifier.

Excusez-moi pour toutes ces questions et ces demandes d'aides, mais je suis vraiment nulle en php.

Bon appétit à tous.
salut

a écrit :
Il ne boucle pas dans ma page explorateur1.php


$_SERVER['PHP_SELF'], utilise la page comme référence, à mettre dans l'action du formulaire et de tes liens et puis finalement, tu devrais virer ce formulaire, si il ne t'es pas imposé.

à la vue de ton code utilise plutôt un doctype transitionnel.

a écrit :
You don't have permission to access /Explorateur/Explorateur/Cours/ on this server.


c'est clair, non? pas de permission même en lecture.

si çà peut t'inspirer davantage, j'ai déterrer ce code, qui fonctionne Smiley cligne

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>explorateur de fichiers minimaliste</title>
<link rel="stylesheet" rev="stylesheet" type="text/css" href="css/style.css" media="screen"/> 
</head>
<body>
<div id="fond">
<div id="centre">
<h1>MinimalExplorer</h1>
<table cellspacing="2" cellpadding="5" style="width:100%;">
<tr>
<td colspan="2" class="infos">
<?php
// repertoire du fichier
$base = $_SERVER['DOCUMENT_ROOT'];
   if (isset($_GET['dossier'])) {
   	   $dossier = trim(strip_tags($_GET['dossier']));
   } else $dossier = '.';
   
   if (($dossier == '.') || ($dossier == '/') || ($dossier == '')) {
      echo 'racine';
   } else echo $dossier;
?>
</td>
</tr>
<tr>
<td>
<?php
$chemin = $base.'/'.$dossier;
   unset($fichiers);
   $r = opendir($chemin);

   while($fichiers[] = readdir($r));
   closedir($r);
   chdir($chemin);
   foreach($fichiers as $fichier) {
      if(is_dir($chemin.'/'.$fichier) && $fichier != '')
         if($fichier != '.' && $fichier != '..')
            echo "<div class=\"dossier\"><a href=\"?dossier=$dossier/$fichier\" title=\"ouvrir le dossier $fichier\">$fichier</a></div>".chr(10);
         else if($dossier!="/" && $dossier!="." && $dossier!="" && $fichier=="..")
            echo "<div class=\"dossier\"><a href=\"?dossier=".substr($dossier,0,strrpos($dossier,"/"))."\" title=\"ouvrir le dossier $fichier\">$fichier</a></div>".chr(10);
   }
?>
</td>
<td>
<?php
$nb=0;
   $taille = 0;
   foreach($fichiers as $fichier)
      if(!is_dir($chemin.'/'.$fichier) && $fichier != ''){
         $nb++;
         $taille += filesize($fichier);
         $info = pathinfo($fichier);
         echo $fichier.'</div>'.chr(10);
      }
?>
</td>
</tr>
<tr>
<td colspan="2" class="infos">
<?php
printf("%d fichiers - %.0f ko - %.0f Mo libres",$nb,$taille/1024,(disk_free_space($chemin))/1048576);
?>
</td>
</tr>
</table>
</div>
</div>
</body>
</html>
Merci pour ce code, je pense qu'il va bien m'aider, il faudras juste que je le modifie pour qu'il m'affiche aussi les fichiers pour que je puisse les ouvrir.

Je vais tester ça et voir.
Merci le code est parfait, j'ai plus qu'à faire l'ouverture des fichiers et la mise en page.

Merci beaucoup.

Bonne journée à tous.
J'ai une dernière question pour mon arborescence, y a t-il un code qui pourrais me permettre de récupérer les droits de chacun de mes dossiers et de mes fichiers?

Merci d'avance.