Gestionnaire de fichiers en php
killermano66
Messages postés
233
Date d'inscription
Statut
Membre
Dernière intervention
-
pyschopathe Messages postés 1974 Date d'inscription Statut Membre Dernière intervention -
pyschopathe Messages postés 1974 Date d'inscription Statut Membre Dernière intervention -
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 :
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.
@+ ;)
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:
- Gestionnaire de fichiers en php
- Gestionnaire de fichiers - Télécharger - Gestion de fichiers
- Gestionnaire de périphérique - Guide
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
- Fichiers epub - Guide
7 réponses
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.
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.
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.
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 :
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.
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.
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 ;)
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 ;)
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.
Je trouve que le tuto est bien détaillé et il devrait t'apporter les compétences suffisantes pour faire ce que tu veux.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon, j'ai a peu prés saisis le principe et j'en suis venu à ce script :
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 ;)
//---------------------------------------------------------------------------- // 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 ;)
Bonjour à tous,
Je vous met le code direct et je vous explique en dessous.
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 :
En espérant trouver de l'aide. Je vous remercis à l'avançe ;)
@+
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 ;)
@+
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.
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.