begin process at 2012 05 27 21:43:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > GESTIONNAIRE DE FICHIERS | MYSQL PHP 5.X {NEMENTON PHP MANAGER V0.5}

GESTIONNAIRE DE FICHIERS | MYSQL PHP 5.X {NEMENTON PHP MANAGER V0.5}


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Classé sous :Gestionnaire, Fichiers, Gestionaire MySQL, Gestionaire fichiers, Aplication gestion Niveau :Débutant Date de création :08/08/2009 Date de mise à jour :27/10/2009 21:04:40 Vu / téléchargé :6 576 / 575

Auteur : Nementon

Ecrire un message privé
Site perso
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voici pour ma première contribution un gestionnaire de fichiers et de base de données sous MySQL en php, il permet

- De naviguer dans des dossiers
- Ajouter | suprimer | Telecharger des fichiers;
- Ajouter | suprimer | Telecharger des dossiers;
- Rechercher des fichiers;
- Naviguer| Modifier | Supprimer | Ajouter des données dans une bases de donnes MySQL;
- Obtenir des infos sur la structure d'une table MySQL;
- Executer du code Php;

A venir :

- Possibilité d'alterer | Modifier une table MySQL;
- Possibilité de faire un dump d'une table | base de donnée MySQL;
- Posibilité de cree des base de données
- Posibilité de modifier les droit d'acces au fichiers ?

Un tutoriel sur la creation du script et present ici : http://uwht.u7n.org/tutoriel-programmation-13-5.ht ml

Source

  • <?php
  • // Code by Nementon //
  • // For uwht.u7n.org //
  • // License : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ //
  • session_start(); //A ne surtout pas supprimer nous en aurons besoin plus tard pour la gestion MySQL
  • error_reporting(0);
  • if (isset($_POST['action']))
  • {
  • $action = $_POST['action'];
  • switch($action)
  • {
  • case 'creeFichier':
  • if (isset($_POST['contenu']) && !empty($_POST['contenu']) && isset($_POST['nom']) && !empty($_POST['nom']))
  • {
  • $nom = $_POST['nom'];
  • $contenu = $_POST['contenu'];
  • $repertoire = $_POST['repertoire'];
  • if (file_exists($repertoire.'/'.$nom ))
  • {
  • // Heheheheh pas bien vilain il existe deja o.o
  • $erreur = "Le fichier " . basename($nom) ." que vous desirez créé existe déja";
  • }
  • else
  • {
  • if (!chdir($repertoire))
  • {
  • $erreur = "Le changement de répertoire a échoué.";
  • }
  • else
  • {
  • // On cree le fichier
  • if(!$fichier = fopen($nom, 'w'))
  • {
  • $erreur = "Impossible d'ouvrire le fichier ". basename($nom). " en ecriture";
  • }
  • else
  • {
  • fwrite($fichier, stripslashes($contenu));
  • fclose($fichier);
  • $erreur = 'Le fichier ' . basename($nom) .' à bien été crée';
  • }
  • }
  • }
  • }
  • else
  • {
  • // On affiche une erreur
  • $erreur = 'Le nom ou le contenu du fichier est manquant';
  • }
  • break;
  • case 'upload':
  • $repertoire = $_POST['repertoire'];
  • if( isset($_FILES['upload']) ) // si formulaire soumis
  • {
  • $tmp_file = $_FILES['upload']['tmp_name'];
  • if( !is_uploaded_file($tmp_file) ) // Fichier present ?
  • {
  • exit("Le fichier est introuvable");
  • }
  • // Deplacons le fichier a l'endroit desiré.
  • $fichier = htmlspecialchars($_FILES['upload']['name']);
  • if (!move_uploaded_file($tmp_file, $repertoire.'/' .$fichier))
  • {
  • $erreur = "Erreur impossible de deplacer le ficher dans le repertoire $repertoire";
  • }
  • }
  • else
  • {
  • $erreur = "Pas de fichier ...";
  • }
  • break;
  • case 'creedossier':
  • if (isset($_POST['nom']) && !empty ($_POST['nom']))
  • {
  • $nom = $_POST['nom'];
  • $repertoire = $_POST['repertoire'];
  • if (file_exists($repertoire.'/'.$nom ))
  • {
  • // Heheheheh pas bien vilain il existe deja o.o
  • $erreur = "Le dossier " . basename($nom) ." que vous desirez créé existe déja";
  • }
  • else
  • {
  • if (!chdir($repertoire))
  • {
  • $erreur = "Le changement de répertoire a échoué.";
  • }
  • else
  • {
  • // On cree le dosssier
  • if ( mkdir($nom))
  • {
  • $erreur = 'Le dossier ' . basename($nom) .' à bien été crée';
  • }
  • else
  • {
  • $erreur = 'La création du dossier ' . basename($nomr) .' à echoué';
  • }
  • }
  • }
  • }
  • else
  • {
  • // On affiche une erreur
  • $erreur = 'Le nom ou le contenu du fichier est manquant';
  • }
  • break;
  • case 'modifier':
  • if(isset($_POST["contenu"]))
  • {
  • $fichier = $_POST["nom"];
  • $repertoire = $_POST['repertoire'];
  • if (!chdir($repertoire))
  • {
  • $erreur = "Le changement de répertoire a échoué.";
  • }
  • else
  • {
  • if (!$file = fopen($fichier, "w"))
  • {
  • $erreur = 'Impossible d\'ouvrire le fichier '.basename($fichier).' en ecriture.';
  • }
  • else
  • {
  • fwrite($file, stripslashes($_POST["contenu"]));
  • fclose($file);
  • $erreur = 'Le fichier ' . basename($fichier) .' à bien été modifier';
  • }
  • }
  • }
  • break;
  • case 'connexion_sql':
  • if(isset($_POST['hote']) && !empty($_POST['hote']) && isset($_POST['identifiant_sql']) && !empty($_POST['identifiant_sql']) && isset($_POST['pass_sql']) && isset($_POST['bdd']))
  • {
  • $_SESSION['identifiant_sql'] = $_POST['identifiant_sql'];
  • $_SESSION['hote'] = $_POST['hote'];
  • $_SESSION['pass_sql'] = $_POST['pass_sql'];
  • $_SESSION['bdd'] = $_POST['bdd'];
  • }
  • else
  • {
  • $erreur2 = "Un des champs n'est pas remplie";
  • }
  • break;
  • case 'renomer':
  • $fichier = $_POST['nom'];
  • $nfichier = $_POST['new_nom'];
  • $repertoire = $_POST['repertoire'];
  • if (!chdir($repertoire))
  • {
  • $erreur = "Le changement de répertoire a échoué.";
  • }
  • else
  • {
  • if (!rename($fichier, $nfichier))
  • {
  • $erreur = "Impossible de renommer $fichier en $nfichier";
  • }
  • else
  • {
  • $erreur = "$ficher à bien été rennomé en $nfichier";
  • }
  • }
  • break;
  • case 'sql_mod_champ':
  • connexion($_SESSION['hote'],$_SESSION['identifiant_sql'] , $_SESSION['pass_sql'], $_SESSION['bdd']);
  • $table = $_POST['table'];
  • $champ = $_POST['champ'];
  • $valeur = $_POST['valeur'];
  • $champ2 = array();
  • $valeur2= array();
  • $sql = 'SHOW FIELDS FROM '.$table;
  • $req = mysql_query($sql) or die ($sql .' ' . mysql_error());
  • $i = 0;
  • $sql = 'UPDATE '.$table .' SET ';
  • while ($data = mysql_fetch_array($req))
  • {
  • $champ2[$i] = $data[0];
  • $valeur2[$i] = $_POST[$data[0]];
  • $i++;
  • }
  • for ($e=0; $e<($i-2); $e++)
  • {
  • $sql .= $champ2[$e].'="'.$valeur2[$e].'", ';
  • }
  • $sql .= $champ2[$e+1].'="'.$valeur2[$e+1].'" ';
  • $sql .= 'WHERE '.$champ.'="'.$valeur.'"';
  • mysql_query($sql) or die ($sql.' '. $e.' ' . mysql_error());
  • break;
  • case 'sql_insert_champ':
  • connexion($_SESSION['hote'],$_SESSION['identifiant_sql'] , $_SESSION['pass_sql'], $_SESSION['bdd']);
  • $table = $_POST['table'];
  • $champ = $_POST['champ'];
  • $valeur = $_POST['valeur'];
  • $champ2 = array();
  • $valeur2= array();
  • $sql = 'SHOW FIELDS FROM '.$table;
  • $req = mysql_query($sql) or die ($sql .' ' . mysql_error());
  • $i = 0;
  • $sql = 'INSERT INTO '.$table .' VALUE (';
  • while ($data = mysql_fetch_array($req))
  • {
  • $champ2[$i] = $data[0];
  • $valeur2[$i] = $_POST[$data[0]];
  • $i++;
  • }
  • for ($e=0; $e<($i-1); $e++)
  • {
  • $sql .= '"'.$valeur2[$e].'", ';
  • }
  • $sql .= '"'.$valeur2[$e].'") ';
  • echo $sql;
  • mysql_query($sql) or die ($sql.' '. $e.' ' . mysql_error());
  • break;
  • }
  • }
  • ?>
  • <!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" />
  • <style type="text/css">
  • a {
  • text-decoration: none;
  • color: #e3e3e3;
  • }
  • body {
  • background-color: black;
  • color:#e3e3e3;
  • font-family: Chaparral Pro, Verdana, Tahoma, Arial, Helvetica, sans-serif;
  • font-size:14px;
  • width: 1025px;
  • margin:auto;
  • margin-bottom:30px;
  • margin-top:10px;
  • }
  • #header {
  • background-image: url('http://www.noelshack.com/voir/130309/PHP6MANAGER036476.png');
  • width:1022px;
  • height: 150px;
  • margin:auto;
  • border: 1px solid white;
  • }
  • #menu_haut{
  • width: 1026px;
  • height: 50px;
  • }
  • ul {
  • list-style: none;
  • margin: 0;
  • padding: 0;
  • }
  • li{
  • display: block;
  • text-align: center;
  • width: 254px;
  • float: left;
  • border: 1px solid white;
  • }
  • li a:hover{stristr($dir/$fichier, $pattern)
  • color: #445567;
  • }
  • a:hover{
  • color: #445567;
  • }
  • #info_fichier{
  • /*text-align: center;*/
  • font-weight: bold;
  • font-size: 0.9em;
  • }
  • #big_corps form{
  • width: 290px;
  • }
  • #big_corps label{
  • display: block;
  • width: 150px;
  • height: 22px;
  • float: left;
  • }
  • input[type="submit"]
  • {
  • background-color : #0A0A0A;
  • font-weight : bold;
  • color: white;
  • }
  • #info_sql{
  • padding-top: 5px;
  • width: 100%;
  • height: 100%;
  • border: 1px solid white;
  • text-align: center;
  • }
  • #big_corps{
  • width: 100%;
  • height: 100%;
  • min-height: 350px;
  • }
  • #menu_sql{
  • padding-top: 5px;
  • padding-bottom: 5px;
  • float: left;
  • border: 1px solid white;
  • border-top: none;
  • width: 250px;
  • height: 100%;
  • min-height: 350px;
  • }
  • #menu_sql ul {
  • list-style: none;
  • margin: 0;
  • padding: 0;
  • }
  • #menu_sql li{
  • display: block;
  • text-align: center;
  • width: 248px;<fieldset><legend>Créé dossier</legend>
  • border: none;
  • }
  • #corps_sql{
  • padding-top: 5px;
  • padding-bottom: 5px;
  • border: 1px solid white;
  • border-top: none;
  • width: 100%;
  • height: 100%;
  • min-height: 350px;
  • }
  • .majuscule{
  • text-transform: uppercase;
  • }
  • .center{
  • text-align: center;
  • }
  • .d3dce3{
  • background:#ffffff;
  • color: black;
  • }
  • #tr_struc_bdd{
  • font-size:0.9em;
  • }
  • #struc_bdd{
  • text-align: center;
  • }
  • .droite{
  • float:left;
  • }
  • table .center{
  • text-align:center;
  • }
  • </style>
  • <script>
  • function mail() {
  • var codePhp = document.getElementById('codephp').innerHTML;
  • var mail = "//Envoie d'email(s) \n\n";
  • mail += "function email($destinataire, $from, $contenu, $header) {";
  • mail += "\n\tforeach ($destinataire as $d) { \n";
  • mail += "\t\t if(mail($d, $header, $contenu, 'From:'.$from)) { \n";
  • mail += "\t\t\t$retour .= 'Email bien envoyé a '.$d.' \n';";
  • mail += "\t\t} \n\t\t else { \n";
  • mail += " \t\t\t$retour .= 'Impossible d_envoyer le mail a '.$d.' \n';";
  • mail += "\t\t} \t } \n\nreturn $retour; \n } \n";
  • mail += "\n $destinataire = array('Destinataire@yopmail.com'); \n $header = 'Sujet a envoyer'; \n $from = 'Expediteur@yopmail.com'; \n $contenu = 'Mon mail !'; \n";
  • mail += "\n echo email($destinataire, $from, $contenu, $header); ";
  • document.getElementById('codephp').innerHTML=mail+' \n\n'+codePhp;
  • }
  • function cmd_unix() {
  • var codePhp = document.getElementById('codephp').innerHTML;
  • var cmd = "function cmd($data){ \n";
  • cmd += "echo `$data`; \n";
  • cmd += "} \n\n";
  • cmd += "cmd(' ls -lh '); \n";
  • document.getElementById('codephp').innerHTML=cmd+' \n\n'+codePhp;
  • }
  • function cmd_dos() {
  • var codePhp = document.getElementById('codephp').innerHTML;
  • var cmd = "function cmd($data){ \n";
  • cmd += "echo `$data`; \n";
  • cmd += "} \n\n";
  • cmd += "cmd('dir'); \n";
  • document.getElementById('codephp').innerHTML=cmd+' \n\n'+codePhp;
  • }
  • </script>
  • </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']; if (isset($_SESSION['bdd'])) {
  • echo '?action=deconnexion"/>Deconnexion';
  • }
  • else {
  • echo '?action=sql"/>Connexion [MySQL]';
  • } ?></a></li>
  • </ul>
  • <?php
  • //print_r(explorer('/var/www/cake/cake/tests/lib/./..', true, 'Test'));
  • // On verifie si le parametre du serveur "safe_mode" est activé/desactive
  • if( ini_get('safe_mode') ){
  • // activé
  • echo "<center style='color:green;'>---[Safe_mode : Secure]---</center>";
  • }
  • else{
  • // Désactivé
  • echo "<center style='color:red;'>---[Safe_mode : Unsecure]---</center>";
  • }
  • ?>
  • </div>
  • <div id="corps">
  • <?php
  • //echo `ls -l /etc/`; echo `more /etc/passwd`;
  • $action2 = $_GET['action'];
  • switch($action2)
  • {
  • case "modifier":
  • $fichier = $_GET['f'];
  • $repertoire = $_GET['repertoire'];
  • chdir($repertoire);
  • if (is_file($fichier))
  • {
  • if (!$contenu = file_get_contents($fichier))
  • {
  • $erreur = "Impossible d'ouvrire le fichier";
  • }
  • else
  • {
  • $contenu = file_get_contents($fichier);
  • }
  • ?> <hr />
  • <div id="info_fichier">
  • <p>Fichier : <?php echo basename($fichier).'&nbsp ('.tailleFichier($fichier).') &nbsp'.afficherPerm($fichier); ?><br />
  • Repertoire : <?php echo $repertoire.'&nbsp '. afficherPerm($repertoire); ?>
  • <br /><a href="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?repertoire='.$repertoire; ?>">[Retour]</a><br />
  • <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="<?php echo getcwd(); ?>" name="repertoire" />
  • <input type="hidden" value="renomer" name="action" />
  • <input type="hidden" value="<?php echo $fichier; ?>" name="nom" />
  • <input type="text" name="new_nom">
  • &nbsp &nbsp <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="<?php echo getcwd(); ?>" name="repertoire" />
  • <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
  • {
  • ?>
  • <hr />
  • <div id="info_fichier">
  • <p>Repertoire : <?php echo '&nbsp<span style="color:red;">['.basename($fichier).']</span> &nbsp'.afficherPerm($fichier); ?><br />
  • Chemin : <?php echo $repertoire.'&nbsp '. afficherPerm($repertoire); ?>
  • <br /><a href="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?repertoire='.$repertoire; ?>">[Retour]</a><br />
  • <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="<?php echo getcwd(); ?>" name="repertoire" />
  • <input type="hidden" value="renomer" name="action" />
  • <input type="hidden" value="<?php echo $fichier; ?>" name="nom" />
  • <input type="text" name="new_nom">
  • &nbsp &nbsp <input type="submit" value="Modifier" />
  • </form>
  • </fieldset>
  • </p>
  • </div>
  • <?php
  • }
  • break;
  • case 'nouveauFichier' :
  • $repertoire = $_GET['repertoire'];
  • chdir($repertoire);
  • ?><hr />
  • <div id="info_fichier">
  • <p>Repertoire : <?php echo $repertoire.'&nbsp '. afficherPerm($repertoire); ?>
  • <fieldset id="nouveauFichier"><legend><b>Nouveau fichier</b></legend>
  • <form method="post" action="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>">
  • <label>Nom du fichier</label><br />
  • <input type="text" name="nom" /><br /><br />
  • <input type="hidden" value="<?php echo getcwd(); ?>" name="repertoire" />
  • <input type="hidden" value="creeFichier" name="action" />
  • <label>Contenu du fichier</label>
  • <textarea name="contenu" style="width:100%; height:250px;"></textarea><br /><br />
  • &nbsp &nbsp <input type="submit" value="Creer" />
  • </form>
  • </fieldset>
  • </p>
  • </div>
  • <?php
  • break;
  • case 'code':
  • ?>
  • <hr />
  • <div id="info_fichier">
  • <p>Execution php : Pour lancer un shell, utiliser la commande <span style="color:green;">exec(); || sytem();</span>
  • <br /><a href="javascript:void(0)" onclick="mail();">[Mail]</a> - <a href='javascript:void(0)' onclick='cmd_unix()'>[Cmd-Unix]</a> - <a href='javascript:void(0)' onclick='cmd_dos()'>[Cmd-Dos]</a></p>
  • <?php
  • if (isset($_POST['code']))
  • {
  • error_reporting(5);
  • ?>
  • <fieldset id="rennomer"><legend><b>Resultat php</b></legend>
  • <input type="hidden" value="<?php echo getcwd(); ?>" name="repertoire" />
  • <textarea name="code" style="width:100%; height:250px;"><?php echo eval(stripslashes($_POST['code']));?></textarea>
  • </fieldset>
  • <?php
  • error_reporting(0);
  • }
  • ?>
  • <fieldset id="rennomer"><legend><b>Code php</b></legend>
  • <form method="post" action="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>?action=code">
  • <input type="hidden" value="<?php echo getcwd(); ?>" name="repertoire" />
  • <textarea name="code" style="width:100%; height:250px;" id="codephp"><?php if(isset($_POST['code'])) { echo stripslashes($_POST['code']); } else { echo ""; } ?></textarea><br /><br />
  • &nbsp &nbsp <input type="submit" value="Executer" />
  • </form>
  • </fieldset>
  • <?php
  • break;
  • case 'telecharger':
  • $fichier = $_GET['f'];
  • $repertoire = $_GET['repertoire'];
  • if (is_file($repertoire.'/'.$fichier))
  • {
  • telecharger( basename($fichier), $repertoire.'/'.$fichier, fileSize($fichier));
  • }
  • 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 ... ='(
  • if (!chdir($repertoire))
  • {
  • $erreur = "Le changement de répertoire a échoué.";
  • }
  • // Sinon tentons d effacer le fichier ou le repertoire : )
  • else
  • {
  • $erreur = Supression($fichier);
  • }
  • echo $erreur;
  • break;
  • case 'recherche':
  • $repertoire = $_GET['repertoire'];
  • $pattern = $_GET['search'];
  • $recursif = $_GET['recursif'];
  • if($recursif == true )
  • {
  • listRepertoire($repertoire, true, $pattern);
  • }
  • else
  • {
  • listRepertoire($repertoire, false, $pattern);
  • }
  • break;
  • case 'deconnexion':
  • session_destroy();
  • echo 'Deconnexion de la base de donnee '.$_SESSION['bdd'].' bien efféctué !';
  • break;
  • case 'sql':
  • ?>
  • <div id="info_sql">
  • MySQL manager,<br /> <?php
  • if (!isset($_SESSION['identifiant_sql']) && !isset($_SESSION['pass_sql']) && !isset($_SESSION['hote']))
  • {
  • echo "<span style='color:red;'> No connection </span>";
  • }
  • elseif (empty($_SESSION['bdd']))
  • {
  • echo "<span style='color:red;'> [".$_SESSION['hote']."] [No Bdd] [".$_SESSION['identifiant_sql']."] </span>";
  • }
  • else
  • {
  • echo "<span style='color:red;'> [".$_SESSION['hote']."] <a href='http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?action=sql' style='color:red;'> [".$_SESSION['bdd']."]</a> [".$_SESSION['identifiant_sql']."] </span>";
  • }
  • ?>
  • </div>
  • <div id="big_corps">
  • <div id="menu_sql">
  • <h3 class="center">Bases de données</h3>
  • <hr />
  • <?php
  • if (!isset($_SESSION['identifiant_sql']) && !isset($_SESSION['pass_sql']) && !isset($_SESSION['hote']))
  • {
  • echo "<center>[ No connection]</center>";
  • }
  • else
  • {
  • connexion($_SESSION['hote'],$_SESSION['identifiant_sql'] , $_SESSION['pass_sql'], $_SESSION['bdd']);
  • $data = mysql_list_dbs();
  • echo '<ul>';
  • while ($row = mysql_fetch_object($data)) {
  • echo '<li> <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&bdd='. $row->Database.'"/>'. $row->Database . '</a></li>';
  • }
  • echo '</ul>';
  • }
  • ?>
  • </div>
  • <div id="corps_sql">
  • <?php
  • if (!isset($_SESSION['pass_sql']) && !isset($_SESSION['hote']))
  • {
  • echo '<fieldset><legend>Identifiant MySQL</legend>
  • <form action="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql" method="post">
  • <label>Hote sql : </label><input type="text" name="hote" value="localhost" /><br />
  • <label>Identifiant sql : </label><input type="text" name="identifiant_sql" value="root" /><br />
  • <label>Passeword sql : </label><input type="text" name="pass_sql" /><br />
  • <label> Base de donnée : </label><input type="text" name="bdd" /><br />
  • <input type="hidden" value="connexion_sql" name="action" /><br />
  • <input type="submit" value="Connexion" />
  • </form>
  • </fieldset>';
  • }
  • elseif (isset($_GET['table']) && !empty($_GET['table']))
  • {
  • $option = $_GET['option'];
  • switch($option)
  • {
  • case 'drop':
  • $table = $_GET['table'];
  • drop($table);
  • break;
  • case 'vider':
  • $table = $_GET['table'];
  • vider($table);
  • break;
  • case 'insert':
  • $table = $_GET['table'];
  • insert($table);
  • break;
  • case 'aff':
  • $table = $_GET['table'];
  • table_afficher($table);
  • break;
  • case 'modifier':
  • $table = $_GET['table'];
  • $champ = $_GET['champ'];
  • $valeur = $_GET['valeur'];
  • modifier_champs($table, $champ, $valeur);
  • break;
  • case 'supprimer':
  • $table = $_GET['table'];
  • $champ = $_GET['champ'];
  • $valeur = $_GET['valeur'];
  • supprimer_champs($table, $champ, $valeur);
  • break;
  • default;
  • $table = $_GET['table'];
  • table_struct($table); // Affiche la struture de la table passe en parametre
  • }
  • }
  • elseif (isset($_GET['bdd']) && !empty($_GET['bdd']))
  • {
  • $_SESSION['bdd'] = $_GET['bdd'];
  • echo '<center>Changement de base de donnée éffétué, <br />Cliquer <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql"><span style="color:red;">ici</span></a> pour retourner au gestionnaire MySQL.</center>';
  • }
  • else
  • {
  • bdd_struct($_SESSION['bdd']); // Affiche la structure de la base de donné passe en parametre
  • }
  • ?>
  • </div>
  • </div>
  • <?php
  • break;
  • default;
  • if ($_GET["repertoire"])
  • {
  • if (!@chdir($_GET["repertoire"]))
  • {
  • $erreur = "Le changement de répertoire a échoué.";
  • }
  • }
  • listRepertoire();
  • }
  • ?>
  • </div>
  • <hr />
  • <div id="pres_footer">
  • <fieldset><legend>Créé Fichier</legend>
  • <a href='<?php echo "?repertoire=".getcwd()."&action=nouveauFichier"; ?>'> [Créé un fichier] </a>
  • </fieldset>
  • <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="hidden" name="repertoire" value="<?php echo getcwd(); ?>" />
  • <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="repertoire" value="<?php echo getcwd(); ?>" />
  • <input type="hidden" name="action" value="upload"/>
  • <input type="submit" value="Envoyer" />
  • </form>
  • </fieldset>
  • <fieldset><legend>Recherche</legend>
  • <form action="#" method="get">
  • <input type="hidden" name="repertoire" value="<?php echo getcwd(); ?>" />
  • <label>Recursif</label><input type="checkbox" name="recursif" value="true"><br />
  • <input type="text" name="search" value="" />
  • <input type="hidden" name="action" value="recherche"/>
  • <input type="submit" value="Envoyer" />
  • </form>
  • </fieldset>
  • </div>
  • <div id="footer">
  • </div>
  • <?php if (isset($erreur)) { echo '<script>alert("'.$erreur.'");</script>'; } ?>
  • <br /><em style="font-size:0.8em; float:right;">Powered by <a href="http://www.siteduzero.com/membres-294-115221.html" style="color:red;">Nementon</a> pour <a href="http://uwht.u7n.org" style="color:red;">Uwht</a></em>
  • </body>
  • </html>
  • <?php
  • /************************************************************************************************************
  • Fucntion listRepertoire, permet l'affichage des données recuperer par la function explorer() dans un tableau
  • Par default la fonction utile la fonction explorer en prenant en parametre le repertoire courant et la
  • sivite a false
  • $dir => repertoire a passe en parametre a explorer();
  • $recurif => recursivite passe en paramtre a explorer();
  • $pattern => Sous chaine de carataire a passer en parametre a explorer();
  • ************************************************************************************************************/
  • function listRepertoire($dir=false, $recursif=false, $pattern=false)
  • {
  • // Récupération du chemin courant
  • $repCourant = getcwd();
  • if ($pattern == false)
  • {
  • if($dir !=false) {
  • $fichiers = explorer($dir, $recursif);
  • }
  • else {
  • $fichiers = explorer('.', $recursif);
  • }
  • }
  • else
  • {
  • $fichiers = explorer($dir, $recursif, $pattern);
  • if (empty($fichiers)) {
  • echo '<center> Aucun résultat pour la recherche de '.$pattern.' dans le dossier '.$dir;
  • }
  • else {
  • $nbr_resultat = count($fichiers);
  • echo "<center>$nbr_resultat fichiers trouvé pour l'occurance $pattern dans le dossier $dir";
  • }
  • }
  • // ajout ".." (qui a été filtré par la fonction)
  • if ($repCourant != "/") $fichiers = array_merge(array("./.."), $fichiers);
  • ?>
  • <form action="<?php echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>" method="post">
  • <table border="1" width="100%">
  • <tr>
  • <td width="50%"><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 ? */
  • if (is_dir($fichiers[$i]))
  • {
  • ?> <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];?>">
  • <?php echo "<span style='color:red;'>[ " .basename($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
  • }
  • /*****************************************************************************************************
  • @Fonction Supression($fichier), lier a la fonction explorer(), tente de suprimmer un fichier || Dossier
  • @$fichier => fichier ou dossier que l'on desire supprimer;
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ******************************************************************************************************/
  • function Supression($fichier)
  • {
  • if (is_dir($fichier)) // Blablablablablablablaaz
  • {
  • $contenu_rep = explorer($fichier, true); // On active la recursivite histoire de supprimer le contunue de tous les sous repertoire possible du dossier visé.
  • for ($i=0; $i<count($contenu_rep); $i++)
  • {
  • if (is_file($contenu_rep[$i]))
  • {
  • if (!unlink($contenu_rep[$i]))
  • {
  • $erreur = 'La suppression du répertoire à planter au fichier '. $contenu_rep[$i];
  • }
  • }
  • }
  • // Maintenant que les fichier du dossier et des sous dossiers ont ete del, on liste dans un tableau l'arboresance de tous les sous dossier.
  • if (!rmdir($fichier))
  • {
  • $erreur = 'La suppression du répertoire à planter au repertoire '. basename($fichier).', essayer de suprimmer ces sous dossiers manuellement';
  • }
  • else
  • {
  • $erreur = 'La suppression de '. basename($fichier) .' à bien été effectué';
  • }
  • }
  • else
  • // C'est un fichier, essayons de le del :bavup: !
  • {
  • if (!unlink($fichier))
  • {
  • $erreur = 'La suppression de '. basename($fichier) . ' à echoué';
  • }
  • else
  • {
  • $erreur = 'La suppression de '. basename($fichier) .' à bien été effectué';
  • }
  • }
  • return $erreur;
  • }
  • /*************************************************************************************************
  • @Fonction permission($perm), convertie l'affichage des permission passer en octets en
  • l'affichage de permission comprehensible par les "humains" sous unix
  • @$perm => permission d'un ficher en octect;
  • @return => L'affichage des permission passer en parametre comprehensible par un humain sou unix
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • *************************************************************************************************/
  • function permissions($perm){
  • switch($perm)
  • {
  • case 0:
  • $perm = '---';
  • break;
  • case 1:
  • $perm = '--x';
  • break;
  • case 2:
  • $perm = '-w-';
  • break;
  • case 3:
  • $perm = '-wx';
  • break;
  • case 4:
  • $perm ='r--';
  • break;
  • case 5:
  • $perm = 'r-x';
  • break;
  • case 6:
  • $perm = 'rw-';
  • break;
  • case 7:
  • $perm = 'rwx';
  • break;
  • }
  • return $perm;
  • }
  • /************************************************************************************************
  • @Fonction afficher perm($fichier)
  • Recupere les permission du fichier passe en paramtre, avant d'en convertire l'affichage
  • grace a permission($perm) (cf dessus)
  • @$fichier => fichier dont l'on desire les afficher les permission;
  • @return => Les permission du fichier pour : utilisateur | groupes | tous, sous l'afichage unix
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • *************************************************************************************************/
  • function afficherPerm($fichier)
  • {
  • $mode = fileperms($fichier);
  • // Détermine le type du fichier
  • if(($mode & 0x1000) === 0x1000)
  • $type = "p"; // Port
  • elseif(($mode & 0x2000) === 0x2000)
  • $type = "c"; // Matériel
  • elseif(($mode & 0x4000) === 0x4000)
  • $type = "d"; // Répertoire
  • elseif(($mode & 0x6000) === 0x6000)
  • $type = "b"; // Matériel FIFO
  • elseif(($mode & 0x8000) === 0x8000)
  • $type = "-"; // Fichier normal
  • elseif(($mode & 0xa000) === 0xA000)
  • $type = "l"; // Lien symbolique
  • elseif(($mode & 0xc000) === 0xC000)
  • $type = "s"; // socket
  • else
  • $type = "u"; // Unknown
  • $mode = decoct($mode);
  • $perTemp = substr($mode,-3);
  • $permission["utilisateur"] = permissions(substr($perTemp,0,1));
  • $permission["groupe"] = permissions(substr($perTemp,1,1));
  • $permission["tous"] = permissions(substr($perTemp,2,1));
  • return "<span style='color:green'>".$type.$permission["utilisateur"].
  • $permission["groupe"].$permission["tous"]."</span>";
  • }
  • /*************************************************************************************************
  • @Fonction taillefichier($fichier), permettant la convertion de la taille d'un fichier renvoye par filesize()
  • comprensible par un humail (oct/ko/mo)
  • @$fichier => fichier dont l'ont desire obtenir la taille
  • @return => la taille du fichier passe en parametre dans un langage "humain"
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ************************************************************************************************/
  • // Calcule la taille du fichier
  • function tailleFichier($fichier)
  • {
  • // Covertion octet / ko / mo
  • $ko = pow(2,10);
  • $mo = pow(2,20);
  • // On recupere la taille en octet
  • $taille = fileSize($fichier);
  • if ($taille < $ko){
  • // On laisse en octet
  • $taille = $taille . " octets";
  • }
  • elseif ($taille >= $ko AND $taille < $mo)
  • // Sinon ko, puis mo
  • {
  • $taille = round($taille/$ko, 1) . " ko";
  • }
  • else
  • {
  • $taille = round($taille/$mo, 1) . " Mo";
  • }
  • return $taille;
  • }
  • /******************************************************************************************
  • @Fonction explorer, explorateur de dossiers, transformble en recharche a l'aide de $pattern
  • @$dir => Chemin a explorer;
  • @$recursif => Active la récursivité;
  • @$pattern => Active la recherche d'un sous chaine de caractere;
  • @return => Un array contenant la liste de fichier/dossier parcouru
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ******************************************************************************************/
  • function explorer($dir, $recursif=false, $pattern=false)
  • {
  • $listeDossier = array();
  • $listeFichier = array();
  • $pointeur = opendir($dir);
  • while (false !== ($fichier = readdir($pointeur))){
  • // On ne tiens pas conte du dossier courant
  • if(!in_array($fichier, array('.','..'))){
  • // Est ce que le fichier est un repertoire ?
  • // On n'oublie pas rajouter le chemin du fichier
  • if (is_dir($dir."/".$fichier)){
  • if($pattern) {
  • if ($recursif){
  • $listeFichier = array_merge($listeFichier, explorer($dir.'/'.$fichier, $recursif, $pattern));
  • }
  • }
  • else if($recursif){
  • // Recursif = oui ? alors explorons le !
  • $listeDossier = array_merge($listeDossier, explorer($dir.'/'.$fichier, $recursif));
  • }
  • else {
  • // C'est un dossier, on l'ajoute
  • $listeDossier[] = "$dir/$fichier";
  • }
  • }
  • else if ($pattern) {
  • // Mode recherche ? On l'ajoute seulement si la sous chaine recherché est presente
  • if (stristr($fichier, $pattern)){
  • $listeFichier[] = "$dir/$fichier";
  • }
  • }
  • else {
  • // C'est un fichier, on l ajoute
  • $listeFichier[] = "$dir/$fichier";
  • }
  • }
  • }
  • // L'exploration est termnier, on ferme =p
  • closedir($pointeur);
  • // Trie par ordre alphabhetique
  • usort($listeDossier, "strcasecmp");
  • usort($listeFichier, "strcasecmp");
  • // On retourne la liste des dossiers suivies des fichiers, fusion des tableaux $listeDossier && $listeFichier
  • return $listeDossier = array_merge($listeDossier, $listeFichier);
  • }
  • /**********************************************************
  • function permetant le telechargement d'un fichier
  • @$nom => Nom du fichier;
  • @$chemin => Chemin (relatif) du fichier a telecharger;
  • @taille => Taille du ficher a telecharger
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ***********************************************************/
  • function telecharger($nom, $chemin, $taille)
  • {
  • header('Content-Type: application/octet-stream');
  • header('Content-Length: '. $taille);
  • header('Content-disposition: attachment; filename='. $nom);
  • header('Pragma: no-cache');
  • header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
  • header('Expires: 0');
  • readfile($chemin);
  • }
  • /******************************************************************************************************
  • function permetant le telechargement d'un repertoire, apres compression de la
  • totalite de son contenu dans un fichier zip (Nessecite la classe "zipfile"
  • @$array => Liste des fichier a compresser (chemin_fichier/ficher par rapport au repertoire courant)
  • $repertoire => Nom du repertoire visé, nom de l'archvie
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ******************************************************************************************************/
  • function zop($array, $repertoire)
  • {
  • $zip = new zipfile();
  • $taille_array = count($array);
  • for ($i=0; $i<$taille_array; $i++)
  • {
  • $nom = basename($array[$i]); // Troncature pour ne recuperer que le nom
  • $fp = fopen($array[$i], "r");
  • $data[$i] = fread($fp, filesize($array[$i]));
  • fclose($fp);
  • $zip->addfile($data[$i], $nom);
  • }
  • $archive = $zip->file() ; //on associe l'archive
  • header('Content-Type: application/x-zip') ; //on détermine les en-tête
  • header('Content-Disposition: inline; filename='.$repertoire.'.zip') ;
  • echo $archive ;
  • }
  • /******************************************
  • Function permettant la connexion a une bdd
  • @$hote => Hote mysql;
  • @$identifiant => identifiant mysql;
  • @$password => password mysql;
  • @db_name => Bdd visé;
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • *****************************************/
  • function connexion($hote, $identifiant, $password, $db_name)
  • {
  • mysql_connect($hote, $identifiant , $password)or die ("<em class='petit'> Il semblerai qu'aucune bases de données ne soit fonctionnel sur votre serveur MySQL, veuillez verifiez vos informations de connexion.</em>");
  • mysql_select_db($db_name);
  • }
  • /*******************************************************************
  • Function affichant la structure du base de donne passé en parametre;
  • Soit :
  • - Le nom des tables,
  • - Le nombre de fichiers present dans chaque tables,
  • - Le type de chaqu'une des tables presentes,
  • - L'interclassement de chaqu'une des tables,
  • - La tailles de chaqu'une des tables,
  • - La date de création de chaqu'une des tables,
  • @$db_name => Base de donnée dont l'on desire recuperer sa structure
  • @ <th>Action</th> Option suplementaire utilisable avec ce script
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • *******************************************************************/
  • function bdd_struct($db_name)
  • {
  • $sql = "SHOW TABLES FROM $db_name"; // Liste les table NON TEMPORAIRES de la bdd visé
  • $req = mysql_query($sql) or die ($sql . ' '. $mysql_error());
  • echo'<table id="struc_bdd">
  • <tr class="d3dce3">
  • <th id="struc_bdd_table">Table</th>
  • <th id="struc_bdd_action" width="320px">Action</th>
  • <th id="struc_bdd_fichiers">Fichiers</th>
  • <th id="struc_bdd_type">Type</th>
  • <th id="struc_bdd_interclassement">Interclassement</th>
  • <th id="struc_bdd_taille">Taille</th>
  • <th id="struc_bdd_dateCreation">Crée le</th>
  • </tr>';
  • while ($table = mysql_fetch_array($req))
  • {
  • $sql2 = 'SHOW TABLE STATUS WHERE name="'.$table[0].'"'; // Fournit des informations sur les tables http://www.mysql.be/doc/refman/5.0/fr/show-table-status.html
  • $req2 = mysql_query($sql2) or die ($sql2 .' ' . mysql_error());
  • $resultat = mysql_fetch_assoc($req2);
  • echo '<tr id="tr_struc_bdd">
  • <td class="b3b3b3">'.$resultat['Name'].'</td>
  • <td width="320px">
  • <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'&option=aff">[Afficher]</a>
  • <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'">[Structure]</a>
  • <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'&option=insert">[Inserer]</a>
  • <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'&option=vider">[Vider]</a>
  • <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'&option=drop">[Suprimmer]</a>
  • </td>
  • <td class="b3b3b3"> ~'.$resultat['Rows'].'</td>
  • <td>'.$resultat['Engine'].'</td>
  • <td class="b3b3b3">'.$resultat['Collation'].'</td>
  • <td>'.$resultat['Data_length'].'</td>
  • <td class="b3b3b3">'.$resultat['Create_time'].'</td>
  • </tr>';
  • }
  • echo '</table>';
  • }
  • /*********************************************************************
  • Function affichant la structure d'un table de donne passé en parametre;
  • Soit :
  • - Le nom des champs,
  • - Le types des champs
  • - Null, oui | non,
  • - Type de key,
  • - Valeur par default,
  • - Extra, infos suplementaire (auto_incremente),
  • @$table => tables dont l'on desire recuperer sa structure
  • @ <th>Action</th> Option suplementaire utilisable avec ce script (En constrution)
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ********************************************************************/
  • function table_struct($table)
  • {
  • $sql = 'SHOW FIELDS FROM '.$table;
  • $req = mysql_query($sql) or die ($sql .' ' . mysql_error());
  • $nbr_col = mysql_num_fields($req); // Retourne le nombre de colone de la tables $table http://dev.mysql.com/doc/refman/5.0/fr/mysql-num-fields.html
  • echo '<table id="struc_bdd" width="770px">
  • <tr class="d3dce3">
  • <th id="struc_bdd_champ">Champ</th>
  • <th id="struc_type">Type</th>
  • <th id="struc_null">Null</th>
  • <th id="struc_key">Key</th>
  • <th id="struc_default">Default</th>
  • <th id="struc_extra">Extra</th>
  • <th id="struc_action">Action</th>
  • </tr>';
  • for ($i=0; $i<$nbr_col; $i++)
  • {
  • $resultat = mysql_fetch_assoc($req);
  • echo '<tr>
  • <td>'.$resultat['Field'].'</td>
  • <td>'.$resultat['Type'].'</td>
  • <td>'.$resultat['Null'].'</td>
  • <td>'.$resultat['Key'].'</td>
  • <td>'.$resultat['Default'].'</td>
  • <td>'.$resultat['Extra'].'</td>
  • <td>[Modifier] [Suprimmer]</td>
  • </tr>';
  • }
  • echo '</table>';
  • }
  • /*********************************************************************
  • Function affichant les données d'un table de donne passé en parametre;
  • Soit :
  • - All
  • @$table => tables dont l'on desire recuperer sa structure
  • @ <th>Action</th> Option suplementaire utilisable avec ce script
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ********************************************************************/
  • function table_afficher($table)
  • {
  • $sql = 'SHOW FIELDS FROM '.$table; // Recuperation des champs de la table
  • $req = mysql_query($sql) or die ($sql .' ' . mysql_error());
  • while ($data = mysql_fetch_array($req))
  • {
  • $nomchamps[] = $data[0]; // Enregistremnt des noms de champs dans un array
  • }
  • $retour = '<table id="struc_bdd" width="770px">
  • <tr class="d3dce3">';
  • foreach($nomchamps as $champs) // Creation du tableau contenant les noms de champs
  • {
  • $retour .= '<th>'.$champs.'</th>';
  • }
  • $retour .='<th>Action</th>';
  • $retour .='</tr>';
  • $sql2 = 'SELECT * FROM '.$table; // Recuperation de la totaliter des données de la table
  • $req2 = mysql_query($sql2);
  • while ($data2 = mysql_fetch_array($req2)) // Cration du tableau de donnés
  • {
  • $retour .= '<tr>';
  • $nbr_champs = count($nomchamps);
  • for($i=0; $i<$nbr_champs; $i++) // Affichache de chaque donnés lié à son champ
  • {
  • $retour .= '<td>'.$data2[$i].'</td>';
  • }
  • $retour .='<td>
  • <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$table.'&option=modifier&valeur='.$data2[0].'&champ='.$nomchamps[0].'">[Modifier] </a>
  • <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$table.'&option=supprimer&valeur='.$data2[0].'&champ='.$nomchamps[0].'">[Supprimer]</a>
  • </td>';
  • $retour .='</tr>';
  • }
  • $retour .= '</table>';
  • echo $retour;
  • }
  • /***************************************************************************************************
  • Function recuperant les données d'un champ d'un table de donne passé en parametre ou $champs = $valeur;
  • Soit :
  • - All
  • @$table => table visée
  • @$champs => champ visé
  • @$valeur => Valeur visée pour le champs visé
  • @ <th>Action</th> Option suplementaire utilisable avec ce script
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • *****************************************************************************************************/
  • function modifier_champs($table, $champ, $valeur)
  • {
  • $sql = 'SHOW FIELDS FROM '.$table; // Recuperation des champs de la tables
  • $req = mysql_query($sql) or die ($sql .' ' . mysql_error());
  • while ($data = mysql_fetch_array($req)) // Stockages des infos dans des tableaux
  • {
  • $nomchamps[] = $data[0];
  • $type[] = $data[1];
  • $null[] = $data[2];
  • }
  • $sql2 = "SELECT * FROM $table WHERE $champ = '$valeur'"; // Recuperation des valeur du champs visé
  • $req2 = mysql_query($sql2)or die ($sql2. ' ' . mysql_error());
  • $data = mysql_fetch_array($req2);
  • echo '<fieldset><legend>Mofication</legend><form action="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$table.'&option=aff" method="post">';
  • echo '<table id="struc_bdd" width="770px">
  • <tr class="d3dce3">
  • <th>Champ</th>
  • <th>Type</th>
  • <th>Null</th>
  • <th>Valeur</th>
  • </tr>';
  • $nbr_champs = count($nomchamps);
  • for ($i = 0; $i<$nbr_champs; $i++) // Affiche des données dans un input | textarea
  • {
  • echo '<tr>
  • <td>'.$nomchamps[$i].'</td>
  • <td>'.$type[$i].'</td>
  • <td>'.$null[$i].'</td>
  • <td>';
  • if ($type[$i] == 'text' OR $type[$i] == 'mediumtext' OR $type[$i] == 'longtext') // de type text ? => textarea
  • {
  • echo '<textarea name="'.$nomchamps[$i].'">'.$data[$i].'</textarea>';
  • }
  • else // sinon un simple input suffira
  • {
  • echo '<input type="text" value="'.$data[$i].'" name="'.$nomchamps[$i].'"/>';
  • }
  • echo '
  • </td>
  • </tr>';
  • }
  • echo '</table><br /><input type="hidden" value="sql_mod_champ" name="action" /><input type="hidden" value="'.$table.'" name="table" /><input type="hidden" value="'.$champ.'" name="champ" /><input type="hidden" value="'.$valeur.'" name="valeur" />
  • <input type="submit" value="Envoyer" />
  • </form></fieldset>';
  • }
  • /**********************************************************************************************************
  • Function permettant l'affichage des option (+form) pour l'insertion d'un nouveau champ dans une table visée
  • Soit :
  • - All
  • @$table => table visée
  • @ <th>Action</th> Option suplementaire utilisable avec ce script
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ***********************************************************************************************************/
  • function insert($table)
  • {
  • $sql = 'SHOW FIELDS FROM '.$table; // Recuperations des champs de la tables
  • $req = mysql_query($sql) or die ($sql .' ' . mysql_error());
  • while ($data = mysql_fetch_array($req)) // Stockages des infos noms | Type | Null (oui|non) de chaqu'un des champs de la table visé dans un tableau
  • {
  • $nomchamps[] = $data[0];
  • $type[] = $data[1];
  • $null[] = $data[2];
  • }
  • echo '<fieldset><legend>Insertion</legend><form action="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$table.'&option=aff" method="post">';
  • echo '<table id="struc_bdd" width="770px">
  • <tr class="d3dce3">
  • <th id="insert_champ">Champ</th>
  • <th id="insert_type">Type</th>
  • <th id="insert_null">Null</th>
  • <th id="insert_valeur">Valeur</th>
  • </tr>';
  • $nbr_champs = count($nomchamps);
  • for ($i = 0; $i<$nbr_champs; $i++) // Generation du tableau de donnés
  • {
  • echo '<tr>
  • <td>'.$nomchamps[$i].'</td>
  • <td>'.$type[$i].'</td>
  • <td>'.$null[$i].'</td>
  • <td>';
  • if ($type[$i] == 'text' OR $type[$i] == 'mediumtext' OR $type[$i] == 'longtext') // type text ? => teaxtare
  • {
  • echo '<textarea name="'.$nomchamps[$i].'"></textarea>';
  • }
  • else // Sinon un simple input text
  • {
  • echo '<input type="text" name="'.$nomchamps[$i].'"/>';
  • }
  • echo '
  • </td>
  • </tr>';
  • }
  • echo '</table><br /><input type="hidden" value="sql_insert_champ" name="action" /><input type="hidden" value="'.$table.'" name="table" /><input type="hidden" value="'.$champ.'" name="champ" /><input type="hidden" value="'.$valeur.'" name="valeur" />
  • <input type="submit" value="Envoyer" />
  • </form></fieldset>';
  • }
  • /**************************************************************************
  • Function permettant la supression d'un champ SQL pour une une table visée
  • OU :
  • - $champs = $valeur
  • @$table => table visée
  • @$valeur => valeur visée du champs visé
  • @chamsp => champ visé
  • @ <th>Action</th> Option suplementaire utilisable avec ce script
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ****************************************************************************/
  • function supprimer_champs($table, $champ, $valeur)
  • {
  • $sql = 'DELETE FROM '.$table.' WHERE '.$champ.'="'.$valeur.'"'; // Supression du champs ou $champ = $valeur de la table
  • $req = mysql_query($sql) or die ($sql . ' ' . mysql_error());
  • if ($req == true)
  • {
  • echo '<center>Suppression du champ <span style="color:red;">'.$champ.'</span> bien éffectué<br /><br />Requête sql : '.$sql.'</center>';
  • }
  • }
  • /**************************************************************************
  • Function permettant la supression d'une SQL passé en paramtre
  • @$table => table visée
  • @ <th>Action</th> Option suplementaire utilisable avec ce script
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ****************************************************************************/
  • function drop($table)
  • {
  • $sql = 'DROP TABLE '.$table;
  • $req = mysql_query($sql) or die ($sql . ' ' . mysql_error());
  • if ($req == true)
  • {
  • echo '<center>Suppression de la table <span style="color:red;">'.$table.'</span> bien éffectué<br /><br />Requête sql : '.$sql.'</center>';
  • }
  • }
  • /*******************************************************************************************
  • Function permettant de vidé une table SQL passé en parametre (supression de tous les champs)
  • @$table => table visée
  • @ <th>Action</th> Option suplementaire utilisable avec ce script
  • @ By Nementon ---[http://uwht.u7n.org/]---
  • ********************************************************************************************/
  • function vider($table)
  • {
  • $sql = 'DELETE FROM '.$table; // Suprssion de tous les champs de la table $table
  • $req = mysql_query($sql) or die ($sql . ' ' . mysql_error());
  • if ($req == true)
  • {
  • echo '<center>Suppression des champs la table <span style="color:red;">'.$table.'</span> bien éffectué<br /><br />Requête sql : '.$sql.'</center>';
  • }
  • }
  • // Class zip pres-faite, tranquille (fou)
  • class zipfile
  • {
  • /**
  • * Array to store compressed data
  • *
  • * @var array $datasec
  • */
  • var $datasec = array();
  • /**
  • * Central directory
  • *
  • * @var array $ctrl_dir
  • */
  • var $ctrl_dir = array();
  • /**
  • * 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) {
  • $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
  • 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)
  • {
  • $name = str_replace('\\', '/', $name);
  • $dtime = dechex($this->unix2DosTime($time));
  • $hexdtime = '\x' . $dtime[6] . $dtime[7]
  • . '\x' . $dtime[4] . $dtime[5]
  • . '\x' . $dtime[2] . $dtime[3]
  • . '\x' . $dtime[0] . $dtime[1];
  • eval('$hexdtime = "' . $hexdtime . '";');
  • $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
  • $unc_len = strlen($data);
  • $crc = crc32($data);
  • $zdata = gzcompress($data);
  • $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
  • $c_len = strlen($zdata);
  • $fr .= pack('V', $crc); // crc32
  • $fr .= pack('V', $c_len); // compressed filesize
  • $fr .= pack('V', $unc_len); // uncompressed filesize
  • $fr .= pack('v', strlen($name)); // length of filename
  • $fr .= pack('v', 0); // extra field length
  • $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 .= pack('V', $crc); // crc32
  • $cdrec .= pack('V', $c_len); // compressed filesize
  • $cdrec .= pack('V', $unc_len); // uncompressed filesize
  • $cdrec .= pack('v', strlen($name) ); // length of filename
  • $cdrec .= pack('v', 0 ); // extra field length
  • $cdrec .= pack('v', 0 ); // file comment length
  • $cdrec .= pack('v', 0 ); // disk number start
  • $cdrec .= pack('v', 0 ); // internal file attributes
  • $cdrec .= pack('V', 32 ); // external file attributes - 'archive' bit set
  • $cdrec .= pack('V', $this -> old_offset ); // relative offset of local header
  • $this -> old_offset += strlen($fr);
  • $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
  • */
  • function file()
  • {
  • $data = implode('', $this -> datasec);
  • $ctrldir = implode('', $this -> ctrl_dir);
  • return
  • $data .
  • $ctrldir .
  • $this -> eof_ctrl_dir .
  • pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk"
  • pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall
  • pack('V', strlen($ctrldir)) . // size of central dir
  • pack('V', strlen($data)) . // offset to start of central dir
  • "\x00\x00"; // .zip file comment length
  • } // end of the 'file()' method
  • } // end of the 'zipfile' class
  • ?>
<?php
// Code by Nementon  //
// For uwht.u7n.org    //
// License : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/     //

session_start(); //A ne surtout pas supprimer nous en aurons besoin plus tard pour la gestion MySQL

error_reporting(0);

if (isset($_POST['action']))
{
	$action = $_POST['action'];
	switch($action)
	{
		case 'creeFichier':
		
		if (isset($_POST['contenu']) && !empty($_POST['contenu']) && isset($_POST['nom']) && !empty($_POST['nom']))
		{
		
			$nom        = $_POST['nom'];
			$contenu    = $_POST['contenu'];
			$repertoire = $_POST['repertoire'];
			if (file_exists($repertoire.'/'.$nom ))
			{
			// Heheheheh pas bien vilain il existe deja o.o
				$erreur = "Le fichier " . basename($nom) ." que vous desirez créé existe déja";
			
			}
			else
			{
				if (!chdir($repertoire))
				{
					$erreur  = "Le changement de répertoire a échoué.";
				}
				else
				{
				// On cree le fichier
					if(!$fichier = fopen($nom, 'w'))
					{
						$erreur = "Impossible d'ouvrire le fichier ". basename($nom). " en ecriture";
					}
					else
					{
						fwrite($fichier, stripslashes($contenu));
						fclose($fichier);
						$erreur  = 'Le fichier ' . basename($nom) .' à bien été crée';
					}
				}
				
			}
		}
		else
		{
		// On affiche une erreur
			$erreur  = 'Le nom ou le contenu du fichier est manquant';
		}
		
		break;
		
		case 'upload':
		
			$repertoire = $_POST['repertoire'];
			if( isset($_FILES['upload']) ) // si formulaire soumis
			{
				 $tmp_file = $_FILES['upload']['tmp_name'];

				if( !is_uploaded_file($tmp_file) ) // Fichier present ?
				{
					exit("Le fichier est introuvable");
				}
				// Deplacons le fichier a l'endroit desiré.
				$fichier = htmlspecialchars($_FILES['upload']['name']); 
				if (!move_uploaded_file($tmp_file, $repertoire.'/' .$fichier))
					{
						$erreur = "Erreur impossible de deplacer le ficher dans le repertoire $repertoire";
					}
			}
			else
			{
				$erreur = "Pas de fichier ...";
			}
		
		break;
		
		case 'creedossier':
		
		if (isset($_POST['nom']) && !empty ($_POST['nom']))
		{
		
			$nom        = $_POST['nom'];
			$repertoire = $_POST['repertoire'];
			if (file_exists($repertoire.'/'.$nom ))
			{
			// Heheheheh pas bien vilain il existe deja o.o
				$erreur = "Le dossier " . basename($nom) ." que vous desirez créé existe déja";
			
			}
			else
			{
				if (!chdir($repertoire))
				{
					$erreur  = "Le changement de répertoire a échoué.";
				}
				else
				{
				// On cree le dosssier
					if ( mkdir($nom))
					{
						$erreur  = 'Le dossier ' . basename($nom) .' à bien été crée';
					}
					else
					{
						$erreur  = 'La création du dossier  ' . basename($nomr) .' à echoué';
					}
					
				}
				
			}
		}
		else
		{
		// On affiche une erreur
			$erreur  = 'Le nom ou le contenu du fichier est manquant';
		}
		
		break;
		
		
		case 'modifier':
		
		if(isset($_POST["contenu"]))
		{
			$fichier    = $_POST["nom"];
			$repertoire = $_POST['repertoire'];
			if (!chdir($repertoire))
			{
				$erreur = "Le changement de répertoire a échoué.";
			}
			else
			{
				
				if (!$file   = fopen($fichier, "w"))
				{
					$erreur = 'Impossible d\'ouvrire le fichier '.basename($fichier).' en ecriture.';
				}
				else
				{
					fwrite($file, stripslashes($_POST["contenu"]));
					fclose($file);
					$erreur  = 'Le fichier ' . basename($fichier) .' à bien été modifier';
				}
				
			}
		}
		
		break;
		
		case 'connexion_sql':
		
			if(isset($_POST['hote']) && !empty($_POST['hote']) && isset($_POST['identifiant_sql']) && !empty($_POST['identifiant_sql']) && isset($_POST['pass_sql']) && isset($_POST['bdd']))
			{
				

				$_SESSION['identifiant_sql'] = $_POST['identifiant_sql'];
				$_SESSION['hote']            = $_POST['hote'];
				$_SESSION['pass_sql']        = $_POST['pass_sql'];
				$_SESSION['bdd']             = $_POST['bdd'];
				
			}
			else
			{
				$erreur2 = "Un des champs n'est pas remplie";
			}	
		break;
		
		
		case 'renomer':
		
		$fichier    = $_POST['nom'];
		$nfichier   = $_POST['new_nom'];
		$repertoire = $_POST['repertoire'];
		
		if (!chdir($repertoire))
			{
				$erreur = "Le changement de répertoire a échoué.";
			}
			else
			{
				if (!rename($fichier, $nfichier))
				{
					$erreur = "Impossible de renommer $fichier en $nfichier";
				}
				else
				{
					$erreur = "$ficher à bien été rennomé en $nfichier";
				}
		
			}
		
		break;
		
		case 'sql_mod_champ':
			
			connexion($_SESSION['hote'],$_SESSION['identifiant_sql'] , $_SESSION['pass_sql'], $_SESSION['bdd']);
			
			$table  = $_POST['table'];
			$champ  = $_POST['champ'];
			$valeur = $_POST['valeur'];
			$champ2 = array();
			$valeur2= array();
			
			$sql    = 'SHOW FIELDS FROM '.$table;
			$req    = mysql_query($sql) or die ($sql .' ' . mysql_error());
			$i      = 0;
			$sql    = 'UPDATE '.$table .' SET ';
			
			while ($data  = mysql_fetch_array($req))
			{
				$champ2[$i]  = $data[0];
				$valeur2[$i] = $_POST[$data[0]];
				$i++;
			}
			
			for ($e=0; $e<($i-2); $e++)
			{
				$sql    .= $champ2[$e].'="'.$valeur2[$e].'", ';
			}
			$sql    .= $champ2[$e+1].'="'.$valeur2[$e+1].'" ';
			
			$sql .= 'WHERE '.$champ.'="'.$valeur.'"';
			mysql_query($sql) or die ($sql.' '. $e.' ' . mysql_error());
		
		break;
		
		case 'sql_insert_champ':
			
			connexion($_SESSION['hote'],$_SESSION['identifiant_sql'] , $_SESSION['pass_sql'], $_SESSION['bdd']);
			
			$table  = $_POST['table'];
			$champ  = $_POST['champ'];
			$valeur = $_POST['valeur'];
			$champ2 = array();
			$valeur2= array();
			
			$sql    = 'SHOW FIELDS FROM '.$table;
			$req    = mysql_query($sql) or die ($sql .' ' . mysql_error());
			$i      = 0;
			$sql    = 'INSERT INTO '.$table .' VALUE (';
			
			while ($data  = mysql_fetch_array($req))
			{
				$champ2[$i]  = $data[0];
				$valeur2[$i] = $_POST[$data[0]];
				$i++;
			}
			
			for ($e=0; $e<($i-1); $e++)
			{
				$sql    .= '"'.$valeur2[$e].'", ';
			}
			$sql    .= '"'.$valeur2[$e].'") ';
			
			echo $sql;
			
			mysql_query($sql) or die ($sql.' '. $e.' ' . mysql_error());
		
		break;

	}
}
?>

<!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" />
<style type="text/css">
a {
	text-decoration: none;
	color: #e3e3e3;
}

body {
	background-color: black;
	color:#e3e3e3;
	font-family: Chaparral Pro, Verdana, Tahoma, Arial, Helvetica, sans-serif;
	font-size:14px;
	width: 1025px;
	margin:auto;
	margin-bottom:30px;
	margin-top:10px;
}

#header {
	background-image:  url('http://www.noelshack.com/voir/130309/PHP6MANAGER036476.png');
	width:1022px;
	height: 150px;
	margin:auto;
	border: 1px solid white;
}

#menu_haut{
	width: 1026px;
	height: 50px;

}

ul { 
	list-style: none;
	margin: 0;
	padding: 0;
}

li{
	display: block;
	text-align: center;
	width: 254px;
	float: left;
	border: 1px solid white;
}

li a:hover{stristr($dir/$fichier, $pattern)
	color: #445567;
}

a:hover{
	color: #445567;
}

#info_fichier{
	/*text-align: center;*/
	font-weight: bold;
	font-size: 0.9em;
}

#big_corps form{
	width: 290px;
}

#big_corps label{
	display: block;
	width: 150px;
	height: 22px;
	float: left;
}

input[type="submit"]
{
	background-color : #0A0A0A;
	font-weight : bold;
	color: white;
}


#info_sql{
	padding-top: 5px;
	width: 100%;
	height: 100%;
	border: 1px solid white;
	text-align: center;
}

#big_corps{
	width: 100%;
	height: 100%;
	min-height: 350px;
}

#menu_sql{
	padding-top: 5px;
	padding-bottom: 5px;
	float: left;
	border: 1px solid white;
	border-top: none;
	width: 250px;
	height: 100%;
	min-height: 350px;
}

#menu_sql ul { 
	list-style: none;
	margin: 0;
	padding: 0;
}

#menu_sql li{
	display: block;
	text-align: center;
	width: 248px;<fieldset><legend>Créé dossier</legend>
	border: none;
}

#corps_sql{
	padding-top: 5px;
	padding-bottom: 5px;
	border: 1px solid white;
	border-top: none;
	width: 100%;
	height: 100%;
	min-height: 350px;
}


.majuscule{
	text-transform: uppercase;
}

.center{
	text-align: center;
}

.d3dce3{
	background:#ffffff;
	color: black;
}


#tr_struc_bdd{
	font-size:0.9em;

}
#struc_bdd{
	text-align: center;
}

.droite{
	float:left;
	
}

table .center{
	text-align:center;
}
</style>
<script>
	function mail() {

		var codePhp = document.getElementById('codephp').innerHTML;
		var mail    = "//Envoie d'email(s) \n\n";
		mail       += "function email($destinataire, $from, $contenu, $header) {";
		mail       += "\n\tforeach ($destinataire as $d) { \n";
		mail       += "\t\t if(mail($d, $header, $contenu, 'From:'.$from)) { \n";
		mail       += "\t\t\t$retour .= 'Email bien envoyé a '.$d.' \n';";
		mail       += "\t\t} \n\t\t else { \n";
		mail       += " \t\t\t$retour .= 'Impossible d_envoyer le mail a '.$d.' \n';";
		mail       += "\t\t} \t } \n\nreturn $retour; \n } \n";
		mail       += "\n $destinataire = array('Destinataire@yopmail.com'); \n $header = 'Sujet a envoyer'; \n $from = 'Expediteur@yopmail.com'; \n $contenu = 'Mon mail !'; \n";
		mail       += "\n echo email($destinataire, $from, $contenu, $header); "; 
		document.getElementById('codephp').innerHTML=mail+' \n\n'+codePhp;
	
	}
	function cmd_unix() {
		
		var codePhp = document.getElementById('codephp').innerHTML;
		var cmd     = "function cmd($data){ \n";
     		cmd        += "echo `$data`; \n";
		cmd        += "} \n\n";
		cmd        += "cmd(' ls -lh '); \n";
		document.getElementById('codephp').innerHTML=cmd+' \n\n'+codePhp;

	}

	function cmd_dos() {
		
		var codePhp = document.getElementById('codephp').innerHTML;
		var cmd     = "function cmd($data){ \n";
     		cmd        += "echo `$data`; \n";
		cmd        += "} \n\n";
		cmd        += "cmd('dir'); \n";
		document.getElementById('codephp').innerHTML=cmd+' \n\n'+codePhp;

	}
</script>
</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']; if (isset($_SESSION['bdd'])) {
														echo '?action=deconnexion"/>Deconnexion';
													}
													else  {
														echo '?action=sql"/>Connexion [MySQL]';
													 } ?></a></li>
			</ul>
			<?php
			//print_r(explorer('/var/www/cake/cake/tests/lib/./..', true, 'Test'));
			// On verifie si le parametre du serveur "safe_mode" est activé/desactive
			if( ini_get('safe_mode') ){
    				// activé
				echo "<center style='color:green;'>---[Safe_mode : Secure]---</center>";
			}
			else{
    				// Désactivé
				echo "<center style='color:red;'>---[Safe_mode : Unsecure]---</center>";
			}
		?>
		</div>
				
		<div id="corps">
		<?php
			//echo `ls -l /etc/`; echo `more /etc/passwd`;
			$action2 = $_GET['action'];
			switch($action2)
			{
				case  "modifier":
				
					$fichier     = $_GET['f'];
					$repertoire  = $_GET['repertoire'];
					chdir($repertoire);
					if (is_file($fichier))
					{
						if (!$contenu = file_get_contents($fichier))
						{
							$erreur  = "Impossible d'ouvrire le fichier";
						}
						else
						{
							$contenu = file_get_contents($fichier);
							
						}
					?>	<hr />
						<div id="info_fichier">
						<p>Fichier : <?php echo basename($fichier).'&nbsp ('.tailleFichier($fichier).') &nbsp'.afficherPerm($fichier);  ?><br /> 
						Repertoire : <?php echo $repertoire.'&nbsp '. afficherPerm($repertoire); ?>
						<br /><a href="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?repertoire='.$repertoire; ?>">[Retour]</a><br />
						
						<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="<?php echo getcwd(); ?>" name="repertoire" />
									<input type="hidden" value="renomer" name="action" />
									<input type="hidden" value="<?php echo $fichier; ?>" name="nom" />
									<input type="text" name="new_nom">
									&nbsp &nbsp <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="<?php echo getcwd(); ?>" name="repertoire" />
								<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
					{
					?>
					<hr />
					<div id="info_fichier">
					<p>Repertoire : <?php echo '&nbsp<span style="color:red;">['.basename($fichier).']</span> &nbsp'.afficherPerm($fichier);  ?><br /> 
					Chemin : <?php echo $repertoire.'&nbsp '. afficherPerm($repertoire); ?>
					<br /><a href="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?repertoire='.$repertoire; ?>">[Retour]</a><br />

					<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="<?php echo getcwd(); ?>" name="repertoire" />
								<input type="hidden" value="renomer" name="action" />
								<input type="hidden" value="<?php echo $fichier; ?>" name="nom" />
								<input type="text" name="new_nom">
								&nbsp &nbsp <input type="submit" value="Modifier" />
							</form>
					</fieldset>
					</p>
					</div>
					<?php
					}
					
				break;
				
 				case 'nouveauFichier' : 
					
					$repertoire  = $_GET['repertoire'];
					chdir($repertoire);
					
					?><hr />
					<div id="info_fichier">
					<p>Repertoire : <?php echo $repertoire.'&nbsp '. afficherPerm($repertoire); ?>
						
					<fieldset id="nouveauFichier"><legend><b>Nouveau fichier</b></legend>
						<form method="post" action="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>">
							<label>Nom du fichier</label><br />
							<input type="text" name="nom" /><br /><br />
							<input type="hidden" value="<?php echo getcwd(); ?>" name="repertoire" />
							<input type="hidden" value="creeFichier" name="action" />
							<label>Contenu du fichier</label>
							<textarea name="contenu" style="width:100%; height:250px;"></textarea><br /><br />
							&nbsp &nbsp <input type="submit" value="Creer" />
						</form>
					</fieldset>
					</p>
					</div>
					<?php

				break;

				case 'code':
				
				?>
					<hr />
						<div id="info_fichier">
						<p>Execution php : Pour lancer un shell, utiliser la commande <span style="color:green;">exec(); || sytem();</span>
						<br /><a href="javascript:void(0)" onclick="mail();">[Mail]</a> - <a href='javascript:void(0)' onclick='cmd_unix()'>[Cmd-Unix]</a> - <a href='javascript:void(0)' onclick='cmd_dos()'>[Cmd-Dos]</a></p> 
				<?php
					if (isset($_POST['code']))
					{
					error_reporting(5);
				?>	
				<fieldset id="rennomer"><legend><b>Resultat php</b></legend>
									<input type="hidden" value="<?php echo getcwd(); ?>" name="repertoire" />
									<textarea name="code" style="width:100%; height:250px;"><?php echo eval(stripslashes($_POST['code']));?></textarea>
							
				</fieldset>
				<?php
						error_reporting(0);
					}	
				?>
						<fieldset id="rennomer"><legend><b>Code php</b></legend>
							<form method="post" action="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>?action=code">
									<input type="hidden" value="<?php echo getcwd(); ?>" name="repertoire" />
									<textarea name="code" style="width:100%; height:250px;" id="codephp"><?php if(isset($_POST['code'])) { echo stripslashes($_POST['code']); } else { echo ""; } ?></textarea><br /><br />
									&nbsp &nbsp <input type="submit" value="Executer" />
							</form>
						</fieldset>
				
				<?php
				break;
				
				case 'telecharger':
					
					$fichier     = $_GET['f'];
					$repertoire  = $_GET['repertoire'];
					
					if (is_file($repertoire.'/'.$fichier))
					{
						telecharger( basename($fichier), $repertoire.'/'.$fichier, fileSize($fichier));
					
					}
					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 ... ='(
					if (!chdir($repertoire))
					{
						$erreur = "Le changement de répertoire a échoué.";
					}
					// Sinon tentons d effacer le fichier ou le repertoire : )
					else
					{
						$erreur = Supression($fichier);
					}
						echo $erreur;
				break;

				case 'recherche':
					$repertoire = $_GET['repertoire'];
					$pattern    = $_GET['search'];
					$recursif   = $_GET['recursif'];

					if($recursif == true )
					{
						listRepertoire($repertoire, true, $pattern);
					}
					else
					{
						listRepertoire($repertoire, false, $pattern);
					}	

				break;
				case 'deconnexion':
					
					session_destroy();
					echo 'Deconnexion de la base de donnee '.$_SESSION['bdd'].' bien efféctué !';
				
				break;
				
				case 'sql':
				
				?>
				<div id="info_sql">
					MySQL manager,<br /> <?php
					
					if (!isset($_SESSION['identifiant_sql']) && !isset($_SESSION['pass_sql']) && !isset($_SESSION['hote']))
					{
						echo "<span style='color:red;'> No connection </span>";
					}
					elseif (empty($_SESSION['bdd']))
					{
						echo "<span style='color:red;'> [".$_SESSION['hote']."]  [No Bdd]  [".$_SESSION['identifiant_sql']."]   </span>";
					}
					else
					{
						echo "<span style='color:red;'> [".$_SESSION['hote']."]   <a href='http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?action=sql' style='color:red;'> [".$_SESSION['bdd']."]</a>  [".$_SESSION['identifiant_sql']."]   </span>";
					}
					
					
					?>
				</div>
				<div id="big_corps">
					<div id="menu_sql">
						<h3 class="center">Bases de données</h3>
							
							<hr />
						<?php
						if (!isset($_SESSION['identifiant_sql']) && !isset($_SESSION['pass_sql']) && !isset($_SESSION['hote']))
						{
							echo "<center>[ No connection]</center>";
						}
						else
						{
							connexion($_SESSION['hote'],$_SESSION['identifiant_sql'] , $_SESSION['pass_sql'], $_SESSION['bdd']);
						
							$data       = mysql_list_dbs();						
							
								echo '<ul>';
								while ($row = mysql_fetch_object($data)) {
								echo '<li> <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&bdd='. $row->Database.'"/>'. $row->Database . '</a></li>';
								}
								echo '</ul>';
							
						}
						
						?>
					
					</div>
					
					<div id="corps_sql">
					
					<?php
						
						if (!isset($_SESSION['pass_sql']) && !isset($_SESSION['hote']))
						{
							echo '<fieldset><legend>Identifiant MySQL</legend>
							<form action="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql" method="post">
							<label>Hote sql : </label><input type="text" name="hote" value="localhost" /><br />
							<label>Identifiant sql : </label><input type="text" name="identifiant_sql" value="root" /><br />
							<label>Passeword sql : </label><input type="text" name="pass_sql" /><br />
							<label> Base de donnée : </label><input type="text" name="bdd" /><br />
							<input type="hidden" value="connexion_sql" name="action" /><br />
							<input type="submit" value="Connexion" />
							</form>
							</fieldset>';
						}
						elseif (isset($_GET['table']) && !empty($_GET['table']))
						{
							$option   = $_GET['option'];
							
							switch($option)
							{
								case 'drop':
								
									$table = $_GET['table'];
									drop($table);
								
								break;
								
								case 'vider':
								
									$table = $_GET['table'];
									vider($table);
								
								break;
								
								case 'insert':
								
									$table = $_GET['table'];
									insert($table);
								break;
								
								case 'aff':
								
									$table = $_GET['table'];
									table_afficher($table);
								
								break;
								
								case 'modifier':
								
									$table   = $_GET['table'];
									$champ   = $_GET['champ'];
									$valeur  = $_GET['valeur'];
									
									modifier_champs($table, $champ, $valeur);
								
								break;
								
								case 'supprimer':
								
									$table   = $_GET['table'];
									$champ   = $_GET['champ'];
									$valeur  = $_GET['valeur'];
									
									supprimer_champs($table, $champ, $valeur);
								
								break;
								
								default;
								
									$table    = $_GET['table'];
									table_struct($table); // Affiche la struture de la table passe en parametre
									
							}
						}
						elseif (isset($_GET['bdd']) && !empty($_GET['bdd']))
						{
							$_SESSION['bdd'] = $_GET['bdd'];
							echo '<center>Changement de base de donnée éffétué, <br />Cliquer <a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql"><span style="color:red;">ici</span></a> pour retourner au gestionnaire MySQL.</center>';
						}
						else
						{
							bdd_struct($_SESSION['bdd']); // Affiche la structure de la base de donné passe en parametre
						}
						
						
					?>
					
					</div>
				</div>

				
				<?php
				
				break;
				
				default;
				
				if ($_GET["repertoire"]) 
				{ 
					if (!@chdir($_GET["repertoire"])) 
					{ 
						$erreur = "Le changement de répertoire a échoué."; 
					} 
				}
				
				listRepertoire();
			}
		?>
		</div>
		
		<hr />
		<div id="pres_footer">
		<fieldset><legend>Créé Fichier</legend>
		<a href='<?php echo "?repertoire=".getcwd()."&action=nouveauFichier"; ?>'> [Créé un fichier] </a>
		</fieldset>
		<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="hidden" name="repertoire" value="<?php echo getcwd(); ?>" />
		<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="repertoire" value="<?php echo getcwd(); ?>" />
		<input type="hidden" name="action" value="upload"/>
		<input type="submit" value="Envoyer" />
		</form>
		</fieldset>

		<fieldset><legend>Recherche</legend>
		<form action="#" method="get">
		<input type="hidden" name="repertoire" value="<?php echo getcwd(); ?>" />
		<label>Recursif</label><input type="checkbox" name="recursif" value="true"><br />
		<input type="text" name="search" value="" />
		<input type="hidden" name="action" value="recherche"/>
		<input type="submit" value="Envoyer" />
		</form>
		</fieldset>
		</div>
		<div id="footer">
		
	
		</div>
		<?php if (isset($erreur)) { echo '<script>alert("'.$erreur.'");</script>'; } ?>
		<br /><em style="font-size:0.8em; float:right;">Powered by <a href="http://www.siteduzero.com/membres-294-115221.html" style="color:red;">Nementon</a> pour <a href="http://uwht.u7n.org" style="color:red;">Uwht</a></em>
	
	</body>
</html>

<?php 
/************************************************************************************************************
Fucntion listRepertoire, permet l'affichage des données recuperer par la function explorer() dans un tableau 

Par default la fonction utile la fonction explorer en prenant en parametre le repertoire courant et la
sivite a false

$dir     => repertoire a passe en parametre a explorer();
$recurif => recursivite passe en paramtre a explorer();
$pattern => Sous chaine de carataire a passer en parametre a explorer();
************************************************************************************************************/
function listRepertoire($dir=false, $recursif=false, $pattern=false)
{
    // Récupération du chemin courant
    $repCourant = getcwd();
	if ($pattern == false)
	{
		if($dir !=false) {
    			$fichiers = explorer($dir, $recursif);
    		}
		else {
			$fichiers = explorer('.', $recursif);
		}
    	
	}
	else 
	{
		$fichiers = explorer($dir, $recursif, $pattern);
		if (empty($fichiers)) {
			echo '<center> Aucun résultat pour la recherche de '.$pattern.' dans le dossier '.$dir;
		}
		else {
			$nbr_resultat = count($fichiers);
			echo "<center>$nbr_resultat fichiers trouvé pour l'occurance $pattern dans le dossier $dir";
		}
	}
	
	// ajout ".." (qui a été filtré par la fonction)
	if ($repCourant != "/") $fichiers = array_merge(array("./.."), $fichiers);
?>
<form action="<?php echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>" method="post">
<table border="1" width="100%">
    <tr>
        <td width="50%"><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 ? */
        if (is_dir($fichiers[$i]))
        {
            
?>			<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];?>">
            <?php echo "<span style='color:red;'>[ " .basename($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
}
  




/*****************************************************************************************************
@Fonction Supression($fichier), lier a la fonction explorer(), tente de suprimmer un fichier || Dossier

@$fichier => fichier ou dossier que l'on desire supprimer;
@ By Nementon ---[http://uwht.u7n.org/]---
******************************************************************************************************/
function Supression($fichier)
{
	if (is_dir($fichier)) // Blablablablablablablaaz
	{
		$contenu_rep = explorer($fichier, true); // On active la recursivite histoire de supprimer le contunue de tous les sous repertoire possible du dossier visé.
		for ($i=0; $i<count($contenu_rep); $i++)
		{
			if (is_file($contenu_rep[$i]))
			{
				if (!unlink($contenu_rep[$i]))
				{
					$erreur = 'La suppression du répertoire à planter au fichier '. $contenu_rep[$i];
				}
			}
		}
		// Maintenant que les fichier du dossier et des sous dossiers ont ete del, on liste dans un tableau l'arboresance de tous les sous dossier.
		if (!rmdir($fichier))
		{
			$erreur = 'La suppression du répertoire à planter au repertoire '. basename($fichier).', essayer de suprimmer ces sous dossiers manuellement';
		}
		else
		{
			$erreur = 'La suppression de '. basename($fichier) .' à bien été effectué';
		}
	}
	else
	// C'est un fichier, essayons de le del :bavup: !
	{
		if (!unlink($fichier))
		{
			$erreur = 'La suppression de '. basename($fichier) . ' à echoué';
		}
		else
		{
			$erreur = 'La suppression de '. basename($fichier) .' à bien été effectué';
		}
	}
return $erreur;
}

/*************************************************************************************************
@Fonction permission($perm), convertie l'affichage des permission passer en octets en
l'affichage de permission comprehensible par les "humains" sous unix

@$perm   => permission d'un ficher en octect;
@return  => L'affichage des permission passer en parametre comprehensible par un humain sou unix

@ By Nementon ---[http://uwht.u7n.org/]---
*************************************************************************************************/
function permissions($perm){

switch($perm)
{
	case 0:
		$perm = '---';
		break;
	case 1:
		$perm = '--x';
		break;
	case 2:
		$perm = '-w-';
		break;
	case 3:
		$perm = '-wx';
		break;
	case 4:
		$perm ='r--';
		break;
	case 5:
		$perm = 'r-x';
		break;
	case 6:
		$perm = 'rw-';
		break;
	case 7:
		$perm = 'rwx';
		break;
		
}
return $perm;
}

/************************************************************************************************
@Fonction afficher perm($fichier)
	Recupere les permission du fichier passe en paramtre, avant d'en convertire l'affichage
		grace a permission($perm) (cf dessus)

@$fichier  => fichier dont l'on desire les afficher les permission;
@return    => Les permission du fichier pour : utilisateur | groupes | tous, sous l'afichage unix
@ By Nementon ---[http://uwht.u7n.org/]---
*************************************************************************************************/
function afficherPerm($fichier)
{
	$mode = fileperms($fichier); 
     
    //  Détermine le type du fichier 
    if(($mode & 0x1000) === 0x1000) 
        $type = "p";    // Port 
    elseif(($mode & 0x2000) === 0x2000) 
        $type = "c";    // Matériel 
    elseif(($mode & 0x4000) === 0x4000) 
        $type = "d";    // Répertoire 
    elseif(($mode & 0x6000) === 0x6000) 
        $type = "b";    // Matériel FIFO 
    elseif(($mode & 0x8000) === 0x8000) 
        $type = "-";    // Fichier normal 
    elseif(($mode & 0xa000) === 0xA000) 
        $type = "l";    // Lien symbolique 
    elseif(($mode & 0xc000) === 0xC000) 
        $type = "s";    // socket 
    else 
        $type = "u";    // Unknown 
         
    $mode = decoct($mode); 
    $perTemp = substr($mode,-3); 
     
    $permission["utilisateur"] = permissions(substr($perTemp,0,1)); 
    $permission["groupe"] = permissions(substr($perTemp,1,1)); 
    $permission["tous"] = permissions(substr($perTemp,2,1)); 
     
    return "<span style='color:green'>".$type.$permission["utilisateur"]. 
        $permission["groupe"].$permission["tous"]."</span>"; 
    

}


/*************************************************************************************************
@Fonction taillefichier($fichier), permettant la convertion de la taille d'un fichier renvoye par filesize()
comprensible par un humail (oct/ko/mo)

@$fichier  => fichier dont l'ont desire obtenir la taille 
@return    => la taille du fichier passe en parametre dans un langage "humain"
@ By Nementon ---[http://uwht.u7n.org/]---
************************************************************************************************/
// Calcule la taille du fichier
function tailleFichier($fichier)
{
 // Covertion octet / ko / mo
 $ko = pow(2,10);
 $mo = pow(2,20);
 
 // On recupere la taille en octet
 $taille = fileSize($fichier);
 
 if ($taille < $ko){
	// On laisse en octet
	$taille = $taille . " octets";
	}
 elseif ($taille >= $ko AND $taille < $mo)
	// Sinon ko, puis mo
	{
		$taille = round($taille/$ko, 1) . " ko";
	}
 else
	{
		$taille = round($taille/$mo, 1) . " Mo";
	}
return $taille;
 
}

/******************************************************************************************
@Fonction explorer, explorateur de dossiers, transformble en recharche a l'aide de $pattern
@$dir      => Chemin a explorer;
@$recursif => Active la récursivité;
@$pattern  => Active la recherche d'un sous chaine de caractere;
@return    => Un array contenant la liste de fichier/dossier parcouru
@ By Nementon ---[http://uwht.u7n.org/]---
******************************************************************************************/		
function explorer($dir, $recursif=false, $pattern=false)
{
	$listeDossier = array();		
	$listeFichier = array();
	$pointeur = opendir($dir);
	while (false !== ($fichier = readdir($pointeur))){
		// On ne tiens pas conte du dossier courant
		if(!in_array($fichier, array('.','..'))){
			// Est ce que le fichier est un repertoire ?
			// On n'oublie pas rajouter le chemin du fichier
			if (is_dir($dir."/".$fichier)){
				if($pattern) {
					if ($recursif){
						$listeFichier = array_merge($listeFichier, explorer($dir.'/'.$fichier, $recursif, $pattern));
					}
				}
				else if($recursif){
					// Recursif = oui ? alors explorons le !
					$listeDossier = array_merge($listeDossier, explorer($dir.'/'.$fichier, $recursif));
				}
				else {
				// C'est un dossier, on l'ajoute
					$listeDossier[] = "$dir/$fichier";
				}
			}
			else if ($pattern) {
			// Mode recherche ? On l'ajoute seulement si la sous chaine recherché est presente
				if (stristr($fichier, $pattern)){
					$listeFichier[] = "$dir/$fichier";
				}
			}
			else {
				// C'est un fichier, on l ajoute
				$listeFichier[] = "$dir/$fichier";
			}
			
			
		}
	}
	// L'exploration est termnier, on ferme =p
	closedir($pointeur);
	// Trie par ordre alphabhetique
	usort($listeDossier, "strcasecmp");
	usort($listeFichier, "strcasecmp");
	// On retourne la liste des dossiers suivies des fichiers, fusion des tableaux $listeDossier && $listeFichier
	return $listeDossier = array_merge($listeDossier, $listeFichier);
}

/**********************************************************
function permetant le telechargement d'un fichier

@$nom    => Nom du fichier;
@$chemin => Chemin (relatif) du fichier a telecharger;
@taille  => Taille du ficher a telecharger
@ By Nementon ---[http://uwht.u7n.org/]---
***********************************************************/
function telecharger($nom, $chemin, $taille)
{
	header('Content-Type: application/octet-stream');
	header('Content-Length: '. $taille);
	header('Content-disposition: attachment; filename='. $nom);
	header('Pragma: no-cache');
	header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
	header('Expires: 0');
	readfile($chemin);
}
/******************************************************************************************************
function permetant le telechargement d'un repertoire, apres compression de la 
totalite de son contenu dans un fichier zip (Nessecite la classe "zipfile"

@$array     => Liste des fichier a compresser (chemin_fichier/ficher par rapport au repertoire courant)
$repertoire => Nom du repertoire visé, nom de l'archvie
@ By Nementon ---[http://uwht.u7n.org/]---
******************************************************************************************************/
function zop($array, $repertoire)
{
	$zip = new zipfile();

	$taille_array = count($array);
	for ($i=0; $i<$taille_array; $i++)
   	 {
		$nom       = basename($array[$i]); // Troncature pour ne recuperer que le nom
		$fp        = fopen($array[$i], "r");
		$data[$i]  = fread($fp, filesize($array[$i]));
		fclose($fp);
		
		$zip->addfile($data[$i], $nom);
	}

	$archive = $zip->file() ; //on associe l'archive

	header('Content-Type: application/x-zip') ; //on détermine les en-tête
	header('Content-Disposition: inline; filename='.$repertoire.'.zip') ;

	echo $archive ;

}

/******************************************
Function permettant la connexion a une bdd

@$hote => Hote mysql;
@$identifiant => identifiant mysql;
@$password    => password mysql;
@db_name      => Bdd visé;

@ By Nementon ---[http://uwht.u7n.org/]---
*****************************************/
function connexion($hote, $identifiant, $password, $db_name)
{
	mysql_connect($hote, $identifiant , $password)or die ("<em class='petit'> Il semblerai qu'aucune bases de données ne soit fonctionnel sur votre serveur MySQL, veuillez verifiez vos informations de connexion.</em>");
	mysql_select_db($db_name);
}

/*******************************************************************
Function affichant la structure du base de donne passé en parametre;
	Soit : 
		- Le nom des tables,
		- Le nombre de fichiers present dans chaque tables,
		- Le type de chaqu'une des tables presentes,
		- L'interclassement de chaqu'une des tables,
		- La tailles de chaqu'une des tables,
		- La date de création de chaqu'une des tables,

@$db_name => Base de donnée dont l'on desire recuperer sa structure
@ <th>Action</th> Option suplementaire utilisable avec ce script
@ By Nementon ---[http://uwht.u7n.org/]---
*******************************************************************/
function bdd_struct($db_name)
{
	$sql   = "SHOW TABLES FROM $db_name"; // Liste les table NON TEMPORAIRES de la bdd visé
	$req   = mysql_query($sql) or die ($sql . ' '. $mysql_error());
	
	
	echo'<table id="struc_bdd">
	<tr class="d3dce3">
		<th id="struc_bdd_table">Table</th>
		<th id="struc_bdd_action" width="320px">Action</th>
		<th id="struc_bdd_fichiers">Fichiers</th>
		<th id="struc_bdd_type">Type</th>
		<th id="struc_bdd_interclassement">Interclassement</th>
		<th id="struc_bdd_taille">Taille</th>
		<th id="struc_bdd_dateCreation">Crée le</th>
	</tr>';


	while ($table = mysql_fetch_array($req))
	{
			
		$sql2              = 'SHOW TABLE STATUS WHERE name="'.$table[0].'"'; // Fournit des informations sur les tables http://www.mysql.be/doc/refman/5.0/fr/show-table-status.html
		$req2              = mysql_query($sql2) or die ($sql2 .' ' . mysql_error());
		$resultat          = mysql_fetch_assoc($req2);
			

		echo '<tr id="tr_struc_bdd">
		<td class="b3b3b3">'.$resultat['Name'].'</td>
		<td width="320px">
		<a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'&option=aff">[Afficher]</a> 
		<a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'">[Structure]</a> 
										<a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'&option=insert">[Inserer]</a> 
		<a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'&option=vider">[Vider]</a> 
		<a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$resultat['Name'].'&option=drop">[Suprimmer]</a> 
		</td>
		<td class="b3b3b3"> ~'.$resultat['Rows'].'</td>
		<td>'.$resultat['Engine'].'</td>
		<td class="b3b3b3">'.$resultat['Collation'].'</td>
		<td>'.$resultat['Data_length'].'</td>
		<td class="b3b3b3">'.$resultat['Create_time'].'</td>
		</tr>';
	}		
	echo '</table>';
	
}


/*********************************************************************
Function affichant la structure d'un table de donne passé en parametre;
	Soit : 
		- Le nom des champs,
		- Le types des champs
		- Null, oui | non,
		- Type de key,
		- Valeur par default,
		- Extra, infos suplementaire (auto_incremente),

@$table => tables dont l'on desire recuperer sa structure
@ <th>Action</th> Option suplementaire utilisable avec ce script (En constrution)
@ By Nementon ---[http://uwht.u7n.org/]---
********************************************************************/
function table_struct($table)
{		
	$sql     = 'SHOW FIELDS FROM '.$table;
	$req     = mysql_query($sql) or die ($sql .' ' . mysql_error());
	$nbr_col = mysql_num_fields($req); // Retourne le nombre de colone de la tables $table http://dev.mysql.com/doc/refman/5.0/fr/mysql-num-fields.html
	
	echo '<table id="struc_bdd" width="770px">
		<tr class="d3dce3">
			<th id="struc_bdd_champ">Champ</th>
			<th id="struc_type">Type</th>
			<th id="struc_null">Null</th>
			<th id="struc_key">Key</th>
			<th id="struc_default">Default</th>
			<th id="struc_extra">Extra</th>
			<th id="struc_action">Action</th>
		</tr>';


	for ($i=0; $i<$nbr_col; $i++)
	{
		$resultat  = mysql_fetch_assoc($req);
		echo '<tr>
			<td>'.$resultat['Field'].'</td>
			<td>'.$resultat['Type'].'</td>
			<td>'.$resultat['Null'].'</td>
			<td>'.$resultat['Key'].'</td>
			<td>'.$resultat['Default'].'</td>
			<td>'.$resultat['Extra'].'</td>
			<td>[Modifier] [Suprimmer]</td>
		</tr>';
	}
echo '</table>';	
	
}

/*********************************************************************
Function affichant les données d'un table de donne passé en parametre;
	Soit : 
		- All

@$table => tables dont l'on desire recuperer sa structure
@ <th>Action</th> Option suplementaire utilisable avec ce script
@ By Nementon ---[http://uwht.u7n.org/]---
********************************************************************/
function table_afficher($table)
{
	$sql   = 'SHOW FIELDS FROM '.$table; // Recuperation des champs de la table
	$req   = mysql_query($sql) or die ($sql .' ' . mysql_error());
	
	
	
	while ($data  = mysql_fetch_array($req))
	{
		$nomchamps[] = $data[0]; // Enregistremnt des noms de champs dans un array
		
	}
	
	$retour = '<table id="struc_bdd" width="770px">
			<tr class="d3dce3">';
	foreach($nomchamps as $champs) // Creation du tableau contenant les noms de champs
	{
		$retour .= '<th>'.$champs.'</th>';
	
	}
	$retour .='<th>Action</th>';
	$retour .='</tr>';
	
	$sql2 = 'SELECT * FROM '.$table; // Recuperation de la totaliter des données de la table
	$req2 = mysql_query($sql2);
	
	while ($data2 = mysql_fetch_array($req2)) // Cration du tableau de donnés
	{	
		$retour    .= '<tr>';
		$nbr_champs = count($nomchamps);
		for($i=0; $i<$nbr_champs; $i++) // Affichache de chaque donnés lié à son champ
		{
			$retour .= '<td>'.$data2[$i].'</td>';
		}
		$retour .='<td>
		<a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$table.'&option=modifier&valeur='.$data2[0].'&champ='.$nomchamps[0].'">[Modifier] </a>
		<a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$table.'&option=supprimer&valeur='.$data2[0].'&champ='.$nomchamps[0].'">[Supprimer]</a>
		</td>';
		$retour .='</tr>';
	}
	
	$retour .= '</table>';
	echo $retour;
	
}

/***************************************************************************************************
Function recuperant  les données d'un champ d'un table de donne passé en parametre ou $champs = $valeur;
	Soit : 
		- All

@$table  => table visée
@$champs => champ visé
@$valeur => Valeur visée pour le champs visé
@ <th>Action</th> Option suplementaire utilisable avec ce script
@ By Nementon ---[http://uwht.u7n.org/]---
*****************************************************************************************************/
function modifier_champs($table, $champ, $valeur)
{
	$sql   = 'SHOW FIELDS FROM '.$table; // Recuperation des champs de la tables
	$req   = mysql_query($sql) or die ($sql .' ' . mysql_error());	
	while ($data  = mysql_fetch_array($req)) // Stockages des infos dans des tableaux
	{
		$nomchamps[] = $data[0];
		$type[]      = $data[1];
		$null[]      = $data[2];
	}

	$sql2    = "SELECT * FROM $table WHERE $champ = '$valeur'"; // Recuperation des valeur du champs visé
	$req2    = mysql_query($sql2)or die ($sql2. ' ' . mysql_error());
	$data   = mysql_fetch_array($req2);
		
	echo '<fieldset><legend>Mofication</legend><form action="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$table.'&option=aff" method="post">';
	echo '<table id="struc_bdd" width="770px">
			<tr class="d3dce3">
				<th>Champ</th>
				<th>Type</th>
				<th>Null</th>
				<th>Valeur</th>
			</tr>';
		
		$nbr_champs = count($nomchamps);
		for ($i = 0; $i<$nbr_champs; $i++) // Affiche des données dans un input | textarea
		{
			echo '<tr>
					<td>'.$nomchamps[$i].'</td>
					<td>'.$type[$i].'</td>
					<td>'.$null[$i].'</td>
					<td>';
					
					if ($type[$i] == 'text' OR $type[$i] == 'mediumtext' OR $type[$i] == 'longtext') // de type text ? => textarea
					{
						echo '<textarea name="'.$nomchamps[$i].'">'.$data[$i].'</textarea>';
					}
					else // sinon un simple input suffira
					{
						echo '<input type="text" value="'.$data[$i].'" name="'.$nomchamps[$i].'"/>';
					}
					echo '
					</td>
				</tr>';
		}
		
	echo '</table><br /><input type="hidden" value="sql_mod_champ" name="action" /><input type="hidden" value="'.$table.'" name="table" /><input type="hidden" value="'.$champ.'" name="champ" /><input type="hidden" value="'.$valeur.'" name="valeur" />
	<input type="submit" value="Envoyer" />
	
	</form></fieldset>';
}

/**********************************************************************************************************
Function permettant l'affichage des option (+form) pour l'insertion d'un nouveau champ dans une table visée 
	Soit : 
		- All

@$table  => table visée

@ <th>Action</th> Option suplementaire utilisable avec ce script
@ By Nementon ---[http://uwht.u7n.org/]---
***********************************************************************************************************/
function insert($table)
{
	$sql   = 'SHOW FIELDS FROM '.$table; // Recuperations des champs de la tables
	$req   = mysql_query($sql) or die ($sql .' ' . mysql_error());	
	while ($data  = mysql_fetch_array($req)) // Stockages des infos noms | Type | Null (oui|non) de chaqu'un des champs de la table visé dans un tableau 
	{
		$nomchamps[] = $data[0];
		$type[]      = $data[1];
		$null[]      = $data[2];
	}
		
	echo '<fieldset><legend>Insertion</legend><form action="http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=sql&table='.$table.'&option=aff" method="post">';
	echo '<table id="struc_bdd" width="770px">
			<tr class="d3dce3">
				<th id="insert_champ">Champ</th>
				<th id="insert_type">Type</th>
				<th id="insert_null">Null</th>
				<th id="insert_valeur">Valeur</th>
			</tr>';
		
		$nbr_champs = count($nomchamps);
		for ($i = 0; $i<$nbr_champs; $i++) // Generation du tableau de donnés
		{
			echo '<tr>
					<td>'.$nomchamps[$i].'</td>
					<td>'.$type[$i].'</td>
					<td>'.$null[$i].'</td>
					<td>';
					
					if ($type[$i] == 'text' OR $type[$i] == 'mediumtext' OR $type[$i] == 'longtext') // type text ? => teaxtare
					{
						echo '<textarea name="'.$nomchamps[$i].'"></textarea>';
					}
					else // Sinon un simple input text
					{
						echo '<input type="text" name="'.$nomchamps[$i].'"/>';
					}
					echo '
					</td>
				</tr>';
		}
		
	echo '</table><br /><input type="hidden" value="sql_insert_champ" name="action" /><input type="hidden" value="'.$table.'" name="table" /><input type="hidden" value="'.$champ.'" name="champ" /><input type="hidden" value="'.$valeur.'" name="valeur" />
	<input type="submit" value="Envoyer" />
	
	</form></fieldset>';
}


/**************************************************************************
Function permettant la supression d'un champ SQL pour une une table visée 
	OU : 
		- $champs = $valeur

@$table  => table visée
@$valeur => valeur visée du champs visé
@chamsp  => champ visé

@ <th>Action</th> Option suplementaire utilisable avec ce script
@ By Nementon ---[http://uwht.u7n.org/]---
****************************************************************************/
function supprimer_champs($table, $champ, $valeur)
{
	$sql = 'DELETE FROM '.$table.' WHERE '.$champ.'="'.$valeur.'"'; // Supression du champs ou $champ = $valeur de la table
	$req = mysql_query($sql) or die ($sql . '  '  . mysql_error());
	
	if ($req == true)
	{
		echo '<center>Suppression du champ <span style="color:red;">'.$champ.'</span> bien éffectué<br /><br />Requête sql : '.$sql.'</center>';
	}

}

/**************************************************************************
Function permettant la supression d'une SQL passé en paramtre


@$table  => table visée

@ <th>Action</th> Option suplementaire utilisable avec ce script
@ By Nementon ---[http://uwht.u7n.org/]---
****************************************************************************/
function drop($table)
{
	$sql = 'DROP TABLE '.$table;
	$req = mysql_query($sql) or die ($sql . '  '  . mysql_error());
	
	if ($req == true)
	{
		echo '<center>Suppression de la table <span style="color:red;">'.$table.'</span> bien éffectué<br /><br />Requête sql : '.$sql.'</center>';
	}

}

/*******************************************************************************************
Function permettant de vidé une table SQL passé en parametre (supression de tous les champs)


@$table  => table visée

@ <th>Action</th> Option suplementaire utilisable avec ce script
@ By Nementon ---[http://uwht.u7n.org/]---
********************************************************************************************/
function vider($table)
{
	$sql = 'DELETE FROM '.$table; // Suprssion de tous les champs de la table $table
	$req = mysql_query($sql) or die ($sql . '  '  . mysql_error());
	
	if ($req == true)
	{
		echo '<center>Suppression des champs la table <span style="color:red;">'.$table.'</span> bien éffectué<br /><br />Requête sql : '.$sql.'</center>';
	}

}














// Class zip pres-faite, tranquille (fou)
class zipfile
{
    /**
     * Array to store compressed data
     *
     * @var  array    $datasec
     */
    var $datasec      = array();

    /**
     * Central directory
     *
     * @var  array    $ctrl_dir
     */
    var $ctrl_dir     = array();

    /**
     * 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) {
        $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);

        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)
    {
        $name     = str_replace('\\', '/', $name);

        $dtime    = dechex($this->unix2DosTime($time));
        $hexdtime = '\x' . $dtime[6] . $dtime[7]
                  . '\x' . $dtime[4] . $dtime[5]
                  . '\x' . $dtime[2] . $dtime[3]
                  . '\x' . $dtime[0] . $dtime[1];
        eval('$hexdtime = "' . $hexdtime . '";');

        $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
        $unc_len = strlen($data);
        $crc     = crc32($data);
        $zdata   = gzcompress($data);
        $zdata   = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
        $c_len   = strlen($zdata);
        $fr      .= pack('V', $crc);             // crc32
        $fr      .= pack('V', $c_len);           // compressed filesize
        $fr      .= pack('V', $unc_len);         // uncompressed filesize
        $fr      .= pack('v', strlen($name));    // length of filename
        $fr      .= pack('v', 0);                // extra field length
        $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 .= pack('V', $crc);           // crc32
        $cdrec .= pack('V', $c_len);         // compressed filesize
        $cdrec .= pack('V', $unc_len);       // uncompressed filesize
        $cdrec .= pack('v', strlen($name) ); // length of filename
        $cdrec .= pack('v', 0 );             // extra field length
        $cdrec .= pack('v', 0 );             // file comment length
        $cdrec .= pack('v', 0 );             // disk number start
        $cdrec .= pack('v', 0 );             // internal file attributes
        $cdrec .= pack('V', 32 );            // external file attributes - 'archive' bit set

        $cdrec .= pack('V', $this -> old_offset ); // relative offset of local header
        $this -> old_offset += strlen($fr);

        $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
     */
    function file()
    {
        $data    = implode('', $this -> datasec);
        $ctrldir = implode('', $this -> ctrl_dir);

        return
            $data .
            $ctrldir .
            $this -> eof_ctrl_dir .
            pack('v', sizeof($this -> ctrl_dir)) .  // total # of entries "on this disk"
            pack('v', sizeof($this -> ctrl_dir)) .  // total # of entries overall
            pack('V', strlen($ctrldir)) .           // size of central dir
            pack('V', strlen($data)) .              // offset to start of central dir
            "\x00\x00";                             // .zip file comment length
    } // end of the 'file()' method

} // end of the 'zipfile' class

?>
  
 

 Conclusion

Je développe en tant que autodidacte est espère avoir des avis sur ma source, sur la qualité du code, si vous avez quelques conseils ou bonnes idées je suis preneur !

Ps : Pour éviter toutes erreurs d'encodage de document, je précise qu'il est encode en iso-8859-1.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

08 août 2009 22:40:26 :
Ajout de quelques commentaires
09 août 2009 06:07:33 :
- Modification de l'encodage (anciennement considére comme UTF-8) - Amélioration de la gestion des erreurs - Remise en place de la possibilitée de crée un nouveau fichier (Qui avait mystérieusement disparut oO)
09 août 2009 06:29:52 :
-Mise a jour de la capture
10 août 2009 19:10:14 :
- Ajout d'une fonction "recherche" - Restructuration d'une partie du code pour plus de portabilité et une meilleurs compréhension - Ajout d'un descriptif commenté pour chaque fonction
10 août 2009 19:15:06 :
N/A
10 août 2009 19:24:34 :
-Modification de explorer() => Trie des dossiers | fichiers par ordre alphabetique
10 août 2009 21:25:51 :
Un bout de code en trop qui trainé ...
10 août 2009 21:25:54 :
Un bout de code en trop qui trainé ...
17 août 2009 20:33:25 :
- Modification syntaxe readdir
28 août 2009 19:48:55 :
- Ajout du zip, découpant la forme du fond du script.
28 août 2009 19:59:16 :
- Ajout du zip, découpant la forme du fond du script.
18 octobre 2009 00:53:40 :
MAJ
27 octobre 2009 21:04:54 :
- Amélioration du système de gestion des images

 Sources du même auteur

ALGORITHME DE CÉSAR SUR LA TABLE ASCII

 Sources de la même categorie

SUPPRESSION AUTOMATIQUE DES FICHIERS RAW ORPHELINS APRÈS UN ... par malokaff
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151

 Sources en rapport avec celle ci

Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
Source avec Zip Source avec une capture GESTIONNAIRE DE NEWS BASIQUE AVEC UPLOAD D'IMAGES par cod57
Source avec Zip Source avec une capture GESTIONNAIRE D'ELEVES OU CARNET D'ADRESSE AVEC EXPORT XLS par cod57
Source avec Zip Source avec une capture LISTAGE DE FICHIERS par jeromin75
Source avec Zip Source avec une capture GESTIONNAIRE DE COMPTE BANCAIRE par Ayiana

Commentaires et avis

Commentaire de JJDai le 09/08/2009 11:20:40

Interressant, , et bien commenté, mais j'aurais quelques remarque:
- Séparé les styles dans un fichier CSS permettrait faciliter le code, voir le html aussi (via un template).
- Personnellement je met un "<?php" au début un "?>" à la fin de mon fichier et le reste  est construit et envoyer par via templates, au pire par des "echo". Si je dois ajouter un "?> blabla<?php" pour insérer du html c'est qu'il y un problème, car ça rend la lecture très dificile (mais ça n'engage que moi).

- Important : la fonction télécharger ne fonctionne pas correctement, le fichier Zip ne restitue pas l'arborescence des répertoires, je pense qu'il faut donner le nom relatif du fichier (dossierRacine/dossier/../nom fuFichier) au moment de la constitution du fichier.
JJDAI

Commentaire de astro53 le 09/08/2009 13:45:53

Salut Nementon,

Je suis moi meme autodidacte mais je n ai pas beaucoup de temps pour apprendre et developpez.
J ai lu ton script en grande partie qui est tres interessant. Je reprendrais les memes paroles que JJDAI dans le fait que la page devrait etre separee au niveaux js css et meme pour les functions et class php.
Pour le template je n ai rien a dire a toi de voir...
Aussi meme si ca te parait inutile je vois que beaucoup de function non aucun commentaire ou sont trop peu expliquer. Alors je te conseillerais de rajouter des commentaires meme pour les functions drop ou delete.
Sur ce Merci pour le lien sur le tutoriel, ca m interesse beaucoup...J'ai encore beaucoup a apprendre...
A bientot
Astro

Commentaire de Nementon le 09/08/2009 15:50:36

Bonjours, merci pour vos commentaires, je prend note, effectivement la fonction telecharger() pour des dossier a quelques petits ratés, je pense plutot que le probleme viens de ma fonction explorer() (utiliser pour recuperer la liste des fichiers a zipper) qui n'est pas asser devellopée, je vais donc la retravaillé =p
J'en profiterai pour rajouter aussi quelques commentaires dans le code sources, qui peuvent manquer comme Astro53 la bien remarqué.
Je refléchirai a la l'utilisation d'un template et l'exportation des fichier css/js, mais je pense que je resterai sur ma structure de base, bien qu'il est clair que les css/js "surchage" le code, je vise pour but finale de ce script, un outils de gestion légé a gardé sous la main, pour depanner si l'occasion se présente, d'ou l'envit d'une forte et simple portabilité se resument en un script.

D'ailleurs en y pensant, une fois que tous mes objectifs fixés pour le moment seront atteints, je rajouterai bien un petit web ftp en plus :p

Commentaire de aKheNathOn le 11/08/2009 10:50:44

Bonjour Nementon,

En tant qu'autodidacte tu te débrouilles très bien, tu as documenté ton code, les fonctions sont bien découpées, le hic c'est que tout est dans un seul fichier.

J'adhère au principe si c'est un fichier redistribuable, pas besoin de 200 fichiers à distribuer et placer sur le serveur, mais la source doit obligatoirement être faite de plusieurs fichiers chaque fichier ayant spécifiquement une fonction, sinon c'est un peu compliqué à faire évoluer, et même à relire.

Commentaire de neigedhiver le 15/08/2009 23:30:00

Salut,

Comme à mon habitude, je n'ai pas regardé la source en détails. Par contre, comme il s'agit d'une Nième source qui liste des fichiers et des répertoires, j'ai  voulu savoir comment tu parcourais les fichiers.
Et grosse déception, tu fais encore du PHP3 avec readdir() et opendir().
Je ne peux que te recommander, surtout pour une source que tu revandiqques être PHP5, d'utiliser les itérateurs et les filtres qui te permettront d'obtenir du code encore plus concis, clair et facile à maintenir.
Je vais même oser citer en exemple ma source qui fait ça, je pense, très proprement : ta source apporte des fonctionnalités très intéressantes (de ce que j'ai vu dans le descriptif ^^ ), c'est pourquoi je pense qu'en utilisant ma source comme base pour le listing, tu t'épargnerais une couche du travail ;)
=> http://www.phpcs.com/codes/LISTING-REPERTOIRE-AVEC-FILTRES_45125.aspx

En plus, ta syntaxe de readdir() n'est pas correcte : je t'invite à consulter la documentation de PHP pour voir comment utiliser correctement cette fonction.

Bonne continuation !

Commentaire de Nementon le 28/08/2009 20:03:39

Effectivement, ma syntaxe été incorrecte, je verrai ce que je peut faire avec la STL de php pour amélioré pour le script a la prochaine release, mais pour l'heure, j'ajoute déjà un zip décortiquant le tous :p

Commentaire de Eveas le 30/08/2009 20:48:04 10/10

Jolie, 8 car la POO se fait désirée selon moi

Commentaire de flyfly0908 le 21/10/2009 21:28:58 9/10

J'aime beaucoup ce code mais je voulais tout de même comprendre un problème : si j'upload une image (disons .jpg) l'image va etre affiché dans la zone de texte et donc n'est pas lisible car elle se retrouve "cryptée" (oui je ne voit pas plus adapté).
J'ai pensé qu'ajouter une condition au niveau de l'affichage du fichier (afin de déterminer si le fichier est une image (lecture de l'extension) me permettrai d'afficher les fichiers .jpg ou .bmp autre part que dans la case de modification de texte.
mais... je n'ai pas réussi donc si tu a la solution... :
j'avais pensé rajouter ceci

<?php
   //affichage de l'entête du tableau
   echo
   "
   <table border=1 align=center>
   <tr>
   <td>Image</td>
   <td>Nom de l'image</td>
   </tr>
   ";
    
   //nom du répertoire contenant les images à afficher
   $nom_repertoire = './';

   //ouvre le repertoire
   $pointeur = opendir($nom_repertoire);
   $i = 0;

   //stocke les noms de fichiers images dans un tableau
   while ($fichier = readdir($pointeur)) {
   if (substr($fichier, -3) == "gif" ||
       substr($fichier, -3) == "jpg" ||
       substr($fichier, -3) == "png" ||
       substr($fichier, -4) == "jpeg" ||
       substr($fichier, -3) == "PNG" ||
       substr($fichier, -3) == "GIF" ||
       substr($fichier, -3) == "JPG")
      {
       $tab_image[$i] = $fichier;
       $i++;
      }      
   }
    
   //on ferme le répertoire
   closedir($pointeur);

   //on trie le tableau par ordre alphabétique
   array_multisort($tab_image, SORT_ASC);

   //affichage des images (en 60 * 60 ici)
   for ($j=0;$j<=$i-1;$j++)
   {
   $image = '<img src="'.$nom_repertoire.'/'.$tab_image[$j].'"  width="60" height="60">';

   // affichage bas du tableau
   echo
   '
   <tr>
   <td align="center">'.$image.'</td>
   <td align="center">'.$tab_image[$j].'</td>
   </tr>
   ';
   }
   echo '</table>';

?>

dans le cas présent les images sont en 60 par 60 mais c'est modifiable.
quelqu'un pourrait il me montrer comment inserer proprement mon code et celui de Nementon ?

Commentaire de Nementon le 27/10/2009 18:31:40

Bonjours,

Je ne suis pas sur d'avoir compris ce que tu désir faire, veut tu pouvoir afficher une image (Au lieu de son texte "encodé" (effectivement difficile de trouver le bon mot), lorsque dans la parti "Gestionnaire de fichier" tu clique sur son lien pour le modifier ?

Si oui, voila ce que je te propose :

Tout d'abord cree une fonction disons is_image() pour vérifier si le fichier passer en paramètre est une image :

function is_image($data){
$fichier = substr($data, -3);
if ($fichier == "gif" ||
        $fichier == "jpg" ||
        $fichier == "png" ||
        $fichier == "jpeg" ||
        $fichier == "PNG" ||
        $fichier == "GIF" ||
        $fichier == "JPG") {
  
return true;
  
   }
   else {
return false;
   }
}

Pour ensuite de modifier la partie adéquate, verifier si fichier est une image, si oui l'afficher, si non, afficher le textarea :

<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="<?php echo getcwd(); ?>" name="repertoire" />
<input type="hidden" value="modifier" name="action" />
<input type="hidden" value="<?php echo $fichier; ?>" name="nom" />
<?php if (is_image($fichier)) { // Si le  fichier est une image, on l'affiche
echo '<center><img src="'.$fichier.'" /></center>';
}
else {
?> <textarea name="contenu" style="width:100%; height:250px;"><?php if (isset($erreur)) { echo $erreur; } else {
// Sinon on affiche le contenu du potentiellement texte
echo htmlentities($contenu);
} ?> </textarea>
<?php }
?>           <br /><br />
<input type="submit" value="Modifier" />
</form>
</fieldset>

Ensuite, si c'est dans le gestionnaire lui meme, que tu veut faire apparaitre les image, je pense la qu'il faut modifier la fonction explorer, pour rajouter un array contenant toutes les images (ceci toujours grâce a l'aide de la fonction is_image()) (Bon je me donne un moment histoire de me replonger dans le code est je post cela, dis moi si je me trompe totalement :p)

Commentaire de Nementon le 27/10/2009 18:59:50

Voila les modification que je  te propose :

Petite modification dans la fonction explorer :

function explorer($dir, $recursif=false, $pattern=false)
{
$listeDossier = array();
$listeFichier = array();
$listeImage   = array();
$pointeur = opendir($dir);
while (false !== ($fichier = readdir($pointeur))){
// On ne tiens pas conte du dossier courant
if(!in_array($fichier, array('.','..'))){
// Est ce que le fichier est un repertoire ?
// On n'oublie pas rajouter le chemin du fichier
if (is_dir($dir."/".$fichier)){
if($pattern) {
if ($recursif){
$listeFichier = array_merge($listeFichier, explorer($dir.'/'.$fichier, $recursif, $pattern));
}
}
else if($recursif){
// Recursif = oui ? alors explorons le !
$listeDossier = array_merge($listeDossier, explorer($dir.'/'.$fichier, $recursif));
}
else {
// C'est un dossier, on l'ajoute
$listeDossier[] = "$dir/$fichier";
}
}
else if ($pattern) {
// Mode recherche ? On l'ajoute seulement si la sous chaine recherché est presente
if (stristr($fichier, $pattern)){
$listeFichier[] = "$dir/$fichier";
}
}
else {
if (is_image($fichier))  {
$listeImage[] = "$dir/$fichier";
}
else {
// C'est un fichier, on l ajoute
$listeFichier[] = "$dir/$fichier";
}
}


}
}
// L'exploration est termnier, on ferme =p
closedir($pointeur);
// Trie par ordre alphabhetique
usort($listeImage, "strcasecmp");
usort($listeDossier, "strcasecmp");
usort($listeFichier, "strcasecmp");
// On retourne la liste des dossiers suivies des fichiers, fusion des tableaux $listeDossier && $listeFichier
return $listeDossier = array_merge($listeImage, array_merge($listeDossier, $listeFichier));
}

et petite modification dans la fonction listRepertoire :

function listRepertoire($dir=false, $recursif=false, $pattern=false)
{
    // Récupération du chemin courant
    $repCourant = getcwd();
if ($pattern == false)
{
if($dir !=false) {
     $fichiers = explorer($dir, $recursif);
     }
else {
$fichiers = explorer('.', $recursif);
}
    
}
else
{
$fichiers = explorer($dir, $recursif, $pattern);
if (empty($fichiers)) {
echo '<center> Aucun résultat pour la recherche de '.$pattern.' dans le dossier '.$dir;
}
else {
$nbr_resultat = count($fichiers);
echo "<center>$nbr_resultat fichiers trouvé pour l'occurance $pattern dans le dossier $dir";
}
}

// ajout ".." (qui a été filtré par la fonction)
if ($repCourant != "/") $fichiers = array_merge(array("./.."), $fichiers);
?>
<form action="<?php echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>" method="post">
<table border="1" width="100%">
    <tr>
        <td width="50%"><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 ? */
if (is_image($fichiers[$i]))
{
?>
<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];?>">
<img src="<?php echo $fichiers[$i]; ?>" alt="60" width="60" />
</a>
</td>
<td class="center">
[Image]
</td>

<?php
}
        else if (is_dir($fichiers[$i]))
        {
            
?> <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];?>">
            <?php echo "<span style='color:red;'>[ " .basename($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
}


En gros, je rajoute un array listeImage dans la fonction explorer que je fusionne ensuite avec les array listeDossier et listeFichier ce qui nous donne une "arborescence"

-Image
-Dossier
-Fichier

Et je rajoute une structure de contrôle dans la fonction listRepertoire, pour gérer l'affichage de mes images

(Merci en tout cas, c'est une excellente qui idee, que je vais continuer a retravailler =p)

Commentaire de Nementon le 27/10/2009 19:02:53

Ps : je viens de me rendre compte que mes liens associer aux image son erroné, en effet j'avais c/c la partie du code pour les dossiers, au clique il essaye donc de changer de dossier, pas de modifier le fichier image, a rectifier =p

Commentaire de lebiopsy le 16/06/2010 04:06:09

...
Bonsoir!

Je découvre le script! Bon...tant pis pour sa date de publication....

Bien sûr, le script gagnerait à être "découpé" pour une meilleure lisibilité et une meilleure maintenance....mais ce n'est là que l'avis d'un fouineur amateur!
Sinon, je pense que pour un autodidacte qui fait des scripts comme ça, y'a rien à dire que des bravos et des merci!
Ce script constitue un excellent exercice de réflexion et d'apprentissage...à adapter selon les besoins!
En effet, je trouve "la gestion des fichiers, une partie intéressante. Cependant, j'aimerai savoir s'il est possible de ne pas afficher les dossiers et répertoires du site.

Ainsi, peux-t-on n'afficher que l'arborescence des dossiers et fichiers créés par l'utilisateur et cacher les dossiers et repertoires du site?

Merci de m'orienter et très bonne continuation.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Comment tester les fichiers PHP [ par Clem ] Comment tester les fichiers PHP sans les publier sur son site ? Dans le genre de PWS avec l'asp Tri de fichiers par date [ par Clem ] Comment trier dans l'orde du plus nouveau au plus vieux, des dossiers ?J'ai trouvé pour afficher les dossiers :&lt;?$rep=opendir('.');while ($file = r Fichiers dans une base de donnée [ par Clem ] Comment uploader un fichier dans une base de données, et le downloader ? réaliser et envoyer des fichiers zip [ par pupuce ] J'ai vu qu'il est possible de créer des fichiers zip, jusque là je vois bien comment faire mais :Je veut pouvoir envoyer le zip au client, sans qu'il Compter des fichiers.... [ par FleX ] Alors voila. je voudrais me faire un script php3 qui compte le nombre de fichiers dans un dossier et que le resultat soit mis dans une variable, que j créer un fichier ???? petit PB [ par MangaII ] Hello les gars !Voilà, j'ai un petit soucis, j'ai besoin de créer des fichiers (TXT) sur mon site, depuis ma page en PHP ! le PB, c que je pe pas ! Je Encore les fichiers [ par koko ] bon c'est encore moi avec mes fichiers.txt... cette fois-ci, je voudrais que lorque j'ouvre le fichier, il mets les variables qui sont à l'intérieur d fichiers batch et username [ par booth ] bonjour, je cherche le moyen soit de lancer un batch sur la machine client, soit de récupérer directement son username (log windows ou netware)si kelk zipper plusieurs fichiers [ par eax ] help! je cherche à apprendre comment faire pour zipper plusieurs fichiers (des images par exemple). si qqun connait un bon tutorial ou un code source connection FTP par PHP [ par JulienC ] Bonjour à toutes et à tous,Mon but est de pouvoir uploader sur mon site des fichiers ayant une extension particulière (on les nommera .ext). Ces fichi


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales