function explorer($dir, $recursif=false) { // On ne tiens pas conte du dossier courant // Est ce que le fichier est un repertoire ? // On n'oublie pas rajouter le chemin du fichier // Recursif = oui ? alors explorons le ! } else { // C'est un fichier, on l ajoute $listeFichier[] = "$dir/$fichier"; } } } // L'exploration est termnier, on ferme =p // On retourne la liste des fichier return $listeFichier; }
<?php function listRepertoire() { // Récupération du chemin courant $fichiers = explorer("."); // ajout ".." (qui a été filtré par la fonction) ?> <form action="<?php echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>" method="post"> <table border="1" width="100%"> <tr> <td><font color="#cc0000"> <?php echo $repCourant; ?> </td></font> <td><font color="#cc0000"><?php echo round(disk_total_space("./")/pow(2,20), 1) . " / ". round(disk_free_space("./")/pow(2,20), 1). " Mo"; ?> </td></font> </tr> </table> <table border="0" width="100%"> <tr> <th>Action</th> <th>Nom du fichier</th> <th>Taille</th> <th>Permissions</th> </tr> <?php for ($i=0; $i<count($fichiers); $i++) { ?> <tr> <td> <?php /* Le fichier est-il un répertoire ? */ { ?> <a href="<?php echo '?repertoire='.$repCourant."&f=".$fichiers[$i].'&action=supprimer';?>" /> [x] </a> <a href="<?php echo '?repertoire='.$repCourant."&f=".$fichiers[$i].'&action=modifier#modif'; ?>" />[ Modifier] </a> <a href="<?php echo '?repertoire='.$repCourant."&f=".$fichiers[$i].'&action=telecharger'; ?>" />[ Télécharger] </a> </td> <td class="center"> <a href="?repertoire=<?php echo $repCourant."/".$fichiers[$i];?>"> </a> </td> <td class="center"> [Dossier] </td> <?php }else{ ?> <a href="<?php echo '?repertoire='.$repCourant."&f=".$fichiers[$i].'&action=supprimer';?>" /> [x] </a> <a href="<?php echo '?repertoire='.$repCourant."&f=".$fichiers[$i].'&action=modifier#modif'; ?>" />[ Modifier] </a> <a href="<?php echo '?repertoire='.$repCourant."&f=".$fichiers[$i].'&action=telecharger'; ?>" />[ Télécharger] </a> </td> <td class="center"> <?php echo '<a href="?repertoire='.$repCourant."&f=".$fichiers[$i].'&action=modifier#modif">'.basename($fichiers[$i]).'</a>'; ?> </td> <td class="center"> <?php echo tailleFichier($fichiers[$i]); ?> </td> <?php } ?> <td class="center"> <?php echo afficherPerm($fichiers[$i]); // pour plus tard ?> </td> </tr> <?php } ?> </table> <?php }
if ($_GET["repertoire"]) { { $erreur = "Le changement de répertoire a échoué."; } } listRepertoire();
function tailleFichier($fichier) { // Covertion octet / ko / mo // On recupere la taille en octet if ($taille < $ko){ // On laisse en octet $taille = $taille . " octets"; } elseif ($taille >= $ko AND $taille < $mo) // Sinon ko, puis mo { } else { } return $taille; }
function afficherPerm($fichier) { if (($perms & 0xC000) == 0xC000) { // Socket $info = 's'; } elseif (($perms & 0xA000) == 0xA000) { // Lien symbolique $info = 'l'; } elseif (($perms & 0x8000) == 0x8000) { // Régulier $info = '-'; } elseif (($perms & 0x6000) == 0x6000) { // Block spécial $info = 'b'; } elseif (($perms & 0x4000) == 0x4000) { // Dossier $info = 'd'; } elseif (($perms & 0x2000) == 0x2000) { // Caractère spécial $info = 'c'; } elseif (($perms & 0x1000) == 0x1000) { // FIFO pipe $info = 'p'; } else { // Inconnu $info = 'u'; } // Propriétaire $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); // Groupe $info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); // Tous $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); return $info; }
function telecharger($nom, $chemin, $taille) { }
// Class zip prefete, tranquille (fou) class zipfile { /** * Array to store compressed data * * @var array $datasec */ /** * Central directory * * @var array $ctrl_dir */ /** * End of central directory record * * @var string $eof_ctrl_dir */ var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; /** * Last offset position * * @var integer $old_offset */ var $old_offset = 0; /** * Converts an Unix timestamp to a four byte DOS date and time format (date * in high two bytes, time in low two bytes allowing magnitude comparison). * * @param integer the current Unix timestamp * * @return integer the current date in a four byte DOS format * * @access private */ function unix2DosTime($unixtime = 0) { if ($timearray['year'] < 1980) { $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } // end if return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); } // end of the 'unix2DosTime()' method /** * Adds "file" to archive * * @param string file contents * @param string name of the file in the archive (may contains the path) * @param integer the current timestamp * * @access public */ function addFile($data, $name, $time = 0) { $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1]; $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; // ver needed to extract $fr .= "\x00\x00"; // gen purpose bit flag $fr .= "\x08\x00"; // compression method $fr .= $hexdtime; // last mod time and date // "local file header" segment $fr .= $name; // "file data" segment $fr .= $zdata; // "data descriptor" segment (optional but necessary if archive is not // served as file) // nijel(2004-10-19): this seems not to be needed at all and causes // problems in some cases (bug #1037737) //$fr .= pack('V', $crc); // crc32 //$fr .= pack('V', $c_len); // compressed filesize //$fr .= pack('V', $unc_len); // uncompressed filesize // add this entry to array $this -> datasec[] = $fr; // now add to central directory record $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; // version made by $cdrec .= "\x14\x00"; // version needed to extract $cdrec .= "\x00\x00"; // gen purpose bit flag $cdrec .= "\x08\x00"; // compression method $cdrec .= $hexdtime; // last mod time & date $cdrec .= $name; // optional extra field, file comment goes here // save to central directory $this -> ctrl_dir[] = $cdrec; } // end of the 'addFile()' method /** * Dumps out file * * @return string the zipped file * * @access public */ { return $data . $ctrldir . $this -> eof_ctrl_dir . "\x00\x00"; // .zip file comment length } // end of the 'file()' method } // end of the 'zipfile' class
function zop($array, $repertoire) { $zip = new zipfile(); for ($i=0; $i<count($array); $i++) { $zip->addfile($data[$i], $nom); } $archive = $zip->file() ; //on associe l'archive echo $archive ; }
function Supression($fichier) { { $contenu_rep = explorer($fichier, true); // On active la récursivité histoire de supprimer le contunue de tous les sous répertoire possible du dossier visé. for ($i=0; $i<count($contenu_rep); $i++) { { { $erreur = 'La suppression du répertoire à planter au fichier '. $contenu_rep[$i]; } } } { $erreur = 'La suppression du répertoire à planter au repertoire '. basename($fichier).', essayer de suprimmer ces sous dossiers manuellement'; } else { } } else // C'est un fichier, essayons de le del :bavup: ! { { } else { } } return $erreur; }
<?php { $action = $_POST['action']; switch($action) { } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <div id="header"> </div> <div id="menu_haut"> <ul> <li><a href="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>"/>Gesttionnaire de fichiers</a></li> <li><a href="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>?action=sql"/>Gestionnaire MySQl</a></li> <li><a href="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>?action=code"/>Php-Code</a></li> <li><a href="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>?action=deconnexion"/>Deconnexion</a></li> </ul> </div> <div id="corps"> <?php $action2 = $_GET['action']; switch($action2) { default; if ($_GET["repertoire"]) { { $erreur = "Le changement de répertoire a échoué."; } } listRepertoire(); } ?> </div> <hr /> <div id="pres_footer"> <fieldset><legend>Créé dossier</legend> <form action="#" method="post"> <input type="hidden" name="action" value="creedossier" /> <input type="text" name="nom" value="Votre nom de dossier ..." /> <input type="submit" value="Envoyer" /> </form> </fieldset> <fieldset><legend>Upload d'un fichier</legend> <form action="#" method="post" enctype="multipart/form-data"> <input type="file" name="upload" id="upload" /> <input type="hidden" name="action" value="upload"/> <input type="submit" value="Envoyer" /> </form> </fieldset> </div> <div id="footer"> { echo "<script>alert('$erreur')"; // Çà coule de source, nan ? } ?> </div> </body> </html> <?php /* Toute les fonctions, vous les avez deja, elle seront ici, mais je les zap la, elle mon frustré hier soir, c'est bien fait pour elles */ ?>
case 'creedossier': { $nom = $_POST['nom']; $repertoire = $_POST['repertoire']; { // Heheheheh pas bien vilain il existe deja o.o } else { { $erreur = "Le changement de répertoire a échoué."; } else { // On cree le dosssier { } else { } } } } break;
case 'upload': $repertoire = $_POST['repertoire']; { $tmp_file = $_FILES['upload']['tmp_name']; { } // Testons si l'extension est autorisée { $erreur = "Erreur impossible de deplacer le ficher dans le repertoire $repertoire"; } } else { $erreur = "Pas de fichier ..."; } break;
<?php case "modifier": $fichier = $_GET['f']; $repertoire = $_GET['repertoire']; { { $erreur = "Impossible d'ouvrire le fichier"; } else { } ?> <hr /> <div id="info_fichier"> <p>Fichier : <?php echo basename($fichier).'  ('.tailleFichier($fichier).')  '.afficherPerm($fichier); ?><br /> Repertoire : <?php echo $repertoire.'  '. afficherPerm($repertoire); ?> <fieldset id="rennomer"><legend><b>Renommer le fichier</b></legend> <form method="post" action="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>"> <input type="hidden" value="renomer" name="action" /> <input type="hidden" value="<?php echo $fichier; ?>" name="nom" /> <input type="text" name="new_nom">     <input type="submit" value="Modifier" /> </form> </fieldset> <fieldset id="modif"><legend><b>Modification d'un fichier</b></legend> <form method="post" action="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>"> <input type="hidden" value="modifier" name="action" /> <input type="hidden" value="<?php echo $fichier; ?>" name="nom" /> <textarea name="contenu" style="width:100%; height:250px;"><?php if (isset($erreur)) { echo $erreur; } else { echo htmlentities($contenu); } ?> </textarea><br /><br /> <input type="submit" value="Modifier" /> </form> </fieldset> </p> </div> <?php } else // c'est un répértoire { ?> <hr /> <div id="info_fichier"> <p>Repertoire : <?php echo ' <span style="color:red;">['.basename($fichier).']</span>  '.afficherPerm($fichier); ?><br /> Chemin : <?php echo $repertoire.'  '. afficherPerm($repertoire); ?> <fieldset id="rennomer"><legend><b>Renommer le repertoire</b></legend> <form method="post" action="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>"> <input type="hidden" value="renomer" name="action" /> <input type="hidden" value="<?php echo $fichier; ?>" name="nom" /> <input type="text" name="new_nom"> &nb</form> </fieldset> </p> </div> <?php } break;
case 'renomer': $fichier = $_POST['nom']; $nfichier = $_POST['new_nom']; $repertoire = $_POST['repertoire']; { $erreur = "Le changement de répertoire a échoué."; } else { { $erreur = "Impossible de renommer $fichier en $nfichier"; } else { $erreur = "$ficher à bien été rennomé en $nfichier"; } } break;
case 'modifier': { $fichier = $_POST["nom"]; $repertoire = $_POST['repertoire']; { $erreur = "Le changement de répertoire a échoué."; } else { // Ouverture du fichier // Ecriture // Fermeture } } break;
case 'telecharger': $fichier = $_GET['f']; $repertoire = $_GET['repertoire']; { } else { $fichiers = explorer($repertoire.'/'.$fichier, true); zop($fichiers, $fichier); } break;
case 'supprimer': $repertoire = $_GET['repertoire']; $fichier = $_GET['f']; // Le changement de repertoire c'est il bien effectue ? Non, erreur ... ='( { $erreur = "Le changement de répertoire a échoué."; } // Sinon tentons d effacer le fichier ou le repertoire : ) else { $erreur = Supression($fichier); } echo $erreur; break;
Tutoriel en cour de construction :
Code du gestionnaire complet : Ici