Explorateur php multi fonctions

Soyez le premier à donner votre avis sur cette source.

Vue 11 418 fois - Téléchargée 1 401 fois

Description

Cette source est un petit ensemble de classes PHP5 construisant un explorateur de fichiers. Je le poste aujourd'hui car, bien qu'il ne soit pas fini (j'ai encore tout un tas de fonctionnalites a lui ajouter), il est dores et deja fonctionnel avec les outils de base pour un explorateur de fichiers.
Il est appele tres simplement, un exemple est fourni.

PARTICULARITES(je rallongerai cette liste au fur et a mesure de mes mises a jour) :

- visualisation des repertoires et des fichiers separes et en arborescence, un peu a la facon de n'importe quel explorateur systeme
- log affichant au fur et a mesure les actions entreprises
- fichier CSS externe permettant une modification quasi totale de la presentation
- log erreur, affichant les erreurs survenues. Doit etre ameliore...pour l'instant, il n'est pas tres intelligent...! Mais moins bete tu deviendras, petit log...;-)
- ajout de templates pour les CSS (oui, je veux qu'on puisse en creer plusieurs, les sauvegarder, et avoir ainsi un systeme de skins) : ben ca y est, c'est le cas. Ca reste basique et je n'ai pas encore cree de nouveaux skins. Mais vous pouvez, par contre.

OUTILS (idem)

- renommer : permet de renommer un ou plusieurs fichier(s) et/ou repertoire(s) en meme temps (pour peu que vous n'essayiez pas de renommer plusieurs fichiers avec le meme nom dans un meme repertoire, evidemment...)
- creer : permet de creer un ou plusieurs fichier(s) et/ou un repertoire(s) en meme temps (meme remarque qu'au-dessus)
- supprimer : permet de supprimer un ou plusieurs fichier(s) et/ou repertoire(s) en meme temps. Un repertoire contenant des fichiers et des sous repertoires sera totalement vide de la meme maniere
- copier : permet de copier un ou plusieurs fichier(s) et/ou repertoire(s) en meme temps
- deplacer : permet de deplacer un ou plusieurs fichier(s) et/ou repertoire(s) en meme temps
- renommer avec motifs de recherche et de remplacement : permet de renommer fichiers et repertoires avec un simple str_replace. J'ai fait cet ajout parce que c'est une fonctionnalite qui m'a toujours manque dans la plupart des explorateurs. Vive le shell... ;-)
- upload : bah, upload de fichiers ;-)

IMPLEMENTATIONS FUTURES (quand j'aurai le temps) :

- je dois l'adapter pour qu'il fonctionne en ligne. En fait, je ne l'ai pas teste mais il y a peu de chances que ce soit le cas, vu que je ne gere pas les chmod
- ajout d'une session utilisateur
- amelioration de la presentation du log
- utilisation du log (lol) : je veux creer une possibilite d'utilisation differee : on executera le contenu du log quand on le desirera, et si possible, possibilite d'effacer des entrees du log (si on a fait une connerie).
- nouveaux outils pour renommer (ce sera sans doute la prochaine implementation)
- passer en XHTML, parce que pour le moment ce n'est pas le cas malgre mon exemple index.php mensonger ;-)
- upload : j'ai "oublie" de finir ce module...

Source / Exemple :


/*
fichier recursive_readdir.cls.php

  • /
<?php class recursive_readdir { // classe pour lire l'arborescence des repertoires public $tableau_dir; public $chemin; private $objForm; private $interdits= array (); public function __construct ($chemin = '.', $objForm, $interdits = '') { // constructeur, on initialise quelques membres. setlocale (LC_TIME,'French'); if (is_array ($interdits)) { $this -> interdits = $interdits; } $this -> chemin = $chemin; $this -> objForm = $objForm; //$this -> tableau_dir = $this -> create_tab ($this -> chemin); } public function create_tab ($dir) { // methode creant le tableau contenant les repertoires et fichiers $dir = rtrim ($dir, '/'); // on vire un eventuel slash mis par l'utilisateur de la fonction a droite du repertoire if (is_dir ($dir)) // si c'est un repertoire $dh = opendir ($dir); // on l'ouvre else { echo $dir, ' n\'est pas un repertoire valide'; // sinon on sort! Appel de fonction non valide exit; } while (($file = readdir ($dh)) !== false ) { //boucle pour parcourir le repertoire if ($file !== '.' && $file !== '..' && !in_array ($file, $this -> interdits)) { // no comment $path =$dir.'/'.$file; // construction d'un joli chemin... if (is_dir ($path)) { //si on tombe sur un sous-repertoire $tableau[$dir]['dir'][] = $path; $tabTmp = $this -> create_tab ($path); // appel recursif pour lire a l'interieur de ce sous-repertoire if (is_array ($tabTmp) && is_array ($tableau)) $tableau = array_merge ($tableau, $tabTmp); } else $tableau[$dir]['file'][] = $path; } } closedir ($dh); // on ferme le repertoire courant return $tableau; } private function recursive_display_dir ($tableau) { // methode affichant l'arborescence des repertoires echo '<ul class="ulReaddir">', "\n"; if (is_array ($tableau['dir'])) { foreach ($tableau['dir'] as $dir) { echo '<li class="liReaddir">',basename ($dir); $this -> objForm -> input_form ('submit', "voirFichiers[$dir]", 'F', 'buttonBrowser', 'Voir les fichiers'); // on instancie un objet formulaire pour creer le bouton de visualisation des fichiers associes au repertoire courant $this -> objForm -> input_form ('checkbox', 'selectRep[]', $dir, 'checkboxBrowser', 'Selectionner ce repertoire' ); echo '</li>', "\n"; $this -> recursive_display_dir ($this -> tableau_dir[$dir]); //appel recursif pour lire tout le tableau } } echo '</ul>', "\n"; } public function recursive_display_file ($tableau) { // methode affichant les fichiers d'un repertoire donne. if (is_array ($tableau['file'])) { foreach ($tableau['file'] as $fichier) { echo '<span id="',$fichier,'" class="spanFileInfo">',strftime("%a %d %b %y %H:%M:%S.",fileatime ($fichier)),' | ',strftime ("%a %d %b %y %H:%M:%S.",filemtime ($fichier)),' | ',number_format (filesize ($fichier)/1024, 3), '</span>', "\n"; echo '<span class="spanFile"><a href="',$fichier,'" class="lienBrowser" target="_blank">'; echo basename ($fichier); if (filesize ($fichier) > 0) { if ($imgInfos = getimagesize ($fichier)) { // a t on une image ? if ($imgInfos['mime'] === 'image/gif' || $imgInfos['mime'] === 'image/jpeg' || $imgInfos['mime'] === 'image/png') // d'un type valide sur le net ? echo '<img class="thumbnails" src="',$fichier,'" alt="',basename ($fichier),' ',$imgInfos[0], ' x ', $imgInfos[1],'" title="',basename ($fichier),' ', $imgInfos[0], ' x ', $imgInfos[1],'" border="0"/>'; // si oui, on affiche une vignette html et quelques infos supplementaires } } echo '</a>',$this -> objForm -> input_form ('checkbox', 'selectFile[]', $fichier, 'checkboxBrowser', 'Selectionner ce fichier' ); // ne sert pour le moment a rien... ;-) echo '</span><hr class="separateur"/>', "\n"; } } } public function display_readdir () { // fonction principale pour lire l'arborescence des repertoires. Necessaire pour ne pas afficher trop de choses... if (is_array ($this -> tableau_dir)) { reset ($this -> tableau_dir); $firstKey = key ($this -> tableau_dir); echo '<div class="divBrowserGauche">'; echo '<ul class="ulReaddir">', "\n", '<li class="liReaddir">Racine : ', basename ($this -> chemin); $this -> objForm -> input_form ('submit', "voirFichiers[$this->chemin]", 'F', 'buttonBrowser', 'Voir les fichiers'); $this -> objForm -> input_form ('checkbox', 'selectRep[]', $this -> chemin, 'checkboxBrowser', 'Selectionner ce repertoire' ); echo '</li>', "\n"; $this -> recursive_display_dir ($this -> tableau_dir[$firstKey]); echo '</ul>', "\n"; echo '</div>', "\n"; } } public function __destruct () { // a implementer plus tard } } ?> /* fichier browser_class.cls.php
  • /
<?php function __autoload($class_name) { require_once 'cls/'.$class_name . '.cls.php'; } class browser_class { // classe principale protected $dir; protected $form; protected $tabLog; protected $tabErreur; protected $user; private $browser; public function __construct ($chemin='.', $interdits = '', $userID='default', $log = false) { // constructeur , on initialise quelques membres, dont un objet formulaire, et le readdir if (!$this -> check_user($userID)) { $this -> user = new user($userID, 'default'); } else { $chaine = implode("", file('users/user_'.$userID.'.dat')); $this -> user = unserialize ($chaine); } $this -> check_form_common (); $this -> build_page ($this -> user -> css); if ($log === false) $this -> browser = new browser_nolog ($chemin, $interdits); $this -> close_page (); } private function build_page ($css='default') { echo ' <?xml version="1.0" encoding="ISO-8859-1"?> <!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" lang="fr"> <head> <LINK rel="stylesheet" type="text/css" href="css/',$css,'.css" media="screen" /> <title>Explorer PHP</title> </head> <body class="browserMain"> '; } private function close_page () { echo ' </body> </html> '; } private function check_form_common () { if (isset ($_POST['css']) && $_POST['css'] === 'Changer') { if (isset ($_POST['listeCss']) && !empty ($_POST['listeCss'])) { $this -> user -> change_css ($_POST['listeCss']); } } } protected function build_menu () { // methode de construction du menu d'outils $this -> form -> input_form ('hidden', 'tabLog', base64_encode (serialize ($this -> tabLog))); $this -> form -> input_form ('hidden', 'tabErreur', base64_encode (serialize ($this -> tabErreur))); echo '<div class="divMenu">'; echo '<div class="divGroupsOptions">'; $this -> form -> input_form ('button', 'userOpt', 'Options', 'menuBrowserBouton', 'Options utilisateur', array ('onclick="getElementById(\'userOptions\').style.display=(getElementById(\'userOptions\').style.display==\'none\'?\'block\':\'none\')"')); echo '</div>'; echo '<div class="divMenuVisible" id="userOptions" style="display: none;">'; $tabCss = $this -> fetch_css (); $this -> form-> select_form ('listeCss', 'menuBrowserSelect', 'Lister les css disponibles'); if (is_array ($tabCss)) { foreach ($tabCss as $css) { $this -> form -> select_option_form ($css, $css, 'menuBrowserSelect'); } } $this -> form -> close_select_form (); $this -> form-> input_form ('submit', "css", 'Changer', 'menuBrowserBouton', 'Changer la css'); echo '</div>', "\n"; echo '<div class="divGroupsRenommer">'; $this -> form -> input_form ('button', 'rename', 'Renommage', 'menuBrowserBouton', 'Outils pour renommer', array ('onclick="getElementById(\'renommer\').style.display=(getElementById(\'renommer\').style.display==\'none\'?\'block\':\'none\')"')); echo '</div>'; echo '<div class="divMenuVisible" id="renommer" style="display: none;">'; echo '<div class="divMenuGroups">'; $this -> form -> input_form ('text', "nouveauNom", 'Nouveau nom', 'menuBrowserText', 'Nouveau nom'); $this -> form -> input_form ('submit', "renommer", 'Renommer', 'menuBrowserBouton', 'Renommer 1 fichier ou repertoire'); echo '</div>'; echo '<div class="divMenuGroups">'; $this -> form -> input_form ('text', "motif", 'Motif de recherche', 'menuBrowserText', 'Motif de recherche'); $this -> form -> input_form ('text', "rempl", 'Remplacement', 'menuBrowserText', 'Remplacement'); $this -> form -> input_form ('submit', "renommer_str_replace", 'Renommer', 'menuBrowserBouton', 'Renommer plusieurs fichiers ou repertoires par rapport a un motif a remplacer'); echo '</div>'; echo '</div>', "\n"; echo '<div class="divGroupsSupprimer">'; $this -> form -> input_form ('button', 'suppress', 'Suppression', 'menuBrowserBouton', 'Outils pour supprimer', array ('onclick="getElementById(\'supprimer\').style.display=(getElementById(\'supprimer\').style.display==\'none\'?\'block\':\'none\')"')); echo '</div>'; echo '<div class="divMenuVisible" id="supprimer" style="display: none;">'; $this -> form-> input_form ('submit', "supprimer", 'Supprimer', 'menuBrowserBouton', 'Supprimer fichier(s) et repertoire(s)'); echo '</div>', "\n"; echo '<div class="divGroupsCreation">'; $this -> form -> input_form ('button', 'create', 'Creation', 'menuBrowserBouton', 'Outils pour creer', array ('onclick="getElementById(\'creer\').style.display=(getElementById(\'creer\').style.display==\'none\'?\'block\':\'none\')"')); echo '</div>'; echo '<div class="divMenuVisible" id="creer" style="display: none;">'; $this -> form -> input_form ('text', "nouveauFR", 'Nom', 'menuBrowserText', 'Nom du fichier ou du repertoire a creer'); $this -> form-> input_form ('submit', "creerf", 'Creer F', 'menuBrowserBouton', 'Creer fichier(s) vide(s) dans 1 ou plusieurs repertoires'); $this -> form-> input_form ('submit', "creerr", 'Creer R', 'menuBrowserBouton', 'Creer repertoire(s) dans 1 ou plusieurs repertoires'); echo '</div>', "\n"; echo '<div class="divGroupsCopierDeplacer">'; $this -> form -> input_form ('button', 'copy', 'Copier/Deplacer', 'menuBrowserBouton', 'Outils pour copier/deplacer', array ('onclick="getElementById(\'copier\').style.display=(getElementById(\'copier\').style.display==\'none\'?\'block\':\'none\')"')); echo '</div>'; echo '<div class="divMenuVisible" id="copier" style="display: none;">'; $this -> form-> select_form ('listeRep', 'menuBrowserSelect', 'Choisir un repertoire de destination'); $this -> form -> select_option_form ($this -> dir -> chemin, $this -> dir -> chemin, 'menuBrowserSelect'); foreach ($this -> dir -> tableau_dir as $clef => $dump) { if (is_array ($this -> dir -> tableau_dir[$clef]['dir'])) { foreach ($this -> dir -> tableau_dir[$clef]['dir'] as $rep) $this -> form -> select_option_form ($rep, $rep, 'menuBrowserSelect'); } } $this -> form -> close_select_form (); $this -> form-> input_form ('submit', "copier", 'Copier', 'menuBrowserBouton', 'Copier fichier(s) dans 1 repertoire'); $this -> form-> input_form ('submit', "deplacer", 'Deplacer', 'menuBrowserBouton', 'Deplacer fichier(s) dans 1 repertoire'); echo '</div>', "\n"; echo '<div class="divGroupsUpload">'; $this -> form -> input_form ('button', 'upload', 'Upload', 'menuBrowserBouton', 'Upload de fichiers', array ('onclick="getElementById(\'uploadFich\').style.display=(getElementById(\'uploadFich\').style.display==\'none\'?\'block\':\'none\')"')); echo '</div>'; echo '<div class="divMenuVisible" id="uploadFich" style="display: none;">'; $this -> form -> input_form ('hidden', 'MAX_FILE_SIZE', '3000000'); $this -> form-> input_form ('file', "uploadChoix", '', 'menuBrowserBouton', 'Uploader un Fichier'); $this -> form-> input_form ('submit', "upload", 'Uploader', 'menuBrowserBouton', 'Uploader un Fichier'); echo '</div>', "\n"; echo '</div>'; } protected function display_log () { echo '<div class="divLog">'; if (is_array ($this -> tabLog)) { $this -> tabLog = array_reverse ($this -> tabLog); foreach ($this -> tabLog as $action) { echo '<span class="spanAction">', $action['action'], ' : </span><br />'; foreach ($action['cible'] as $cible) { echo '<span class="spanCible">'; if (is_array ($cible)) { foreach ($cible as $cibles) echo $cibles, '<br />'; } else echo $cible, '<br />'; } echo '</span>'; } $this -> tabLog = array_reverse ($this -> tabLog); } echo '</div>'; } protected function display_erreur () { echo '<div class="divErreur">'; if (is_array ($this -> tabErreur)) { $this -> tabErreur = array_reverse ($this -> tabErreur); foreach ($this -> tabErreur as $erreur) { echo $erreur, '<br /><br />'; } $this -> tabErreur = array_reverse ($this -> tabErreur); } echo '</div>'; } protected function get_affiche_fichiers ($chemin) { // methode de traitement apres demande d'affichage des fichiers d'un repertoire par le formulaire echo '<div class="divBrowserDroit">'; echo '<span class="spanHeader">Dernier acces au fichier | Derniere modifification | taille en kb</span>'; echo '<span class="cheminListeFichiers">',$chemin, '</span><br /><br />'; $this -> dir -> recursive_display_file ($this -> dir -> tableau_dir[$chemin]); echo '</div>'; } private function checkMod ($fichier) { $mod = fileperms ($fichier); if ($mod !== false) { chmod ($fichier, 0755); return $mod; } } private function modBack ($mod, $fichier) { chmod ($fichier, $mod); } protected function supprimer_fichier ($tableau) { // methode pour supprimer un ou plusisurs fichiers foreach ($tableau as $fichier) { if (file_exists ($fichier)) { $mod = $this -> checkMod ($file); unlink ($fichier); } } } protected function supprimer_rep ($tableau) { // methode pour supprimer un ou plusieurs repertoires et tout ce qu'il y a dedans foreach ($tableau as $dir) { $dh = opendir ($dir); while (($file = readdir ($dh)) !== false ) { if ($file !== '.' && $file !== '..') { if (is_dir ($dir.'/'.$file)) { $tab = array ($dir.'/'.$file); $this -> supprimer_rep ($tab); // si on trouve un repertoire, on fait un appel recursif pour fouiller ce repertoire } else { if (file_exists ($dir.'/'.$file)) { $mod = $this -> checkMod ($dir.'/'.$file); unlink ($dir.'/'.$file); // si on trouve un fichier, on le supprime } } } } closedir ($dh); if (is_dir ($dir)) { $mod = $this -> checkMod ($dir); rmdir ($dir); // on supprime le repertoire courant } } } protected function renommer_un_ ($tabFichierRep, $newName) { // methode pour renommer un fichier ou un repertoire de facon classique $tabref = explode ('/', $tabFichierRep[0]); array_pop ($tabref); $testExistence = implode ('/', $tabref); $testExistence .= '/'.$newName; if (!file_exists ($testExistence)) { $mod = $this -> checkMod ($tabFichierRep[0]); rename ($tabFichierRep[0], $newName); if ($mod !== false) { $this -> modBack ($mod, $testExistence); } } } protected function renommer_str_replace ($tabFichierRep, $motif, $rep) { // methode pour renommer fichiers ou repertoires avec un str_replace foreach ($tabFichierRep as $clef => $fichier) { $tabref = explode ('/', $fichier); array_pop ($tabref); $testExistence = implode ('/', $tabref); $testExistence = str_replace ($motif, $rep, $fichier); if (!file_exists ($testExistence)) { $mod = $this -> checkMod ($tabFichierRep[$clef]); rename ($tabFichierRep[$clef], $testExistence); if ($mod !== false) { $this -> modBack ($mod, $testExistence); } } } } protected function creer_fichier ($tableauRep, $newName) { // methode pour creer un fichier dans un ou plusieurs repertoires foreach ($tableauRep as $rep) { $aCreer = $rep.'/'.$newName; if (!file_exists ($aCreer)) // on verifie que le fichier n'existe pas deja... touch ($aCreer); } } protected function creer_rep ($tableauRep, $newName) { // methode pour creer un repertoire dans un ou plusieurs repertoires foreach ($tableauRep as $rep) { $aCreer = $rep.'/'.$newName; if (!is_dir ($aCreer)) // on verifie que le fichier n'existe pas deja... mkdir ($aCreer); } } protected function deplacer_ ($destination, $fichiers) { // methode pour deplacer fichier ou repertoire foreach ($fichiers as $fichier) { $destTemp =$destination. '/'.basename ($fichier); if (!file_exists ($destTemp)) { $mod = $this -> checkMod ($destination); $modTmp = $this -> checkMod ($fichier); rename ($fichier, $destTemp); if ($mod !== false) $this -> modBack ($mod, $destination); } } } protected function copier_fichier ($destination, $fichiers) { // methode pour copier fichier foreach ($fichiers as $fichier) { $destTemp =$destination. '/'.basename ($fichier); if (!file_exists ($destTemp)) { $mod = $this -> checkMod ($destination); copy ($fichier, $destTemp); if ($mod !== false) $this -> modBack ($mod, $destination); } } } protected function copier_rep ($destination, $reps) { // methode pour copier repertoire : on cree un repertoire de meme nom, puis on va chercher les fichiers, et on les copie. Si il y a des sous repertoires, appel recursif. foreach ($reps as $rep) { if (!is_dir ($destination.'/'.basename ($rep))) { mkdir ($destination.'/'.basename ($rep)); if (is_array ($this -> dir -> tableau_dir[$rep]['file'])) { foreach ($this -> dir -> tableau_dir[$rep]['file'] as $fichier) { $mod = $this -> checkMod ($destination); copy ($fichier, $destination.'/'.basename ($rep).'/'.basename ($fichier)); if ($mod !== false) $this -> modBack ($mod, $destination); } } if (is_array ($this -> dir -> tableau_dir[$rep]['dir'])) { $this -> copier_rep ($destination.'/'.basename ($rep), $this -> dir -> tableau_dir[$rep]['dir']); } } } } protected function upload_file ($fichier, $destination) { $upload = $destination[0].'/'.basename ($fichier['name']); $mod = $this -> checkMod ($destination[0]); if (move_uploaded_file ($fichier['tmp_name'], $upload)) { if ($mod !== false) { $this -> modBack ($mod, $destination[0]); } return true; } else { if ($mod !== false) { $this -> modBack ($mod, $destination[0]); } return false; } } private function check_user ($id) { if (file_exists ('users/user_'.$id.'.dat')) return true; else return false; } private function fetch_css () { if (is_dir ('css')) { $dh = opendir ('css'); while (($file = readdir ($dh)) !== false ) { if ($file !== '.' && $file !== '..' && strpos ($file, '.css', strlen ($file) -4) !== false) { $tab[] = substr ($file, 0, strlen ($file) - 4); } } } if (is_array ($tab)) return $tab; } public function __destruct () { // a implementer } } ?> /* fichier build_form.cls.php
  • /
<?php class build_form { // classe formulaire private $inputTab = array ('text', 'submit', 'checkbox', 'file', 'button', 'hidden'); public function __construct ($action, $methode = 'post', $nom = '') { // constructeur echo '<form enctype="multipart/form-data" style ="display: inline;" action="',$action,'" method="',$methode,'" name="',$nom,'">'; } public function close_form () { echo '</form>'; } public function input_form ($typeInput, $nomInput, $value='', $styleClass='', $titleTag='Pas d\'aide disponible', $options='') { // 1ere fonction, seule utile pour le moment, basique. Permet juste de creer ce dont j'ai besoin : un type submit (text aussi, mais ce n#est pour l'instant pas utilise) $typeInput = strtolower ($typeInput); if (in_array ($typeInput, $this -> inputTab)) { echo '<input type="',$typeInput,'" name="',$nomInput,'" value="',$value,'" class="',$styleClass,'" title="',$titleTag,'" '; if (is_array ($options)) { foreach ($options as $option) echo $option, ' '; } echo '/>'; } else { echo 'Erreur, le type d\'input passe en argument n\'est pas valide : ', $inputType; exit; } } public function select_form ($nom, $styleClass, $titleTag='Pas d\'aide disponible', $options='') { echo '<select class="',$styleClass,'" title="',$titleTag,'" name="',$nom,'" '; if (is_array ($options)) { foreach ($options as $option) echo $option, ' '; } echo '/>'; } public function close_select_form () { echo '</select>'; } public function select_option_form ($valeur, $texte, $styleClass) { echo '<option class="',$styleClass,'" value="',$valeur,'">', $texte, '</option>'; } public function __destruct () { // a implementer } } ?> /* fichier browser_nolog.cls.php
  • /
<?php class browser_nolog extends browser_class { public function __construct ($chemin='.', $interdits = '') { $this -> form = new build_form ($_SERVER['PHP_SELF'], 'post'); $this -> dir = new recursive_readdir ($chemin, &$this -> form, $interdits); $this -> dir -> tableau_dir = $this -> dir -> create_tab ($this -> dir -> chemin); $this -> verif_form (); $this -> build_menu (); $this -> display_log (); $this -> display_erreur (); $this -> dir -> display_readdir (); $this -> form -> close_form (); } private function verif_form () { // methode de verification de soumission des formulaires if (isset ($_POST['tabLog']) && !empty ($_POST['tabLog'])) { // on recupere le tableau de log $this -> tabLog = unserialize (base64_decode ($_POST['tabLog'])); } if (isset ($_POST['tabErreur']) && !empty ($_POST['tabErreur'])) { // on recupere le tableau de log $this -> tabErreur = unserialize (base64_decode ($_POST['tabErreur'])); } if (isset ($_POST['voirFichiers']) && is_array ($_POST['voirFichiers'])) { // si on a demande l'affichage de fichiers $this -> get_affiche_fichiers (key ($_POST['voirFichiers'])); } if (!isset ($_POST['voirFichiers']) && !is_array ($_POST['voirFichiers'])) { // par defaut, on affiche a droite les fichiers a la racine $this -> get_affiche_fichiers ($this -> dir -> chemin); } if (isset ($_POST['supprimer']) && $_POST['supprimer'] === 'Supprimer') { if (is_array ($_POST['selectFile'])) { $this -> tabLog[] = array ('action' => 'Supprimer', 'cible' => $_POST['selectFile']); $this -> supprimer_fichier ($_POST['selectFile']); } else { $this -> tabErreur[] = 'Vous n\'avez pas selectionne de fichiers a supprimer.'; } } if (isset ($_POST['supprimer']) && $_POST['supprimer'] === 'Supprimer') { if (is_array ($_POST['selectRep']) && !in_array ($this -> dir -> chemin, $_POST['selectRep'])) { $this -> tabLog[] = array ('action' => 'Supprimer', 'cible' => $_POST['selectRep']); $this -> supprimer_rep ($_POST['selectRep']); } else { $this -> tabErreur[] = 'Vous n\'avez pas selectionne de repertoires a supprimer, ou vous avez selectionne le repertoire racine :'.$this -> dir -> chemin.'.'; } } if (isset ($_POST['renommer']) && $_POST['renommer'] === 'Renommer') { if (isset ($_POST['nouveauNom']) && !empty ($_POST['nouveauNom'])) { if (is_array ($_POST['selectFile']) && count ($_POST['selectFile'] === 1)) { $this -> tabLog[] = array ('action' => 'Renommer', 'cible' => $_POST['selectFile']); $this -> renommer_un_ ($_POST['selectFile'], $_POST['nouveauNom']); } else { $this -> tabErreur[] = 'Vous avez selectionne aucun ou plusieurs fichiers pour le renommage.'; } } else { $this -> tabErreur[] = 'Vous n\'avez pas entre de nom pour le fichier a renommer.'; } } if (isset ($_POST['renommer']) && $_POST['renommer'] === 'Renommer') { if (isset ($_POST['nouveauNom']) && !empty ($_POST['nouveauNom'])) { if (is_array ($_POST['selectRep']) && count ($_POST['selectRep'] === 1) && !in_array ($this -> dir -> chemin, $_POST['selectRep'])) { $this -> tabLog[] = array ('action' => 'Renommer', 'cible' => $_POST['selectRep']); $this -> renommer_un_ ($_POST['selectRep'], $_POST['nouveauNom']); } else { $this -> tabErreur[] = 'Vous avez selectionne aucun ou plusieurs repertoires pour le renommage, ou bien le repertoire racine : '.$this -> dir -> chemin.'.'; } } else { $this -> tabErreur[] = 'Vous n\'avez pas entre de nom pour le fichier a renommer.'; } } if (isset ($_POST['renommer_str_replace']) && $_POST['renommer_str_replace'] === 'Renommer') { if (isset ($_POST['motif']) && isset ($_POST['rempl']) && !empty ($_POST['motif']) && !empty ($_POST['rempl'])) { if (is_array ($_POST['selectFile'])) { $this -> tabLog[] = array ('action' => 'Renommer avec motif', 'cible' => $_POST['selectFile']); $this -> renommer_str_replace ($_POST['selectFile'], $_POST['motif'], $_POST['rempl']); } else { $this -> tabErreur[] = 'Vous n\'avez pas selectionne de fichiers.'; } } else { $this -> tabErreur[] = 'Vous n\'avez pas entre le motif ou le remplacement pour le fichier a renommer.'; } } if (isset ($_POST['renommer_str_replace']) && $_POST['renommer_str_replace'] === 'Renommer') { if (isset ($_POST['motif']) && isset ($_POST['rempl']) && !empty ($_POST['motif']) && !empty ($_POST['rempl'])) { if (is_array ($_POST['selectRep'])) { $this -> tabLog[] = array ('action' => 'Renommer avec motif', 'cible' => $_POST['selectRep']); $this -> renommer_str_replace ($_POST['selectRep'], $_POST['motif'], $_POST['rempl']); } else { $this -> tabErreur[] = 'Vous n\'avez pas selectionne de repertoires.'; } } else { $this -> tabErreur[] = 'Vous n\'avez pas entre le motif ou le remplacement pour le repertoire a renommer.'; } } if (isset ($_POST['creerf']) && $_POST['creerf'] === 'Creer F') { if (is_array ($_POST['selectRep'])) { $tabLogTmp = array ($_POST['selectRep'], $_POST['nouveauFR']); $this -> tabLog[] = array ('action' => 'Creer', 'cible' => $tabLogTmp); $this -> creer_fichier ($_POST['selectRep'], $_POST['nouveauFR']); } else { $this -> tabErreur[] = 'Vous n\'avez selectionne aucun repertoire dans lequel (lesquels) creer votre nouveau fichier.'; } } if (isset ($_POST['creerr']) && $_POST['creerr'] === 'Creer R') { if (is_array ($_POST['selectRep'])) { $tabLogTmp = array ($_POST['selectRep'], $_POST['nouveauFR']); $this -> tabLog[] = array ('action' => 'Creer', 'cible' => $tabLogTmp); $this -> creer_rep ($_POST['selectRep'], $_POST['nouveauFR']); } else { $this -> tabErreur[] = 'Vous n\'avez selectionne aucun repertoire dans lequel (lesquels) creer votre nouveau repertoire.'; } } if (isset ($_POST['copier']) && $_POST['copier'] === 'Copier') { if (isset ($_POST['listeRep']) && is_array ($_POST['selectFile'])) { $tabLogTmp = array ($_POST['listeRep'], $_POST['selectFile']); $this -> tabLog[] = array ('action' => 'Copier', 'cible' => $tabLogTmp); $this -> copier_fichier ($_POST['listeRep'], $_POST['selectFile']); } else { $this -> tabErreur[] = 'Vous n\'avez selectionne aucun repertoire ou aucun fichier pour la copie.'; } } if (isset ($_POST['copier']) && $_POST['copier'] === 'Copier') { if (isset ($_POST['listeRep']) && is_array ($_POST['selectRep'])) { $tabLogTmp = array ($_POST['listeRep'], $_POST['selectRep']); $this -> tabLog[] = array ('action' => 'Copier', 'cible' => $tabLogTmp); $this -> copier_rep ($_POST['listeRep'], $_POST['selectRep']); } else { $this -> tabErreur[] = 'Vous n\'avez selectionne aucun repertoire pour la copie.'; } } if (isset ($_POST['deplacer']) && $_POST['deplacer'] === 'Deplacer') { if (isset ($_POST['listeRep']) && is_array ($_POST['selectFile'])) { $tabLogTmp = array ($_POST['listeRep'], $_POST['selectFile']); $this -> tabLog[] = array ('action' => 'Deplacer', 'cible' => $tabLogTmp); $this -> deplacer_ ($_POST['listeRep'], $_POST['selectFile']); } else { $this -> tabErreur[] = 'Vous n\'avez selectionne aucun repertoire pour le deplacement.'; } } if (isset ($_POST['deplacer']) && $_POST['deplacer'] === 'Deplacer') { if (isset ($_POST['listeRep']) && is_array ($_POST['selectRep']) && !in_array ($this -> dir -> chemin, $_POST['selectRep'])) { $tabLogTmp = array_merge ($_POST['listeRep'], $_POST['selectRep']); $this -> tabLog[] = array ('action' => 'Deplacer', 'cible' => $tabLogTmp); $this -> deplacer_ ($_POST['listeRep'], $_POST['selectRep']); } else { $this -> tabErreur[] = 'Vous n\'avez selectionne aucun repertoire pour le deplacement.'; } } if (isset ($_POST['upload']) && $_POST['upload'] === 'Uploader') { if (isset ($_FILES['uploadChoix']['tmp_name'])) { // && is_array ($_POST['selectRep']) && count ($_POST['selectRep']) === 1) { $tabLogTmp = array ($_FILES['uploadChoix']['name'], $_POST['selectRep']); $this -> tabLog[] = array ('action' => 'Uploader', 'cible' => $tabLogTmp); $this -> upload_file ($_FILES['uploadChoix'], $_POST['selectRep']); } else { $this -> tabErreur[] = 'Vous n\'avez pas selectionne de fichier a uploader, ou de repertoire de destination'; } } } } ?> /* fichier user.cls.php
  • /
<?php class user { public $css; private $userID; public function __construct ($userID, $css = 'default') { $this -> css = $css; $this -> userID = $userID; } public function change_css ($css) { $this -> css = $css; $saveFile = serialize ($this); if (!is_dir (users)) mkdir ('users', 0755); $fp = fopen ('users/user_'.$this -> userID.'.dat', 'w+'); $write = fwrite ($fp, $saveFile); fclose ($fp); } } ?> /* fichier index.php exemple
  • /
<?php require_once ('cls/browser_class.cls.php'); $interdits = array ('cls'); $explorer = new browser_class ('.', $interdits); // appel de la classe principale ?>

Conclusion :


Au passage, parce que j'ai oublie : merci a Fuckya qui m'a aide a comprendre qu'il ne valait mieux pas utiliser l'unite de mesure "points" avec Firefox, a moins (je suppose), de faire une css media="print"...c'est pas beau sur un ecran ;-)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

désolé, je ne reçois pas les messages de ce code dans mes emails...:-(
Bref...

Ademus => heureux que tu t'en sois sorti sans mon aide lol. Je suis vraiment désolé.

Inekman => Oui je sais, c'est normal. Il y a 2 erreurs (si mes osuvenirs sont bons) en réalité :
- j'utilise des listes <li>... pour afficher l'arborescence. Mais j'ai du m'emmeler les pinceaux parce que ce n'est pas validé.
- mes id pour les fichiers ne sont pas valides, je les commence par un mauvais caractère. Je sais très bien comment corriger ce problème, mais je n'ai pas eu le temps de m'en occuper, l'été a été mouvementé.

Oui, sinon, je compte corriger ce script qui contient d'autres erreurs : pas assez de vérifications qui fqit qu'en error_reporting a E_ALL, on obtient des warnings.
Mais un peu de patience, je n'ai toujours que peu de temps pour me remettre à ce gros morceau... De plus j'avais commencé à le réaliser avec des requêtes xmlhttp. Je ne sais pas si je vais poursuivre dans cette voie et donc livrer un nouvel explorateur, ou en rester à celui-ci en corrigeant les erreurs.
Messages postés
291
Date d'inscription
dimanche 2 février 2003
Statut
Membre
Dernière intervention
30 juin 2006

Je me demandais au passage, est-il normal que la page génère 39 warnings au HTML Validator ? La validation XHTML 1.0 Strict part furieusement en cacahuète chez moi :s

Envisages-tu de corriger le script ? :)
Messages postés
16
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
14 octobre 2010

"Aide toi et le ciel t aideras" comme on dit...
C bon ça marche chez moi aussi

L explorer a l'air super.
Félicitations!!
Messages postés
16
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
14 octobre 2010

je suis un débutant comparé à ton niveau et avec php 4.3.1,
tant en local qu en ligne, ça ne marche pas.
J'ai suivi tes indications pour virer tous les protected, private, public
pour revenir à de la syntaxe php 4
mais tout ce que je vois c'est une belle page blanche.

Quelqu'un est il parvenu a adapter ce script pour php4?
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Voui,

c'est une sale habitude qu'on la plupart des programmes a ne vouloir fonctionner correctement qu'avec tous les fichiers sources...tss...on peut jamais rien faire simplement ,-)

et de rien, merci a toi :-)
Afficher les 28 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.