Gestionnaire de fichiers en php

Fermé
killermano66 Messages postés 233 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 novembre 2010 - 11 mars 2009 à 15:36
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 20 mars 2009 à 18:45
Bonjour,

J'essai de réaliser un gestionnaire de fichier en php. Celui-ci à pour but de me monter des partitions distante grâce à samba et sa commande smbmount.

Le script marche trés bien et me liste correctement les dossier des partitions que je demandes.
En revanche, il n'est pas capable de me lister le contenue des sous dossier, du moins de façon dynamique.

La seule idée que j'ai est de créer une portion de code pour chaque sous dossier etc ... mais ce n'est pas viable car je ne peux pas prévoir si l'utilisateur va ou non créer dans un futur proche ou lointain de nouveaux dossier.

Je chercher donc une façon dynamique de gérer mes fichier, une façon qui prendrait en compte le contenue de mes sous dossier etc...

J'ai recherché du côtés de la méthode $_GET mais je n'arrives pas a en sortir une conclusion exploitable. Je vous laisse le code en dessous :

<?php
session_start();
$_SESSION['login']=$_POST['login'];
$login = $_SESSION['login'];
$psw = $_POST['psw'];

//----------------------------------------------------------------------------------------------------
// Création des différents dossiers
//----------------------------------------------------------------------------------------------------
@mkdir("/home/$login" ,0777);
exec('mkdir /home/marchann/P');
exec('chmod -R 777 /home/marchann/P'); 
@mkdir("/home/$login/K/" ,0777);

//----------------------------------------------------------------------------------------------------
// Montage des partitions / Identification
//----------------------------------------------------------------------------------------------------
exec("smbmount //xxx.xxx.xxx.xx/p$login /home/$login/P -o username=$login%$psw netbios=//xxx.xxx.xxx.xx/p$login");
exec("smbmount //xxx.xxx.xxx.xxx/STIDETU /home/$login/K -o username=$login%$psw netbios=//xxx.xxx.xxx.xxx/STIDETU");

echo "<b>Vous êtes identifié sous :</b> ";
echo $_SESSION['login'];
echo ('<br />+ <a href="deconection.php">Deconnection</a><br /><br />');

//----------------------------------------------------------------------------------------------------
// Liste le contenue de P
//----------------------------------------------------------------------------------------------------
echo ('<fieldset><legend><b>Contenue de votre lecteur P: </b></legend><br />');
echo ('<table align="center" valign="top">');
//Private
$nb_fichier = 0; //Initialisation du compteur de fichier/dossiers à 0
if($dossier = @opendir("./$login/P/Private/"))
{
	echo '<tr><td>';
	echo ('<fieldset><legend><b>Private</b></legend><br />');
	echo ('+ <a href="create_dossierP.php" alt="Créer un nouveau dossier">Créer des nouveaux dossiers</a><br />');
	echo ('+ <a href="ajouterPprivate.php" alt="Uploader un fichier dans P">Uploader des fichier</a><br />');
	echo ('+ <a href="supressionP.php" alt="Supprimer des fichiers dans P">Supprimer des fichiers</a><br /><br />');
		while(false !== ($fichier = readdir($dossier)))
		{
			if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
			{
				$nb_fichier++; //On incrémente le compteur de un
				echo '<li>';
				echo '<a href=';
				echo "./$login/P/Private/$fichier>"; 
				echo $fichier;
				echo '</a></li>';
			} //end if 
		} //end boucle

	echo '<br />';
	echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s)/dossier(s) dans <b>P/Private/</b></fieldset></td><br /><br />'; 
	closedir($dossier); 
} 

//Travail
echo '<td>';
$nb_fichier = 0;
if($dossier = @opendir("./$login/P/Travail/"))
{
	echo ('<fieldset><legend><b>Travail</b></legend><br />');
	echo ('+ <a href="create_dossierP.php" alt="Créer un nouveau dossier">Créer des nouveaux dossiers</a><br />');
	echo ('+ <a href="ajouterPtravail.php" alt="Uploader un fichier dans P">Uploader des fichiers</a><br />');
	echo ('+ <a href="supressionP.php" alt="Supprimer des fichiers dans P">Supprimer des fichiers</a><br /><br />');
	
		while(false !== ($fichier = readdir($dossier)))
		{		
			if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
			{
				$nb_fichier++; //On incrémente le compteur de un
				echo '<li>';
				echo '<a href=';
				echo "./$login/P/Travail/$fichier>"; 
				echo $fichier;
				echo '</a></li>';
			} //end if 
		} //end boucle
	echo '<br />';
	echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s)/dossier(s) dans <b>P/Travail/</b><br /><br />'; 
	closedir($dossier); 
} 
echo '</td></tr></table></fieldset>';

//----------------------------------------------------------------------------------------------------
// Liste le contenue de K
//----------------------------------------------------------------------------------------------------
$nb_fichier = 0;
if($dossier = @opendir("./$login/K/"))
{
	echo ('<fieldset><legend><b>Contenue de votre lecteur K: </b></legend><br />');
		while(false !== ($fichier = readdir($dossier)))
		{
			if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
			{
				$nb_fichier++; //On incrémente le compteur de un
				echo '<li>';
				echo '<a href=';
				echo "./home/$login/K/$fichier>";
				echo $fichier;
				echo '</a></li>';
			} //end if
		} //end boucle
	echo '<br />';
	echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s)/dossier(s) dans votre lecteur <b>K</b></fieldset>'; 
	closedir($dossier); 
}//END
?>



A savoir que les variable $login et $psw sont transmise par un formulaire. Merci bien en espérant que quelqu'un ai une idée.

@+ ;)
A voir également:

7 réponses

pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
11 mars 2009 à 15:56
Je n'ai pas lu ton code, mais pour lister le contenu des dossiers de manière dynamique, un peu d'AJAX serait utile : au clic sur le dossier, tu appelles ton script de listing sur ce dossier.
0
killermano66 Messages postés 233 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 novembre 2010 41
11 mars 2009 à 15:58
Merci de ta réponse.
Le soucis c'est que je ne connais pas du tout l'AJAX donc je cherche une façon de le faire en php même si ça a l'air compromis.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
11 mars 2009 à 16:05
Ce ne sera pas possible en PHP de manière dynamique puisque ta page est générée de manière statique. À moins que tu ne veuilles lister le contenu de tous les dossiers récursivement avant d'afficher, mais ça pourrait être très long !
En gros ça ferait :
fonction lister( repertoire )
debut
  pour tous les fichiers f de repertoire faire
    afficher f.nom
    si f est un répertoire alors
      lister( f )
    finsi
  finpour
fin

C'est du pseudo-code, mais ça montre l'idée... En cas de nombreux dossiers et fichiers, l'exécution va être très longue et probablement inutile puisque l'utilisateur ne va pas se balader dans toute l'arborescence.

AJAX pour ce que tu veux faire n'est pas forcément très compliqué, je te conseille d'y jeter un coup d'oeil... Il te suffit d'appeler ton script lister.php avec en paramètre le chemin du répertoire à lister et de récupérer la liste des fichiers/dossiers. Pas si compliqué que ça en a l'air.
0
killermano66 Messages postés 233 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 novembre 2010 41
11 mars 2009 à 16:12
Ben disons que l'AJAX c'est pas faute d'avoir essayer mais ça reste un certains mystère pour moi. Je n'ai pas vraiment de mal avec des langage comme le C par exemple mais l'AJAX me parraît être un bordel monstrueux.

Ensuite peut être me suis-je mal documenter. Mais les bon tutos ne courent pas les rues d'aprés mes longues recherches.

Si tu as un site qui me permettrait de comprendre réellement le fonctionnement de l'AJAX, je suis bien entendue preneur.

Merci bien ;)
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
11 mars 2009 à 16:17
Jette un oeil à ce site : https://www.xul.fr/xml-ajax.html

Je trouve que le tuto est bien détaillé et il devrait t'apporter les compétences suffisantes pour faire ce que tu veux.
0
killermano66 Messages postés 233 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 novembre 2010 41
11 mars 2009 à 16:18
Ok, merci je lis ça dessuite.

@+
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
11 mars 2009 à 16:19
De rien, refais signe si tu as besoin d'aide, et n'hésite pas à poster la solution (parce que je suis sûr que tu vas trouver ^^), ça pourrait être utile à quelqu'un d'autre.
0

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

Posez votre question
killermano66 Messages postés 233 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 novembre 2010 41
11 mars 2009 à 16:50
Bon, j'ai a peu prés saisis le principe et j'en suis venu à ce script :

//----------------------------------------------------------------------------
// Test pour les divers navigateurs
//----------------------------------------------------------------------------

if(windows.XMLHttpRequest)
{
	xhr = new XMLHttpRequest(); //Pour firefox
}
else
{
	xhr = new ActiveXObject("Microsoft.XMLHTTP"); //IE
}

//----------------------------------------------------------------------------
//Attente de la réponse passage de l'état 1 à 4
//----------------------------------------------------------------------------
xhr.onreadystatechange = function()
{
	if(xhr.readyState == 4) //Si requete terminé
	{
		if(xhr.status == 200)
		{
		//La requête est prête à être envoyée	
		}
		else
		{
		// Pas bon, on affiche une erreur 	
		}
	}
	else
	{
		//Attente de la réponse
	}
}


Bon ok, il ne fait rien mais je pense qu'il n'est pas faux.
Maintenant je ne vois pas quoi rajouter ici :

if(xhr.status == 200)
{
//La requête est prête à être envoyée
}

Pour que la page aille chercher les données sur un serveur distant.
Voilà voilà si tu as des remarques.

Merci ;)
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
20 mars 2009 à 18:36
le xhr.status == 200 signifie que le serveur a renvoyé le code 200 OK, donc que la réponse a été reçue sans erreur (si tu essaie d'accéder à une page inexistante, tu recevras le célèbre 404 NOT FOUND).
0
killermano66 Messages postés 233 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 novembre 2010 41
12 mars 2009 à 09:32
Bonjour à tous,

Je vous met le code direct et je vous explique en dessous.

<?php
session_start();
$_SESSION['login']=$_POST['login'];
$login = $_SESSION['login'];
$psw = $_POST['psw'];
?>

<html>
<head>

<script language="javascript">
	function submitForm()
	{ 
		var req = null; 

		document.getElementById("zone").innerHTML = "Started...";
 
		if (window.XMLHttpRequest)
		{
 			req = new XMLHttpRequest();
			if (req.overrideMimeType) 
			{
				req.overrideMimeType('text/xml');
			}
		} 
		else if (window.ActiveXObject) 
		{
			try {
				req = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e)
			{
				try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
	        	}



		req.onreadystatechange = function()
		{ 
			document.getElementById("zone").innerHTML = "Wait server...";
			if(req.readyState == 4)
			{
				if(req.status == 200)
				{
					document.getElementById("zone").innerHTML  = "Received:" + req.responseText;	
				}	
				else	
				{
					document.getElementById("zone").innerHTML="Error: returned status code " + req.status + " "                                       + req.statusText;
				}	
			} 
		}; 
		req.open("GET", "connection2.php", true); 
		req.send(null); 
	} 
</script>


</head>
<body>

<?php
//----------------------------------------------------------------------------------------------------
// Création des différents dossiers
//----------------------------------------------------------------------------------------------------
@mkdir("/home/$login" ,0777);
exec('mkdir /home/marchann/P');
exec('chmod -R 777 /home/marchann/P'); 
@mkdir("/home/$login/K/" ,0777);

//----------------------------------------------------------------------------------------------------
// Montage des partitions / Identification
//----------------------------------------------------------------------------------------------------
exec("smbmount //xxx.xxx.xxx.xx/p$login /home/$login/P -o username=$login%$psw netbios=//xxx.xxx.xxx.xx/p$login");
exec("smbmount //xxx.xxx.xxx.xxx/STIDETU /home/$login/K -o username=$login%$psw netbios=//xxx.xxx.xxx.xxx/STIDETU");

echo "<b>Vous êtes identifié sous :</b> ";
echo $_SESSION['login'];
echo ('<br />+ <a href="deconection.php">Deconnection</a><br /><br />');

//----------------------------------------------------------------------------------------------------
// Liste le contenue de P
//----------------------------------------------------------------------------------------------------
echo ('<fieldset><legend><b>Contenue de votre lecteur P: </b></legend><br />');
echo ('<table align="center" valign="top">');
//Private
$nb_fichier = 0; //Initialisation du compteur de fichier/dossiers à 0
if($dossier = @opendir("./$login/P/Private/"))
{
	echo '<tr><td>';
	?>
	<?php
	echo '<div id="zone">';
	echo ('<fieldset><legend><b>Private</b></legend><br />');
	echo ('+ <a href="create_dossierP.php" alt="Créer un nouveau dossier">Créer des nouveaux dossiers</a><br />');
	echo ('+ <a href="ajouterPprivate.php" alt="Uploader un fichier dans P">Uploader des fichier</a><br />');
	echo ('+ <a href="supressionP.php" alt="Supprimer des fichiers dans P">Supprimer des fichiers</a><br /><br />');
		while(false !== ($fichier = readdir($dossier)))
		{
			if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
			{
				$nb_fichier++; //On incrémente le compteur de un
				echo '<li>';			
				?>

				<a href="#" onclcik="submitForm()">
				<?php echo $fichier; ?></a>				
				</a></li>


			<?php // On relançe php
			} //end if 
		} //end boucle
(suite du code ... )


Donc, ce code fonctionne trés bien, je crée des liens qui me listent le contenu de mon répertoire P/Travail grace à une boucle while. A chacun de ces lien j'ascocie la fonction AJAX submitForm() qui me permet de changer l'apparence de la page mère sans la recharger en incluant une autre page grâce à req.open("GET", "connection2.php", true);

Donc ceci est vraiment un test car mon but est de charger le contenue des sous dossier de P/Travail grâce à cette même méthode, sans recharger la page et celà de façon dynamique.
Mais j'avous bloquer, je ne vois pas comment faire pour récupérer les donnée d'un serveur distant et les afficher grâce à AJAX.
Récupérer un fichier et l'afficher est une chose, récupérer tous le comptenu d'un dossier pour l'afficher en est une autre.

Je vous fait un schéma de mon P/Travail :
P/Travail :
     +Eudora (dossier)
          - Fichier 1
          - Fichier 2
          - Fichier 3
          - Fichier 4
     +FireFox (dossier)
          - Fichier 1
          - Fichier 2
          - Fichier 3
          - Fichier 4
          - Dossier 1 
     +Netscape (dossier)r)
     +fichier.txt

etc ...


En espérant trouver de l'aide. Je vous remercis à l'avançe ;)

@+
0
killermano66 Messages postés 233 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 novembre 2010 41
13 mars 2009 à 08:15
UP.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
20 mars 2009 à 18:45
Il faudrait tout d'abord que tu nous indique ce que contient ta page connection2.php.

De la manière dont je vois les choses, il faut que cette page prenne en paramètre le chemin du dossier à lister (qu'il soit relatif : / correspond à ton PdT, ou absolu). Elle retourne ensuite un fichier xml ou texte contenant la liste des fichiers en précisant s'il s'agit d'un dossier ou non.
0