Gérer une arborescence de fichiers en PHP / AJAX avec administration
Par jaycreation le mardi, août 31 2010, 16:17 - php - Lien permanent
Basé sur l’excellent JqueryFileTree, je vous propose une petite application PHP/AJAX à greffer à votre site web pour gérer une arborescence de fichier.
Vous pourrez donc, en paramétrant juste un fichier, visualiser le contenu d’un dossier et de ses sous dossiers, créer ou supprimer des dossiers, ajouter des fichiers, les supprimer, les renommer, les mettre à jour….
Installez dès maintenant le plugin.
Arborescence PHP AJAX avec administration

- Tout d’abord, télécharger le fichier zip : Script de gestion d’une arborescence de fichier en PHP Ajax
Décompactez le et copiez le à l’emplacement où vous souhaitez l’utiliser. - Pour installer le script vous pouvez soit ajouter vos codes graphiques au fichier document.php, et changer les paramètres du fichier parameters.php
- Sinon, recopiez les codes php et javascript de la page document.php sur votre page.
Dans le corps de la page copiez le code suivant à l’endroit ou vous souhaitez voire apparaître les erreurs :
//affichage des messages d'erreurs
if($message!=""):
echo "<br /><div class="message">".$message;."</div>";
endif;
Puis ajoutez une div avec l’id=”file” ou vous voulez voir apparaître l’arborescence
Ensuite ouvrez le fichier parameters.php et changer les paramettres en fonctions de vos besoins.
///////////////////////////////////
// dossier racine :
// dossier ou se trouve la racine de votre site
/////////////////////////////////
if(!defined('RACINE'))
define("RACINE","/Users/monSite/Sites/");
///////////////////////////////////
// emplacement des dossiers :
/////////////////////////////////
if(!defined('DOSSIER'))
define("DOSSIER", "PHPArbo/" );
$path_gestion_dossier = RACINE.DOSSIER;
if(!defined('PATH_GESTION_DOSSIER'))
define("PATH_GESTION_DOSSIER", $path_gestion_dossier );
///////////////////////////////////
// extensions autorisées :
/////////////////////////////////
if(!defined('EXTENSIONS'))
define("EXTENSIONS","'.doc', '.xls', '.pdf', '.ppt', '.txt', '.rtf', '.docx', '.xlsm'");
////////////////////////////////////////////////////////////
// adresse de rediraction en cas d'erreur sur les actions :
//////////////////////////////////////////////////////////
if(!defined('LOCATION_ERREUR'))
define("LOCATION_ERREUR", "/404.php");
A NOTER :
Par soucis de sécurité, les dossiers de premier niveau et les dossiers contenant d’autres dossiers ne peuvent pas être supprimées.
Les dossiers commençant par un . ne sont pas affichés
Les noms de fichiers sont transformés via un slugify pour éviter les problèmes au téléchargement,
on enlève donc les caractères spéciaux et les accents.
A faire : ne fonctionne pas si les noms de dossiers ont des caractères spéciaux. (mais fonctionne avec les ’ dans les noms de fichiers)
Contenu du .ZIP :
- Action_document_enr.php : gère les actions administrateur
- document.php : gère l’affichage de l’arborescence, c’est en réalité le fichier contenant.
- /icones : l’ensemble des images nécessaires
- jquery-1.2.1.pack.js : Version 1.2.1 de Jquery, vous pouvez la remplacer par la version utilisée par votre site si nécessaire.
- JqueryFileTree.css : les css d’affichage de l’arborescence
Commentaires
Bonjour,
Merci tout d’abord pour ce script et tout ce qui va avec c’était vraiment parfaitement ce dont j’avais besoins. Je rencontre cependant un problème. Lorsque j’essai d’ajouter des fichiers au format PDF, il considère que le format de fichier n’est pas bon. Aurais tu une idée de ce qui peu poser problème ?
Bonjour et merci pour le commentaire.
Pour des besoins personnels je n’avais pas autorisé les fichiers .pdf en upload.
Dans le fichier : parameters.php vérifie que pdf soit autorisé à la ligne :
if(!defined (‘EXTENSIONS’))
define (“EXTENSIONS”,”’.doc’, ‘.xls’, ‘.pdf’, ‘.ppt’, ‘.txt’, ‘.rtf’, ‘.docx’, ‘.xlsm’”);
Il est possible qu’il y ai une légère différence dans les extensions. .PDF au lieu de .pdf par exemple. Si c’est le cas, il faudra que je passe tout en minuscule pour le contrôle.
As-tu le problème avec d’autres fichiers ?
Tiens moi au courant.
fauti-il changer des configuration dans apache php ou mysql ?
en local, je visualise les fichiers mais je n’ai pas les icônes pour les modifier ou supprimer ou même créer un dossier.
je suis safari et firefox en local avec mac os X.
que faire ?
Pour la gestion des dossiers pur, il y a un contrôle des droits. Il faut créer une variable de session $_SESSION“admin_gestionDossier” pour y avoir accès (pour eviter qu’on puisse tout supprimer trop facilement) ou enlever les conditions :
//ajout des boutons d’admin
if($_SESSION“admin_gestionDossier”){
merci beaucoup ça fonctionne reste à le mettre dans le serveur distant. J’ai remarquer que l’on ne peut pas ajouter de dossier ou fichier dans la racine.
Effectivement le dossier racine est protégé. On ne peux pas le supprimer non plus sinon on ne pourrai pas le recréer.
Ca peut se modifier mais je conseil de le créer à la main pour éviter les gros problemes.
Si vous faites des modifis dans le code, testez plutôt deux fois qu’une et sur un serveur avec les mêmes paramètres que le serveur de prod (surtout important pour linux et windows) pour ne pas risquer de supprimer tous les fichiers du serveur… ça serai ballot…
J’avais modifié le script de base pour le faire pointer sur des dossiers particuliers en fonction des droits utilisteurs.
Ca peut être une bonne solution puor ne pas voir le répertoire racine
une question quel nom de dossier racine il faut mettre dans le serveur distant ?
‘www/’ ou “http://monsite.fr/”
dans mon cas, je ne vois pas les fichiers sur documents.php
Ni l’un ni l’autre, il faut vraiment voir a partir de la racine du serveur.
Vous pouvez le retrouver simplement en allant dans votre FTP, sur filezilla il y a l’adresse complète dans la barre de droite
sur filezilla j’ai ” /www ” à droite
Ah oui ça dépend des accès au serveur.
Sinon il y a la fonction
$_SERVER‘DOCUMENT_ROOT’ qui peux vous donner la racine en question.
Faire un echo dans un fichier, copier le retour et le supprimer immédiatement.
Sinon on doit pourvoir l’utiliser directement dans le script je pense, ça ne devrait pas poser de problemes
j’ai faits ce que tu mas dit, maintenant j’ai un message d’erreur :
Fatal error: Call to undefined function: scandir() in /___/PHPArbo/jqueryFileTree.php on line 41
faut t’il que le dossier à modifier soit dans le dossier PHParbo ?
je suis chez ovh
Chez OVH, la version de PHP est 4.3.
Il faut passer en 4.5.
Pour cela il faut ajouter
SetEnv PHP_VER 5_TEST
dans un fichier .htacess à la racine de ton serveur
Normalement ça devrait te permettre d’accéder à la fonction
http://guide.ovh.com/Php5ChezOvh
Merci beaucoup.
le script à l’air de fonctionner, l’arborescence, sauf que j’ai un message d’erreur sur la page :
Notice: Undefined index: admin in _/PHPArbo/jqueryFileTree.php on line 60
ajouter un dossier fonctionne
quand je veux ajouter un fichier pdf ou doc , il me affiche :
Le fichier envoyé n’est pas autorisé.
Seul les ‘.jpg’, ‘.gif’, ‘.GIF’, ‘.pdf’, ‘.PDF’,’.doc’, ‘.xls’, ‘.pdf’, ‘.ppt’, ‘.txt’, ‘.rtf’, ‘.docx’, ‘.xlsm’ sont autorisé.
J’ai rajouter l’extension pdf ds le fichier de parametre
Pour l’erreure à la ligne 60.
J’initialisais par défaut la variable de session
$_SESSION‘admin’=false;
Et si l’utilisateur à les droits admin je le passait à true.
Sinon pour corriger le bug plus proprement tu peux remplacer la ligne 60 par
if(isset($_SESSION‘admin’) && $_SESSION‘admin’==true){
Pour le problème avec les extesions
Est ce qu’elles ont bien été ajouté avec les ’ autour du nom ?
ex : ‘.xls’
bonjour et GG pour le travail accompli!
J’ai réussi à installer et a faire fonctionner ce plugin avec un peu de mal il faut bien l’avouer ^^
Il affiche maintenant correctement les dossiers et les sous-dossiers ainsi que les fichiers contenus.
Par contre quand je veux afficher un fichier en cliquant dessus l’adresse indiqué dans le chemin en correspond pas.
par exemple si mon fichier se trouve à cet emplacement:
www/monsite/dossier-test/rep1/subrep1/monfichier.pdf
quand je clique sur le lien j’arrive à cet emplacement:
www/monsite/rep1/subrep1/monfichier.pdf
Le dossier-test (celui dans lequel j’ai tous mes sous-dossiers) n’apparait pas dans l’adresse du lien, alors qu’il apparait bien sur l’affichage de l’arborescence.
Je ne sais pas si c’est très clair ;(
en bref:
Où puis-je trouver les paramètres des liens des fichiers?
En tout cas THX pour le boulot!!
Salut et merci pour cette arborescence superbe!
Je rencontre toutefois un problème quand je cherche a ouvrir un fichier. Je ne sais pas pourquoi mais une partie de l’url des fichiers est tronquée au niveau de l’ancre.
Le nom du serveur, du site, des sous-dossiers et du fichier sont bon mais il manque toujours le nom du dossier général qui contient touts mes dossiers (un dossier test créé uniquement pour l’essai).
Comment puis-je régler ce problème en changeant l’adresse des liens ?
Et merci pour tout!
@BLJC
Normalement il suffit de changer l’adresse dans les paramettres
essaie de mettre
define(“DOSSIER”, “test/PHPArbo/” );
@MarMoussa
effectivement ce problème m’à déjà été signalé.
Il y a un problème dans cette version dans le fichier
jqueryFileTree.php à la ligne 148 :
$dossier_fichier = str_replace(PATH_GESTION_DOSSIER,”“,$_POST‘dir’);
Essayez de la remplacer par
$dossier_fichier = str_replace(PATH_GESTION_DOSSIER,$_SERVER“SERVER_NAME”.”/”.DOSSIER,$_POST‘dir’);
Ca devrait fonctionner mieux. Sinon c’est là qu’il faut faire un réglage.
Si quelqu’un trouve une solution qui fonctionne sur tous les serveurs n’hésitez pas à me la communiquer que je puisse la mettre à jour dans le script