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

jjDai Messages postés 291 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 13 mars 2015 - 9 août 2009 à 11:20
lebiopsy Messages postés 2 Date d'inscription vendredi 5 mars 2010 Statut Membre Dernière intervention 1 avril 2010 - 16 juin 2010 à 04:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50423-gestionnaire-de-fichiers-mysql-php-5-x-nementon-php-manager-v0-5

lebiopsy Messages postés 2 Date d'inscription vendredi 5 mars 2010 Statut Membre Dernière intervention 1 avril 2010
16 juin 2010 à 04:06
...
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.
cs_Nementon Messages postés 21 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 25 mai 2010
27 oct. 2009 à 19:02
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
cs_Nementon Messages postés 21 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 25 mai 2010
27 oct. 2009 à 18:59
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">

<?php echo $repCourant; ?>,
<?php echo round(disk_total_space("./")/pow(2,20), 1) . " / ". round(disk_free_space("./")/pow(2,20), 1). " Mo"; ?>,

Action |
Nom du fichier |
Taille |
Permissions |

<?php
for ($i =0; $i<count($fichiers); $i++)
{
?>
----

<?php
/* Le fichier est-il un répertoire ? */
if (is_image($fichiers[$i]))
{
?>
" /> [x]
" />[ Modifier ]
" />[ Télécharger ] ,
">
" alt="60" width="60" />
,
[Image],

<?php
}
else if (is_dir($fichiers[$i]))
{

?> \" /> [x]
\" />[ Modifier ]
\" />[ Télécharger ]
</td>
">
<?php echo "[ " .basename($fichiers[$i])." ]";?>
,
[Dossier],

<?php
}else{

?>
\" /> [x]
\" />[ Modifier ]
\" />[ Télécharger ]
</td>
<?php

echo ''.basename($fichiers[$i]).'';

?>,
<?php echo tailleFichier($fichiers[$i]); ?>,
<?php
}
?>
<?php echo afficherPerm($fichiers[$i]); /*pour plus tard */?>,

<?php
}
?>

<?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)
cs_Nementon Messages postés 21 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 25 mai 2010
27 oct. 2009 à 18:31
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> Modification d'un fichier </legend>
<form method ="post" action="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; ?>">
" name="repertoire" />

" name="nom" />
<?php if (is_image($fichier)) { // Si le fichier est une image, on l'affiche
echo '<center></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 }
?>

</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)
flyfly0908 Messages postés 1 Date d'inscription lundi 6 juillet 2009 Statut Membre Dernière intervention 21 octobre 2009
21 oct. 2009 à 21:28
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
"
Image,
Nom de l'image,

\";

//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 = '';

// affichage bas du tableau
echo
'
----

'.$image.',
'.$tab_image[$j].',

';
}
echo '
';

?>

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 ?
Eveas Messages postés 1 Date d'inscription dimanche 30 août 2009 Statut Membre Dernière intervention 30 août 2009
30 août 2009 à 20:48
Jolie, 8 car la POO se fait désirée selon moi
cs_Nementon Messages postés 21 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 25 mai 2010
28 août 2009 à 20:03
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
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 août 2009 à 23:30
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 !
cs_aKheNathOn Messages postés 575 Date d'inscription dimanche 23 décembre 2001 Statut Membre Dernière intervention 23 octobre 2012
11 août 2009 à 10:50
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.
cs_Nementon Messages postés 21 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 25 mai 2010
9 août 2009 à 15:50
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
astro53 Messages postés 48 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 5 août 2009
9 août 2009 à 13:45
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
jjDai Messages postés 291 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 13 mars 2015
9 août 2009 à 11:20
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
Rejoignez-nous