<?php
require_once("config.php") ;
$rootdir = "./fichiers";
$imagedir = "./images";
if ( ! is_dir($rootdir) )
{
echo "Unable to get access to $rootdir, contact your web administrator.";
die();
}
$currentdir = $_POST['path'];
// on tronque le debut si c'est un /
if ( substr($currentdir,0,1) == "/" )
{
$currentdir = substr($currentdir,1,strlen($currentdir) - 1);
}
// si la fin de $currentdir = .. alors on retourne a la racine de ce dossier
if ( substr($currentdir, strlen($currentdir) - 2, 2) == ".." )
{
// strip last /..
$currentdir = substr($currentdir, 0, strlen($currentdir) - 3);
// strip last /dirname
$currentdir = substr($currentdir, 0, strrpos($currentdir,"/"));
}
// si la fin de $currentdir = /. alors on retourne a la racine de ce dossier
if ( substr($currentdir, strlen($currentdir) - 2, 2) == "/." )
{
$currentdir = substr($currentdir, 0,strlen($currentdir) - 2);
}
// evite tout probleme de securite MAISempeche les nom de rep avec .. dedans
$currentdir = str_replace("..", "", $currentdir);
// on traite les actions sp?©ciales
$action = $_POST['action'];
switch($action)
{
case "mkdir":
if ( isset($_POST['arg'] ) )
{
// evite tout probleme de securite MAIS empeche les nom de rep avec .. dedans
$mkdir = str_replace("..", "", $_POST['arg']);
umask (0);
mkdir($rootdir . "/" . $currentdir . "/" . $mkdir);
}
else
{
$affiche_creer_formulaire = true;
}
break;
case "rm";
if ( isset($_POST['confirmation'] ) )
{
// evite tout probleme de securite MAIS empeche les nom de rep avec .. dedans
$rm = str_replace("..", "", $_POST['path']);
if ( isset($_POST['file']) )
$rm = $rm . "/" . str_replace("..","", $_POST['file']) ;
system("rm -r '". $rootdir . "/" . $rm . "'") ;
}
else
{
if( ! isset($_POST['infirmation']))
$affiche_supprimer_formulaire=true;
}
// si l'on ne supprimait pas un fichier (donc un rep, on doit retourner a la racine quelque soit la reponse
if ( ( isset($_POST['confirmation']) || isset($_POST['infirmation']) ) && ! isset($_POST['file']) )
// strip last /dirname pour retourner au parent du rep en cours
$currentdir = substr($currentdir, 0, strrpos($currentdir,"/"));
break;
case "deconnection":
break;
case "upload":
if ( ! isset($_FILES['uploadFile']) )
$affiche_upload_formulaire = true;
break;
}
// l'upload se fait en post (l'action)
if (isset($_POST['action']) && $_POST['action'] == "upload")
{
if ( isset($_FILES['uploadFile']) )
{
$file_name = $_FILES['uploadFile']['name'];
// strip file_name of slashes
$file_name = stripslashes($file_name);
if ($_POST['date'])
{
$file_name = date("Y-m-d-H\hi-") . $file_name;
}
$uploaddir = $rootdir . "/" . str_replace("..","",urldecode($_POST['path']));
$file_name = $uploaddir . "/" . str_replace("'","",$file_name);
$copy = copy($_FILES['uploadFile']['tmp_name'],$file_name);
// check if successfully copied
if( ! $copy)
{
echo basename($file_name) . " | <b>Impossible d'uploader</b>!<br>";
}
}
}
?>
<html>
<head>
<title>
Explorateur de fichier - /<?php echo $currentdir; ?>
</title>
</head>
<body>
<BIG><BIG>Explorateur - /<?php echo $currentdir; ?></BIG></BIG>
<table border=1 width=100%>
<tr><td colspan=2>
<!-- Toolbar -->
<table width=100%>
<tr><td>
<a href="<? echo $_self . "?path="; ?>">Racine</a> |
<a href="<? echo $_self . "?action=mkdir&path=" . urlencode($currentdir); ?>">Creer Repertoire</a> |
<a href="<? echo $_self . "?action=upload&path=" . urlencode($currentdir); ?>">Uploader</a>
</td></tr>
</table>
<?php
//connection au serveur
$cnx = mysql_connect(SERVEUR, USER, PASS, DB) ;
//sÈlection de la base de donnÈes:
$db = mysql_select_db(DB) ;
//rÈcupÈration des valeurs des champs:
$nom_rep = $_POST['arg'] ;
?>
<?php
if ( $affiche_creer_formulaire )
{
// affichage du formulaire pour creer un repertoire
?>
<hr>
<form method="post">
<input type="hidden" name="path" value="<? echo $currentdir ?>" />
<input type="hidden" name="action" value="mkdir" />
Nom du repertoire : <input type="text" name="arg"/>
<input type="submit" value="Creer" />
</form>
<?php $sql = "INSERT INTO rep (nom_rep)
VALUES ( '$nom_rep') " ;
$requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
?>
<?php
}
if ( $affiche_supprimer_formulaire )
{
// affichage du formulaire pour supprimer un repertoire
?>
<hr>
<form method="post">
<input type="hidden" name="path" value="<? echo $currentdir ?>" />
<?
if ( isset($_POST['file']) )
echo "<input type=\"hidden\" name=\"file\" value=\"" . $_POST['file'] . "\" />";
?>
<input type="hidden" name="action" value="rm" />
Supprimer <? echo $currentdir . "/"; if (isset($_POST['file'])) echo $_POST['file']; ?> ?
<input type="submit" name="confirmation" value="Oui" />
<input type="submit" name="infirmation" value="Non" />
</form>
<?php
}
if ( $affiche_upload_formulaire )
{
?>
<hr>
<form enctype="multipart/form-data" method="post">
Fichier : <input name="uploadFile" type="file" id="uploadFile" />
<input type="hidden" name="action" value="upload" />
<input type="hidden" name="path" value="<? echo urlencode($currentdir);?>">
<input type="submit" name="submit" value="Uploader" />
<input type="checkbox" name="date" CHECKED/>Dater le fichier
</form>
<?php
}
?>
</td></tr>
<tr>
<td valign=top width=20%>
<!-- Colonne pour les repertoires -->
<table border=0 width=100% height=100%>
<tr><td colspan=3>
<table border=1 width=100%>
<tr>
<td width=100%><b>Repertoires</b></td>
</tr>
</table>
</td></tr>
<?php
$directory = opendir( $rootdir . "/" . $currentdir );
while( $dir = readdir($directory) )
{
if (is_dir( $rootdir . "/" . $currentdir . "/" . $dir) && $dir != "." )
{
// on affiche pas le .. quand on est a la racine
if( $currentdir == "" && $dir != ".." || $currentdir != "")
{
echo "<tr><td width=30 height=30>";
echo "<img width=30 height=28 src=\"" . $imagedir . "/dir.png\">";
echo "</td><td width=80%>";
echo "<a href=\"" . $_self . "?path=" . urlencode($currentdir) . "/" . urlencode($dir) . "\">" . $dir . "</a>";
echo "</td><td align=right> ";
if ( $dir != ".." )
echo "<a href=\"" . $_self . "?action=rm&path=" . urlencode($currentdir) . "/" . urlencode($dir) . "\">X</a>";
echo "</td></tr>\n";
}
}
}
closedir($directory);
?>
</table>
</td>
<td valign=top width=80%>
<!-- Colonne pour les fichiers -->
<table border=0 width=100% height=100%>
<tr><td colspan=3>
<table border=1 width=100%>
<tr>
<td width=75%><b>Noms</b></td>
<td width=25% align=right><b>Taille</b></td>
</tr>
</table>
</td></tr>
<?php
$directory = opendir( $rootdir . "/" . $currentdir );
$foundone = false;
while( $file = readdir($directory) )
{
if (is_file($rootdir . "/" . $currentdir . "/" . $file) )
{
$foundone = true;
echo "<tr><td width=30 height=35>";
// selon l'extension du fichier
$ext = strtolower(substr($file,strrpos($file,".") + 1,strlen($file) - strrpos($file,".")));
switch($ext)
{
case "gif":
case "jpg":
case "png":
echo "<img width=30 height=28 src=\"miniature.php?gd=2&maxw=30&src=" . $rootdir . "/" . urlencode($currentdir) . "/" . urlencode($file) . "\"/>";
break;
default:
if ( is_file( $imagedir . "/" . $ext . ".gif" ) )
echo "<img width=30 height=28 src=\"miniature.php?gd=2&maxw=30&src=" . $imagedir . "/" . $ext . ".gif" . "\"/>";
else
echo strtoupper($ext);
break;
}
echo "</td><td>";
echo "<a href=\"" . $rootdir . "/" . $currentdir . "/" . $file . "\">" . $file . "</a>";
echo "</td><td align=right width=15%>";
echo filesize($rootdir . "/" . $currentdir . "/" . $file );
echo " <a href=\"" . $_self . "?action=rm&path=" . urlencode($currentdir) . "&file=" . urlencode($file) . "\">X</a>";
echo "</td></tr>\n";
}
}
closedir($directory);
if ( ! $foundone)
{
echo "<tr><td colspan=3 align=center><b>Aucun fichier !</b></td></tr>";
}
?>
</table>
</td>
</tr>
</table>
</body>
</html>
Code : Tout sélectionner
<a href="<? echo $_self . "?action=mkdir&path=" . urlencode($currentdir); ?>">Creer Repertoire</a>
Code : Tout sélectionner
switch($action)
{
case "mkdir":
if ( isset($_POST['arg'] ) )
{
// evite tout probleme de securite MAIS empeche les nom de rep avec .. dedans
$mkdir = str_replace("..", "", $_POST['arg']);
umask (0);
mkdir($rootdir . "/" . $currentdir . "/" . $mkdir);
}
else
{
$affiche_creer_formulaire = true;
}
break;
Avec PHP parfois, il suffit pas de penser... Il faut contrôler aussije pense que oui.
Tu remarqueras que pour ce cas, suivant ce que t'as écris Cyrano, tu te retrouves avec une variable arrivant dans le tableau $_GET (car transmises par url)...l'action est déclanchée par ce lien :Code : Tout sélectionner
<a href="<? echo $_self . "?action=mkdir&path=" . urlencode($currentdir); ?>">Creer Repertoire</a>
if (isset($_GET['action'])) $action= $_GET['action'])
else
{
if (isset($_POST['action'])) $action= $_POST['action'])
}
C'est un peu plus propre... Donc tu mets ça à la place de la ligne où tu dis que $action =$_POST["action"]<?php
require_once("config.php") ;
$rootdir = "./fichiers";
$imagedir = "./images";
if ( ! is_dir($rootdir) )
{
echo "Unable to get access to $rootdir, contact your web administrator.";
die();
}
$currentdir = $_POST['path'];
// on tronque le debut si c'est un /
if ( substr($currentdir,0,1) == "/" )
{
$currentdir = substr($currentdir,1,strlen($currentdir) - 1);
}
// si la fin de $currentdir = .. alors on retourne a la racine de ce dossier
if ( substr($currentdir, strlen($currentdir) - 2, 2) == ".." )
{
// strip last /..
$currentdir = substr($currentdir, 0, strlen($currentdir) - 3);
// strip last /dirname
$currentdir = substr($currentdir, 0, strrpos($currentdir,"/"));
}
// si la fin de $currentdir = /. alors on retourne a la racine de ce dossier
if ( substr($currentdir, strlen($currentdir) - 2, 2) == "/." )
{
$currentdir = substr($currentdir, 0,strlen($currentdir) - 2);
}
// evite tout probleme de securite MAISempeche les nom de rep avec .. dedans
$currentdir = str_replace("..", "", $currentdir);
// on traite les actions sp?©ciales
if (isset($_GET['action'])) $action= $_GET['action'])
else
{
if (isset($_POST['action'])) $action= $_POST['action'])
}
switch($action)
{
case "mkdir":
if ( isset($_POST['arg'] ) )
{
// evite tout probleme de securite MAIS empeche les nom de rep avec .. dedans
$mkdir = str_replace("..", "", $_POST['arg']);
umask (0);
mkdir($rootdir . "/" . $currentdir . "/" . $mkdir);
}
else
{
$affiche_creer_formulaire = true;
}
break;
case "rm";
if ( isset($_POST['confirmation'] ) )
{
// evite tout probleme de securite MAIS empeche les nom de rep avec .. dedans
$rm = str_replace("..", "", $_POST['path']);
if ( isset($_POST['file']) )
$rm = $rm . "/" . str_replace("..","", $_POST['file']) ;
system("rm -r '". $rootdir . "/" . $rm . "'") ;
}
else
{
if( ! isset($_POST['infirmation']))
$affiche_supprimer_formulaire=true;
}
// si l'on ne supprimait pas un fichier (donc un rep, on doit retourner a la racine quelque soit la reponse
if ( ( isset($_POST['confirmation']) || isset($_POST['infirmation']) ) && ! isset($_POST['file']) )
// strip last /dirname pour retourner au parent du rep en cours
$currentdir = substr($currentdir, 0, strrpos($currentdir,"/"));
break;
case "deconnection":
break;
case "upload":
if ( ! isset($_FILES['uploadFile']) )
$affiche_upload_formulaire = true;
break;
}
// l'upload se fait en post (l'action)
if (isset($_POST['action']) && $_POST['action'] == "upload")
{
if ( isset($_FILES['uploadFile']) )
{
$file_name = $_FILES['uploadFile']['name'];
// strip file_name of slashes
$file_name = stripslashes($file_name);
if ($_POST['date'])
{
$file_name = date("Y-m-d-H\hi-") . $file_name;
}
$uploaddir = $rootdir . "/" . str_replace("..","",urldecode($_POST['path']));
$file_name = $uploaddir . "/" . str_replace("'","",$file_name);
$copy = copy($_FILES['uploadFile']['tmp_name'],$file_name);
// check if successfully copied
if( ! $copy)
{
echo basename($file_name) . " | <b>Impossible d'uploader</b>!<br>";
}
}
}
?>
<html>
<head>
<title>
Explorateur de fichier - /<?php echo $currentdir; ?>
</title>
</head>
<body>
<BIG><BIG>Explorateur - /<?php echo $currentdir; ?></BIG></BIG>
<table border=1 width=100%>
<tr><td colspan=2>
<!-- Toolbar -->
<table width=100%>
<tr><td>
<a href="<? echo $_self . "?path="; ?>">Racine</a> |
<a href="<? echo $_self . "?action=mkdir&path=" . urlencode($currentdir); ?>">Creer Repertoire</a> |
<a href="<? echo $_self . "?action=upload&path=" . urlencode($currentdir); ?>">Uploader</a>
</td></tr>
</table>
<?php
//connection au serveur
$cnx = mysql_connect(SERVEUR, USER, PASS, DB) ;
//sÈlection de la base de donnÈes:
$db = mysql_select_db(DB) ;
//rÈcupÈration des valeurs des champs:
$nom_rep = $_POST['arg'] ;
?>
<?php
if ( $affiche_creer_formulaire )
{
// affichage du formulaire pour creer un repertoire
?>
<hr>
<form method="post">
<input type="hidden" name="path" value="<? echo $currentdir ?>" />
<input type="hidden" name="action" value="mkdir" />
Nom du repertoire : <input type="text" name="arg"/>
<input type="submit" value="Creer" />
</form>
<?php $sql = "INSERT INTO rep (nom_rep)
VALUES ( '$nom_rep') " ;
$requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
?>
<?php
}
if ( $affiche_supprimer_formulaire )
{
// affichage du formulaire pour supprimer un repertoire
?>
<hr>
<form method="post">
<input type="hidden" name="path" value="<? echo $currentdir ?>" />
<?
if ( isset($_POST['file']) )
echo "<input type=\"hidden\" name=\"file\" value=\"" . $_POST['file'] . "\" />";
?>
<input type="hidden" name="action" value="rm" />
Supprimer <? echo $currentdir . "/"; if (isset($_POST['file'])) echo $_POST['file']; ?> ?
<input type="submit" name="confirmation" value="Oui" />
<input type="submit" name="infirmation" value="Non" />
</form>
<?php
}
if ( $affiche_upload_formulaire )
{
?>
<hr>
<form enctype="multipart/form-data" method="post">
Fichier : <input name="uploadFile" type="file" id="uploadFile" />
<input type="hidden" name="action" value="upload" />
<input type="hidden" name="path" value="<? echo urlencode($currentdir);?>">
<input type="submit" name="submit" value="Uploader" />
<input type="checkbox" name="date" CHECKED/>Dater le fichier
</form>
<?php
}
?>
</td></tr>
<tr>
<td valign=top width=20%>
<!-- Colonne pour les repertoires -->
<table border=0 width=100% height=100%>
<tr><td colspan=3>
<table border=1 width=100%>
<tr>
<td width=100%><b>Repertoires</b></td>
</tr>
</table>
</td></tr>
<?php
$directory = opendir( $rootdir . "/" . $currentdir );
while( $dir = readdir($directory) )
{
if (is_dir( $rootdir . "/" . $currentdir . "/" . $dir) && $dir != "." )
{
// on affiche pas le .. quand on est a la racine
if( $currentdir == "" && $dir != ".." || $currentdir != "")
{
echo "<tr><td width=30 height=30>";
echo "<img width=30 height=28 src=\"" . $imagedir . "/dir.png\">";
echo "</td><td width=80%>";
echo "<a href=\"" . $_self . "?path=" . urlencode($currentdir) . "/" . urlencode($dir) . "\">" . $dir . "</a>";
echo "</td><td align=right> ";
if ( $dir != ".." )
echo "<a href=\"" . $_self . "?action=rm&path=" . urlencode($currentdir) . "/" . urlencode($dir) . "\">X</a>";
echo "</td></tr>\n";
}
}
}
closedir($directory);
?>
</table>
</td>
<td valign=top width=80%>
<!-- Colonne pour les fichiers -->
<table border=0 width=100% height=100%>
<tr><td colspan=3>
<table border=1 width=100%>
<tr>
<td width=75%><b>Noms</b></td>
<td width=25% align=right><b>Taille</b></td>
</tr>
</table>
</td></tr>
<?php
$directory = opendir( $rootdir . "/" . $currentdir );
$foundone = false;
while( $file = readdir($directory) )
{
if (is_file($rootdir . "/" . $currentdir . "/" . $file) )
{
$foundone = true;
echo "<tr><td width=30 height=35>";
// selon l'extension du fichier
$ext = strtolower(substr($file,strrpos($file,".") + 1,strlen($file) - strrpos($file,".")));
switch($ext)
{
case "gif":
case "jpg":
case "png":
echo "<img width=30 height=28 src=\"miniature.php?gd=2&maxw=30&src=" . $rootdir . "/" . urlencode($currentdir) . "/" . urlencode($file) . "\"/>";
break;
default:
if ( is_file( $imagedir . "/" . $ext . ".gif" ) )
echo "<img width=30 height=28 src=\"miniature.php?gd=2&maxw=30&src=" . $imagedir . "/" . $ext . ".gif" . "\"/>";
else
echo strtoupper($ext);
break;
}
echo "</td><td>";
echo "<a href=\"" . $rootdir . "/" . $currentdir . "/" . $file . "\">" . $file . "</a>";
echo "</td><td align=right width=15%>";
echo filesize($rootdir . "/" . $currentdir . "/" . $file );
echo " <a href=\"" . $_self . "?action=rm&path=" . urlencode($currentdir) . "&file=" . urlencode($file) . "\">X</a>";
echo "</td></tr>\n";
}
}
closedir($directory);
if ( ! $foundone)
{
echo "<tr><td colspan=3 align=center><b>Aucun fichier !</b></td></tr>";
}
?>
</table>
</td>
</tr>
</table>
</body>
</html>