begin process at 2012 05 27 20:45:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > UPLOAD + AFFICHAGE ET SUPPRESSION DU CONTENU D'UN DOSSIER (IMAGES)

UPLOAD + AFFICHAGE ET SUPPRESSION DU CONTENU D'UN DOSSIER (IMAGES)


 Information sur la source

Note :
Aucune note
Catégorie :Fichier / Disque Classé sous :upload, contenu dossier, suppression affichage, images, PHP Niveau :Débutant Date de création :21/03/2009 Date de mise à jour :06/04/2009 14:17:31 Vu :4 716

Auteur : mondherclubiste

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

 Description

Salut à tous,
Voici un script très simple qui sert à uploader une image et d'afficher le contenu d'un dossier (selon la date du modification ) et la possibilité de supprimer les images.
C'est mon premier script , alors si vous avez des remarques n'hésitez pas à les poster

Source

  • <?php
  • //parametres
  • $dir="images";//le repertoire
  • $exten=array("jpg","png","gif","bmp","jpeg");//les extensien autorisés
  • $wid="70";//le width du miniature
  • $hei="70";//le height du miniature
  • $nbr_ligne=5;//nombre des miniatures par ligne
  • $l_supp="http://editions.philihp.net/edit/images/supprimer.png";//lien de l'images de suppression
  • $couleur="black";//couleur du bordure
  • if(isset($_GET['delete']))
  • if(strpos($_GET['delete'],'/')===false)
  • if(file_exists($dir.'/'.$_GET['delete']))
  • unlink($dir.'/'.$_GET['delete']);
  • //affichage du contenu du dossier
  • if(isset($_GET['aff']))
  • {
  • echo '<center><a href="parcourir.php">Uploader une image</a></center><br>';
  • $dossier=opendir($dir);
  • $dd=array();
  • $i=0;
  • while (false !== ($file = readdir($dossier)))
  • {
  • $ff=explode(".",$file);
  • $ff=$ff[sizeof($ff)-1];
  • if(in_array($ff,$exten))
  • {
  • $dd[$i]= date ("d F Y H:i:s.",filectime($dir."/".$file))."/%/".$file;
  • $i++;
  • }
  • }
  • rsort($dd);
  • echo '<table width="90%" align="center">';
  • for($j=0;$j<sizeof($dd);$j++)
  • {
  • if($j==0)
  • echo'<tr align="center">';
  • if($j!=0&&$j%$nbr_ligne==0)
  • echo'</tr><tr align="center">';
  • $lien=explode("/%/",$dd[$j]);
  • echo'<td style="border:solid thin '.$couleur.'" align="center"><a href="'.$dir."/".$lien[1].'"><img src="'.$dir."/".$lien[1].'" width="'.$wid.'" height="'.$hei.'" border="0"><br><br><a href="#" onclick="supp_im(\''.$lien[1].'\')"><img src="'.$l_supp.'" border="0"></td>';
  • }
  • echo '</tr></table>';
  • }
  • else
  • {
  • //uploader une image
  • echo '<center><a href="parcourir.php?aff">Afficher les images</a></center><br>';
  • ?>
  • <form name="uplo" action="parcourir.php" method="post" enctype="multipart/form-data">
  • <table width="60%" align="center"><tr align="center"><td width="10%">File:</td><td width="70%"><input type="file" name="fichier"/></td><td width="20%"><input type="submit" value="Envoyer" name="upload"/></td></table>
  • </form>
  • <?php
  • if( isset($_POST['upload']))
  • {
  • $type_file = $_FILES['fichier']['type'];
  • if( !strstr($type_file, $exten[0]) && !strstr($type_file, $exten[1]) && !strstr($type_file, $exten[2]) && !strstr($type_file, $exten[3]) && !strstr($type_file, $exten[4]) )
  • {
  • exit("le type du fichier n 'est pas valide");
  • }
  • $tmp_file = $_FILES['fichier']['tmp_name'];
  • if( !is_uploaded_file($tmp_file) )
  • {
  • exit("Le fichier est introuvable");
  • }
  • $name_file = $_FILES['fichier']['name'];
  • if( !move_uploaded_file($tmp_file, $dir ."/". $name_file) )
  • {
  • exit("Impossible de copier le fichier dans $dir");
  • }
  • echo '<center><img src='.$dir ."/". $name_file.'><br><br><input type="text" value="http://'.getenv("HTTP_HOST").'/'.$dir ."/". $name_file.'" style="width:400"></center>';
  • }
  • }
  • ?>
  • <script language="javascript">
  • function supp_im(a)
  • {
  • if(confirm("Etes vous sur de supprimer cette image")==true)
  • top.document.location="parcourir.php?aff&delete="+a;
  • }
  • </script>
<?php
 //parametres
 $dir="images";//le repertoire

 $exten=array("jpg","png","gif","bmp","jpeg");//les extensien autorisés
 $wid="70";//le width du miniature
 $hei="70";//le height du miniature
 $nbr_ligne=5;//nombre des miniatures par ligne
 $l_supp="http://editions.philihp.net/edit/images/supprimer.png";//lien de l'images de suppression
 $couleur="black";//couleur du bordure

 if(isset($_GET['delete']))
 	if(strpos($_GET['delete'],'/')===false)
 		if(file_exists($dir.'/'.$_GET['delete']))
 			unlink($dir.'/'.$_GET['delete']);

 //affichage du contenu du dossier
 if(isset($_GET['aff']))
 {
	 echo '<center><a href="parcourir.php">Uploader une image</a></center><br>';
	 $dossier=opendir($dir);
	 $dd=array();
	 $i=0;
	 while (false !== ($file = readdir($dossier)))
	 {
		 $ff=explode(".",$file);
		 $ff=$ff[sizeof($ff)-1];
		 if(in_array($ff,$exten))
		 {
		 	$dd[$i]= date ("d F Y H:i:s.",filectime($dir."/".$file))."/%/".$file;
			 $i++;
		 }
	
	 }
	 rsort($dd);
	 echo '<table width="90%" align="center">';
	 for($j=0;$j<sizeof($dd);$j++)
	 {
	 	if($j==0)
	 	echo'<tr align="center">';
	 	if($j!=0&&$j%$nbr_ligne==0)
	 		echo'</tr><tr align="center">';
	 	$lien=explode("/%/",$dd[$j]);
	 	echo'<td style="border:solid thin '.$couleur.'" align="center"><a href="'.$dir."/".$lien[1].'"><img src="'.$dir."/".$lien[1].'" width="'.$wid.'" height="'.$hei.'" border="0"><br><br><a href="#" onclick="supp_im(\''.$lien[1].'\')"><img src="'.$l_supp.'" border="0"></td>';
	 }
	 echo '</tr></table>';
	 }

 else
 {
 //uploader une image

 	echo '<center><a href="parcourir.php?aff">Afficher les images</a></center><br>';
 ?>

 <form name="uplo" action="parcourir.php" method="post" enctype="multipart/form-data">
 <table width="60%" align="center"><tr align="center"><td width="10%">File:</td><td width="70%"><input type="file" name="fichier"/></td><td width="20%"><input type="submit" value="Envoyer" name="upload"/></td></table>
 </form>


 <?php
 if( isset($_POST['upload']))
 {
	 $type_file = $_FILES['fichier']['type'];
	
	
	 if( !strstr($type_file, $exten[0]) && !strstr($type_file, $exten[1]) && !strstr($type_file, $exten[2]) && !strstr($type_file, $exten[3]) && !strstr($type_file, $exten[4]) )
	 {
		 exit("le type du fichier n 'est pas valide");
	 }
	
	 $tmp_file = $_FILES['fichier']['tmp_name'];
	
	 if( !is_uploaded_file($tmp_file) )
	 {
	 	exit("Le fichier est introuvable");
	 }
	 $name_file = $_FILES['fichier']['name'];
	
	 if( !move_uploaded_file($tmp_file, $dir ."/". $name_file) )
	 {
	 	exit("Impossible de copier le fichier dans $dir");
	 }
	 echo '<center><img src='.$dir ."/". $name_file.'><br><br><input type="text" value="http://'.getenv("HTTP_HOST").'/'.$dir ."/". $name_file.'" style="width:400"></center>';
	
	
	
	 }
}
?>
<script language="javascript">
function supp_im(a)
{
	if(confirm("Etes vous sur de supprimer cette image")==true)
	top.document.location="parcourir.php?aff&delete="+a;
}
</script> 

 Conclusion

j'espère que ce bout de code va être utile pour certains de vous


 Historique

22 mars 2009 13:39:03 :
MAJ des mots clés
22 mars 2009 23:26:32 :
Assurer la suppression
22 mars 2009 23:33:43 :
MAJ du code
22 mars 2009 23:43:14 :
MAJ du code
06 avril 2009 14:17:32 :
correction de l'erreur

 Sources du même auteur

Source avec Zip Source avec une capture CALENDRIER + AGENDA TRÈS SIMPLE (GERER LES JOURS FÉRIÉS ET L...

 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

SYSTÈME DE PAGINATION AVEC BDD ET IMAGES (FICHIERS) par begueradj
UPLOAD IMAGE AVEC MINIATURE par dilar
Source avec Zip Source avec une capture UPLOADER DE FICHIER PHP - AVEC GESTION DES FICHIERS par DiabloBros
Source avec Zip Source avec une capture DOWN UP SCRIPT par spacedelta
Source avec Zip UPLOAD IMAGES POUR FORUMS ET SITES MUTUALISÉS (AJAX + PHP + ... par hartley

Commentaires et avis

Commentaire de masternico le 22/03/2009 14:39:19

Salut,
en soit, le script est correct. L'indentation est propre. Il n'y a pas de commentaires, mais le code est suffisemment simple pour ne pas avoir à le faire.

Par contre, il y a deux points sur lesquels je serais assez vache:
1) Dans la ligne suivante:
          42. echo'<td style="border:solid thin '.$couleur.'" align="center"><a href="'.$dir."/".$lien[1].'"><img src="'.$dir."/".$lien[1].'" width="'.$wid.'" height="'.$hei.'" border="0"><br><br><a href="#" onclick="supp_im('."'".$lien[1]."'".')"><img src="'.$l_supp.'" border="0"></td>';
Tu mélanges alégrement les apostrophes et guillemets... Fait un choix. Soit tout en guillemet, soit tout en apostrophe car la relecture est difficile.

2)A ton avis, que se passe t-il si je mets dans la barre d'adresse ceci? :

http://www.tonsite.fr/parcourir.php?aff&delete=supprimer.png ou bien pire encore : http://www.tonsite.fr/parcourir.php?aff&delete=../index.php

Je te laisse imaginer ce que je pourrais faire comme dégats sur ton site juste en faissant de simples requettes HTML.

Il te faut sécuriser tes inputs car contrairement à ce que l'on dit, internet n'a rien du 'tout le monde il est beau tout le monde il est gentil'.
C'est un monde sans pitié où nombre de loups attendent dans l'ombre qu'une brebis égarée baisse sa garde. Et là, il lui saute à la gorge.

Cette petite image pour dire que si tu sorts un script avec aussi peut de controle, j'ai peur pour ce qui est du reste de ton site.
Si un loup te tombe dessus, tu n'aura plus que tes yeux pour pleurer car ce qui les interesse, c'est pas le contenu de ton site mais plutôt d'utiliser les ressources de ton sites à d'autres fins (spam, hacking, brute force attack...)

Je ne note pas car ce script ne fait pas avancer le smilblick

Commentaire de mondherclubiste le 22/03/2009 23:42:14

Salut,
D'abord merci masternico pour vos conseils et vos remarques.
Pour la 1 remarque j'ai modifié la ligne afin d'être plus lisible .
Pour la 2 remarque, certes ce script possède quelques lacunes de sécurité, mais il faut pas oublié qu'un tel script est destiné au administrateurs des sites, donc il ne va être exécuté qu'après des vérifications des paramétrés de connexion (ex:les sessions,...), mais quand même, j'ai suivi ton conseil et j'ai ajouté ce test : if(strpos($_GET['delete'],'/')===false)
  

Commentaire de masternico le 23/03/2009 00:57:51

C'est mieux oui.
Par contre, je pense que puisque c'est ton script qui créer le lien d'appel, on peut considérer que le lien DOIT être correcte sinon, ça signifie que qqu'un s'ammuse avec les paramètres.
Donc j'irais plus loin dans la parano et je ferais en sorte de logger l'erreur ainsi que la variable $_SERVER dans un fichier et/ou BDD de manière à pouvoir repérer si qqu'un a essayé de jouer manuellement avec les paramètres.
C'est un bon moyen de detecter les attaques et les contrer.

Commentaire de masternico le 23/03/2009 09:24:57

Au fait,
Il y a un truc aussi à la ligne 43:
<img src="'.$dir."/".$lien[1].'"

Il faut entourer le lien avec rawurlencode pour assainir les noms avec certains caractères spéciaux (accents et autres)
<img src="'.$dir."/".rawurlencode($lien[1]).'"

Commentaire de hajbioblio le 23/03/2009 10:36:34

1- Erreur à la lign 41 : onclick="supp_im(\''.$lien[1].'\'')
-> correction : onclick="supp_im(\''.$lien[1].'\')

2- il faut préciser que le fichier dans lequel on doit coller le code doit être nommé "parcourir.php"

3- pour que le script marche, il faut créer un dossier nommé "images" à côté du fichier "parcourir.php"

Commentaire de candyraton le 05/04/2009 20:03:45

Bonjour,
ton script à attirer mon attention car j'ai fait pareille pour une galerie;(j'ai finalement du gerer des erreurs de tailles (car je crée des miniatures deriere(2048px maxi)aprés telechargement et le poids (500ko chez free) (sources dispos si ça vous interesse)).
(perso j'ai choisi de m'envoyer un mail à chq erreures)

j'aurais 2 questions (ainsi qu'à masternico):
-Comment peuvent-ils franchir le filtre des extensions pour hacker?
-Quels sont les failles de sécurité de ce code?

Merci pour votre contribution

Commentaire de masternico le 06/04/2009 09:22:25

Salut candyranton
(marrant ton pseudo, outre le jeu de mot, cela fait aussi un mélange spanglish dont la traduction est 'le rat sucré' ;)

Le filtre des extensions est faillible car le champs 'type' de la variable FILES est renseigné par le navigateur. Il n'est en rien vérifié par PHP quand le fichier arrive sur le serveur. Ce qui fait qu'avec un peut de connaissance, il facile de faire croire au script que nous lui envoyons un simple fichier jpeg alors que c'est un script PHP ou du javascript. Une fois le fichier sur le serveur, on peut y faire appels depuis l'extérieur et ainsi exécuter des commandes (afficher le contenu de certains fichiers PHP par exemple, pour y trouver les mots de passe de connexion MySQL) avec la limitation que le script n'a pas les droit root, donc ce n'est pas tout à fait un rootkit. J'appellerais ça plutôt un 'userkit'.

Il faut utiliser les fonctions 'mimes' de PHP pour détecter quel est le vrais type mimes du fichier. Le problème, c'est que cette extention n'est pas toujours disponible.
Voici un petit exemple (récupéré sur un site en recherchant avec google):
$mtype = '';

  // magic_mime module installed?
  if (function_exists('mime_content_type')) {
    $mtype = mime_content_type($file_path);
  }
  // fileinfo module installed?
  else if (function_exists('finfo_file')) {
    $finfo = finfo_open(FILEINFO_MIME); // return mime type
    $mtype = finfo_file($finfo, $file_path);
    finfo_close($finfo);  
  }


Ensuite, on compare le mimes donné par le navigateur avec celui retrouvé manuellement. Si il n'y a pas de correspondance: c'est une tentative d'attaque.

            ===================//=====================

L'auteur a argumenté que ce script fait partie d'une console réservé à l'administrateur et que donc dans sa version finale il comporte tout un lot de contrôles d'accès.

De ce fait, dans l'état actuel, ce script n'est en rien sécurisé. Donc je ne peut pas dire ce qu'il en est des failles de sécurités d'un script qui ne protège rien...

par contre, dans le petit bout de code servant à déterminer si qqu'un essaye de jouer avec les paramètres, le script ne s'arrête pas pour autant en cas de tentative:
if(isset($_GET['delete']))
  if(strpos($_GET['delete'],'/')===false)   //  <== il faudrait sortir de script en cas de présence
    if(file_exists($dir.'/'.$_GET['delete']))
      unlink($dir.'/'.$_GET['delete']);

Commentaire de Fenri le 06/04/2009 13:14:15

Je commence à me decourager ! J'ai testé plein de codes et aucun ne marche ...
Je viens de tester celui là et il ne marche pas il me dis (Wampserveur) :"Parse error: parse error, expecting `','' or `';'' in C:\wamp\www\Exchange\parcourir.php on line 43". Quelqun pourrait peut etre le débuguer entieremnt ou me fournir un lien vers un autre code où il n'y a pas d'erreurs ! Merci d'avance.

Commentaire de masternico le 06/04/2009 13:41:52

lit le commentaire de hajbioblio (5ème post). L'erreur reportée n'a pas été corrigée. Le numéro de ligne a changé mais c'est toujours la même erreur.
Ce qui serait intéressant, c'est que ce soit l'auteur qui réponde aux questions...

Commentaire de mondherclubiste le 06/04/2009 14:24:04

Salut tout le monde,
Désolé pour le retard , j'ai corrigé l'erreur.
Merci Masternico pour tes interventions et tes conseils sur ce post et bonne continuation  

Commentaire de candyraton le 06/04/2009 22:36:02

Merci masternico
rat sucré? j'ignorais! (c tjrs mieux que sel et rat!)
"qu'en dira t'on" c'est mon coté anticonformiste;(sinon c'est candy ou raton; 2 p- qui s'oposent);(mais c tjrs candy qui ecrit!)so bad...

En cherchant un peu (comment il pourrait executer un jpg par exemple) j'ai bien compris à quel point je suis loin du compte:
"agent de sécurité" est un metier à part entiére!
demonstration: http://www.developpez.net/forums/d198653-4/php/langage/contribuez/securite-failles-plus-courantes/
Merci encore pour ta réponse

Commentaire de houssam88 le 02/05/2009 12:24:32

salut a tous
je me permet de vous poser une petite question pas tré loin de votre sujet :
bon voila je rencontre un petit problème dans l'upload des images, pas tou a fait concernant l'upload (celui ci marche bien) mai j'aimerai bien pouvoir afficher l'image uploadé dans une zone reservé a celle ci juste apré que l'utilisateur selectionne son image chosi
j'esper que quelqu'un me comprend
Voici ma page php:
<?php
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
        if ($_FILES['monfichier']['size'] <= 1000000)
        {
                $infosfichier = pathinfo($_FILES['monfichier']['name']);
                $extension_upload = $infosfichier['extension'];
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                if (in_array($extension_upload, $extensions_autorisees))
                {
              move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/' . basename($_FILES['monfichier']['name']));
                    echo "L'envoi a bien été effectué !";
                }
        }
}
?>
<form method="post"  enctype="multipart/form-data" >
        <p align="left"><img src="" width="112" height="106" alt="" /></p>
        <p>Joindre votre photo :<br />
      
                <input type="file" name="monfichier"/>
        </p>
        <p><br />
          <input type="submit" value="Envoyer le fichier" />
        </p>
</form>


besoin de votre aide

Commentaire de DAM74 le 13/01/2010 15:32:50

Merci de mettre un fichier zip pour le code

Commentaire de masternico le 13/01/2010 15:45:50

Et pourquoi yveutunzip le coco?

Commentaire de DAM74 le 13/01/2010 16:18:37

pour test le script ceci est plus facile avec un fichier zip

Commentaire de masternico le 13/01/2010 20:29:04

Oui... oui... mais, ... Non...
pour tester, il suffit de faire un copier/coller du script dans une page php et de le transférer sur un serveur (ou en local si l'on a easyphp ou wamp ou autre)
Avec un script aussi court, je ne vois pas l'intérêt de se prendre la tête à faire un zip...

Commentaire de Renfield le 14/01/2010 10:13:50 administrateur CS

je ne te comprends pas, DAM74.
pourquoi demander ainsi des zips a tout va... ?

Commentaire de DAM74 le 15/01/2010 00:22:53

le fichier zip permet de mieux tester le scrip sans le copier coller de la source ..............

Commentaire de Renfield le 15/01/2010 09:40:47 administrateur CS

"mieux" ?

quelle flemme ^^

Commentaire de zstof84 le 20/02/2012 06:16:32

bonjour merci pour le scritp mais j'aurai aimé pouvoir afficher les miniatures sur plusieurs pages mais je ne sais vraiment pas comment faire si quelqu'un pourrait m'aider merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

upload images php 4 [ par mariuscesar ] salut , j'ai un pb svp. en fait mon hénergeur est passé à php 4.3.6 et je n'arrive pas à uploader les fichiers comme au paravent. ke faire ??? multiple upload a mysql avec php [ par Xavihb ] Salut,J'aurais besoin de savoir comment faire un multiple upload d'images &#224; une base de donn&#233;es mySQL &#224; l'aide de PHP. Les champs des i Upload d'images : prévisualisation avant upload avec php+ajax+javascript [ par amewole ] Bonjour à vous tous, Je suis à la recherche d'un script php+ajax+javascript permettant de faire un preview des images avant le upload c'est à dire qu upload d'images en php [ par azorkot ] salut je travail sur mon projet de fin d'année et là j'essaie d'uploader des images!! mais j'arrive pas à les stocker ou plutôt à les afficher dans le Site bilingue et img src [ par DsD7 ] Bonsoir, je débute en php et mon problème est le suivant. Il y a 2 paramètres sur mon projet de site. Le premier est la langue (géré par des constante Taille Maximum Upload Fichiers [ par Enaeria ] Bonjour, je suis sur un projet d'upload de fichiers via un formulaire en php mais je viens d'apprendre que les fichiers feront sans doute entre 50 et Fonction D'upload en PHP [ par olst59 ] Bonjour a tous, Je me permet de poster un message dans ce forum car je deviens fou... voici maintenant quelques jours que je cherche une explication comment afficher des images une popup php javascript [ par tupense ] Bonjour je me perd un peu dans les rubriques désolé j'ai fait un script en php pour lister des dossiers dans un dossier puis je l'ai ai mis sous forme Upload d'images par mail à la façon de facebook [ par zeus_neon59 ] Bonjour à tous, Vu que sur l'iphone l'upload "normal" n'est pas pris en charge, j'aurais aimé avoir de l'aide, des pistes ou de la documentation pour php images [ par raidersteam ] Bonjour est t'il possible de faire bouger du text que long fais apparaitre avec un du code php si oui comment Merci


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,530 sec (4)

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