par
béka » 22 juin 2007, 09:19
Voilà, après de longues recherches et de longs essais hier, j'ai réussi à faire mon code pour naviguer dans une arborescence.
Voici le code (ça peut toujours servir, et peut être verrez-vous des choses et des points qui peuvent être optimisés).
<!--script explorer.php-->
<head>
<script LANGUAGE="JavaScript">
parametres="toolbar=0,location=0,directories=0,menuBar=0,scrollbars=1,width=700,height=600,left=150,top=50";
function OuvrirFenetre(lien) {
f=window.open(lien,"fenetre",parametres);
f.focus();
}
</script></head>
<?
include ('../includes/config.php');
// url du script exécuté
$self=$_SERVER['PHP_SELF'];
// dirname() extrait le chemin de l'url
$chemin=dirname($self);
// getcwd() donne le chemin réel sur le système de fichier hôte
$rep=getcwd();
// pour récupérer les valeurs des paramètres éventuellement transmis par formulaire
if (isset($_POST['rep'])) {
$rep=$_POST['rep'];
$chemin=$_POST['ch'];
}
echo "<h4>$chemin</h4>";
$compt=0;
// $rep doit être un chemin de rép. réel sur le système : ne pas l'afficher
if( $dir = opendir($rep) ) {
while( FALSE !== ($fich = readdir($dir)) ) {
/* $fich est toujours un nom sans chemin d'accès !
* il désigne un fichier ou un s-rép ou les pseudo-rép '.' ou '..'
*/
// pour bloquer la remontée au dessus de la racine du site web
if (($fich == "..") && ($chemin !="/$self/") ){
// $rep contient le chemin réel vers le rép. courant
chdir($rep);
// pour se déplacer au rép. parent
chdir("..");
// pour récupérer ainsi le nouveau chemin
$newrep=getcwd();
// calculer le nouveau chemin WEB en éliminant le dernier rép.
if (preg_match("#(\S+)/\S+$#",$chemin))
{
$newchemin=preg_replace("#(\S+)/\S+$#", '$1', $chemin);
}
else
$newchemin = "/";
// transmission de $rep et $chemin par champs cachés de formulaire
echo "<form action='$self' method='post' >
<input type='hidden' name='rep' value='$newrep'>
<input type='hidden' name='ch' value='$newchemin'>
</form>";
// activer le lien provoque le rechargement du script
//echo dirname($_SERVER['PHP_SELF']);
if ( dirname($_SERVER['PHP_SELF']) != $chemin)
{
echo "<a href='#' onclick='document.forms[0].submit();'>
<img src='../images/style_dotdot.jpg' width='20' height='20' border='0' ><b>..</b></a>
<br>";
}
}
elseif ($fich != ".") {
if (is_dir($rep."/".$fich)) {
// pour compter les formulaires associés
$compt++;
chdir($rep."/".$fich);
$newrep=getcwd();
$newchemin= $chemin."/".$fich;
echo "<form action='$self' method='post' >
<input type='hidden' name='rep' value='".$newrep."'>
<input type='hidden' name='ch' value='".$newchemin."'>
</form>";
echo "<a href='#' onclick='document.forms[$compt].submit();'>
<img src='../images/style_directory.jpg' width=20 height=20 border=0>$compt-$fich</a>
<br>";
}
else {
$url = $chemin."/".$fich;
echo " <a href=\"javascript: OuvrirFenetre('$url');\">
<img src='../images/style_file.jpg' width=20 height=20 border=0>$fich</a><br>";
}
}
}
}
?>
Par contre, comment pour chaque répertoire appliquer le code ci-dessous lorsque l'utilisateur clique sur un lien, "gérer ce répertoire"
<?php
//initialisation de la session
session_start(session_name('administration'));
//fichier qui permet la connexion au serveur et l'accès aux fonctions
include('../includes/config.php');
//fichier de langue
require ('../includes/language/french/directory.php');
//début langage html
include ('../includes/header.php');
//on vérifie que l'utilisateur s'est bien identifié
//s'il s'agit d'un administrateur admin ou sadmin
if ((isset($_SESSION['admin'])) or (isset($_SESSION['sadmin'])))
{
//on récupère tous les fichiers, qui sont dans le répertoire directory,
//on les stocke dans un tableau et on les affiche à l'écran
if( (!isset($_POST['dirname_add'])) && (!isset($_POST['dirname_delete'])) )
{
//on définit la variable path
$path = getcwd();
//on appelle la fonction
//list_dir($path);
}
//création d'un répertoire
if(isset($_POST['dirname_add']))
{
$path = getcwd();
$dirname = $_POST['dirname_add'];
//on supprime les accents
$dirname = strtr($dirname, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");
mkdir_recursive($path.'/'.$dirname);
//list_dir($path);
}
//suppression d'un répertoire
elseif(isset($_POST['dirname_delete']))
{
$path = getcwd();
$dirname = $_POST['dirname_delete'];
//on supprime les accents
$dirname = strtr($dirname, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");
full_rmdir($path.'/'.$dirname);
//list_dir($path);
}
?>
<!-- formulaire de création d'un répertoire-->
<form method="post" action="directory.php">
<fieldset>
<legend><? echo DIRECTORY_FORM_CREATE; ?></legend>
<p><label for="dirname_add"><? echo DIRECTORY_NAME_CREATE; ?></label><input type="text" name="dirname_add" /></p>
<p><input type="submit" name="valider" value="Créer le répertoire" /></p>
</fieldset>
</form>
<!-- fin de formulaire de création de répertoire-->
<br />
<!-- formulaire de suppression d'un répertoire-->
<form name="suppr" method="post" action="directory.php" onSubmit="return confirmation();">
<fieldset>
<legend><? echo DIRECTORY_FORM_DELETE ?></legend>
<p><label for="dirname_delete"><? echo DIRECTORY_NAME_DELETE; ?></label><input type="text" name="dirname_delete" /></p>
<p><input type="submit" name="valider" value="Supprimer le répertoire" /></p>
</fieldset>
</form>
<!-- fin de formulaire de suppression de répertoire-->
<br /><br />
<!-- formulaire pour retourner à l'accueil de l'admin-->
<form method="post" action="../home.php">
<fieldset>
<legend><? echo DIRECTORY_RETURN_FORM; ?></legend>
<p><input type="submit" name="retour" value="Retourner au menu d'administration" /></p>
</fieldset>
</form>
<!-- fin du formulaire de retour-->
<?
}
//si la personne n'a pas le droit d'accéder à cette page
/*}
else
{
header("Location: ../index.php"); //on l'a renvoi sur la page d'accueil
exit();
}*/
//footer
include ("../includes/footer.php");
?>
Voilà, après de longues recherches et de longs essais hier, j'ai réussi à faire mon code pour naviguer dans une arborescence.
Voici le code (ça peut toujours servir, et peut être verrez-vous des choses et des points qui peuvent être optimisés).
[php]<!--script explorer.php-->
<head>
<script LANGUAGE="JavaScript">
parametres="toolbar=0,location=0,directories=0,menuBar=0,scrollbars=1,width=700,height=600,left=150,top=50";
function OuvrirFenetre(lien) {
f=window.open(lien,"fenetre",parametres);
f.focus();
}
</script></head>
<?
include ('../includes/config.php');
// url du script exécuté
$self=$_SERVER['PHP_SELF'];
// dirname() extrait le chemin de l'url
$chemin=dirname($self);
// getcwd() donne le chemin réel sur le système de fichier hôte
$rep=getcwd();
// pour récupérer les valeurs des paramètres éventuellement transmis par formulaire
if (isset($_POST['rep'])) {
$rep=$_POST['rep'];
$chemin=$_POST['ch'];
}
echo "<h4>$chemin</h4>";
$compt=0;
// $rep doit être un chemin de rép. réel sur le système : ne pas l'afficher
if( $dir = opendir($rep) ) {
while( FALSE !== ($fich = readdir($dir)) ) {
/* $fich est toujours un nom sans chemin d'accès !
* il désigne un fichier ou un s-rép ou les pseudo-rép '.' ou '..'
*/
// pour bloquer la remontée au dessus de la racine du site web
if (($fich == "..") && ($chemin !="/$self/") ){
// $rep contient le chemin réel vers le rép. courant
chdir($rep);
// pour se déplacer au rép. parent
chdir("..");
// pour récupérer ainsi le nouveau chemin
$newrep=getcwd();
// calculer le nouveau chemin WEB en éliminant le dernier rép.
if (preg_match("#(\S+)/\S+$#",$chemin))
{
$newchemin=preg_replace("#(\S+)/\S+$#", '$1', $chemin);
}
else
$newchemin = "/";
// transmission de $rep et $chemin par champs cachés de formulaire
echo "<form action='$self' method='post' >
<input type='hidden' name='rep' value='$newrep'>
<input type='hidden' name='ch' value='$newchemin'>
</form>";
// activer le lien provoque le rechargement du script
//echo dirname($_SERVER['PHP_SELF']);
if ( dirname($_SERVER['PHP_SELF']) != $chemin)
{
echo "<a href='#' onclick='document.forms[0].submit();'>
<img src='../images/style_dotdot.jpg' width='20' height='20' border='0' ><b>..</b></a>
<br>";
}
}
elseif ($fich != ".") {
if (is_dir($rep."/".$fich)) {
// pour compter les formulaires associés
$compt++;
chdir($rep."/".$fich);
$newrep=getcwd();
$newchemin= $chemin."/".$fich;
echo "<form action='$self' method='post' >
<input type='hidden' name='rep' value='".$newrep."'>
<input type='hidden' name='ch' value='".$newchemin."'>
</form>";
echo "<a href='#' onclick='document.forms[$compt].submit();'>
<img src='../images/style_directory.jpg' width=20 height=20 border=0>$compt-$fich</a>
<br>";
}
else {
$url = $chemin."/".$fich;
echo " <a href=\"javascript: OuvrirFenetre('$url');\">
<img src='../images/style_file.jpg' width=20 height=20 border=0>$fich</a><br>";
}
}
}
}
?>
[/php]
Par contre, comment pour chaque répertoire appliquer le code ci-dessous lorsque l'utilisateur clique sur un lien, "gérer ce répertoire"
[php]<?php
//initialisation de la session
session_start(session_name('administration'));
//fichier qui permet la connexion au serveur et l'accès aux fonctions
include('../includes/config.php');
//fichier de langue
require ('../includes/language/french/directory.php');
//début langage html
include ('../includes/header.php');
//on vérifie que l'utilisateur s'est bien identifié
//s'il s'agit d'un administrateur admin ou sadmin
if ((isset($_SESSION['admin'])) or (isset($_SESSION['sadmin'])))
{
//on récupère tous les fichiers, qui sont dans le répertoire directory,
//on les stocke dans un tableau et on les affiche à l'écran
if( (!isset($_POST['dirname_add'])) && (!isset($_POST['dirname_delete'])) )
{
//on définit la variable path
$path = getcwd();
//on appelle la fonction
//list_dir($path);
}
//création d'un répertoire
if(isset($_POST['dirname_add']))
{
$path = getcwd();
$dirname = $_POST['dirname_add'];
//on supprime les accents
$dirname = strtr($dirname, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");
mkdir_recursive($path.'/'.$dirname);
//list_dir($path);
}
//suppression d'un répertoire
elseif(isset($_POST['dirname_delete']))
{
$path = getcwd();
$dirname = $_POST['dirname_delete'];
//on supprime les accents
$dirname = strtr($dirname, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");
full_rmdir($path.'/'.$dirname);
//list_dir($path);
}
?>
<!-- formulaire de création d'un répertoire-->
<form method="post" action="directory.php">
<fieldset>
<legend><? echo DIRECTORY_FORM_CREATE; ?></legend>
<p><label for="dirname_add"><? echo DIRECTORY_NAME_CREATE; ?></label><input type="text" name="dirname_add" /></p>
<p><input type="submit" name="valider" value="Créer le répertoire" /></p>
</fieldset>
</form>
<!-- fin de formulaire de création de répertoire-->
<br />
<!-- formulaire de suppression d'un répertoire-->
<form name="suppr" method="post" action="directory.php" onSubmit="return confirmation();">
<fieldset>
<legend><? echo DIRECTORY_FORM_DELETE ?></legend>
<p><label for="dirname_delete"><? echo DIRECTORY_NAME_DELETE; ?></label><input type="text" name="dirname_delete" /></p>
<p><input type="submit" name="valider" value="Supprimer le répertoire" /></p>
</fieldset>
</form>
<!-- fin de formulaire de suppression de répertoire-->
<br /><br />
<!-- formulaire pour retourner à l'accueil de l'admin-->
<form method="post" action="../home.php">
<fieldset>
<legend><? echo DIRECTORY_RETURN_FORM; ?></legend>
<p><input type="submit" name="retour" value="Retourner au menu d'administration" /></p>
</fieldset>
</form>
<!-- fin du formulaire de retour-->
<?
}
//si la personne n'a pas le droit d'accéder à cette page
/*}
else
{
header("Location: ../index.php"); //on l'a renvoi sur la page d'accueil
exit();
}*/
//footer
include ("../includes/footer.php");
?>
[/php]