Page 1 sur 1

upload de fichier image

Posté : 17 janv. 2007, 16:49
par cemice
bonjour tout le monde
voila jai fait un fichier upload qui ne prend que les fichiers jpg sauf que quand je met un html ou autre il le charge qd meme je n'arrive pas a trouver l'erreur si qulqu'un a une idée merci davance voici le code :
<?
$titre="Uploader vos meilleurs photos";
?>
<style TYPE="text/css">
BODY {
scrollbar-3dlight-color: #FFFFFF;
scrollbar-arrow-color: #D3E6FF;
scrollbar-base-color: #3D58A5;
scrollbar-face-color: #395294;
scrollbar-highlight-color: #FFFFFF;
scrollbar-shadow-color: #FFFFFF;
}</style>

<center> <?
echo '<body bgcolor="black" link="#3f8ded" vlink="#ffffff" alink="#3f8ded" text="#ffffff"  background="../img/fond3.png" >'  ;
echo "<center><Font size='5'><u><b>",$titre,"</u></b></font><br><p>";
include('redim.php');

function verif_ext($chaine) {  // retourne l'extension d'un nom de fichier
  $exts=strtok($chaine,".");
  
  for ($i=0;$i<substr_count($chaine,".");$i++) $exts=strtok(".");
  return strtolower($exts);
}

if ($_POST['post']=="charger") {

  $nomtmp=$_FILES['ul_image']['tmp_name'];
  $taille=$_FILES['ul_image']['size'];
  $nom=$_FILES['ul_image']['name'];
  $erreur=$_FILES['ul_image']['error'];
  $ul_comment=$_POST['ul_comment'];
  $ul_auteur=$_POST['ul_auteur'];

  // nettoyage du nom
 $nom=str_replace("-", "", $nom);
 $nom=str_replace("(", "", $nom);
 $nom=str_replace(")", "", $nom);
  if (urlencode($nom) != $nom) $err="nom";

  if ($err=="nom")
 $alert='Erreur: supprimez les caractères spéciaux ou accentués du nom de fichier.<br />';

  if (!is_dir(".")) mkdir(".", 0755);

  if ($erreur!="") $err=1;

  $ext=verif_ext($nom);
  if ($ext!="jpg" ) {
        echo'Erreur: Type de fichier image non reconnu!<br />';
        $err=1;
  }
  $nom=urlencode($nom);
  if ($erreur==2) {
    echo'Erreur: Votre image est trop lourde, maximum accepté: '.$max_size_upload.'ko.<br />';
    $err=1;
  }
 $nom=str_replace("+", "", $nom);
      if (!@move_uploaded_file($nomtmp,$nom)) {
        if (is_dir("."))
          echo'Attention: Impossible de charger votre image. L\'accès au dossier upload est refusé par le serveur.<br />';
      } else {
        $fp=@fopen($nom.".txt", "w");
        @fputs($fp, htmlentities(stripslashes($ul_auteur))."\n".htmlentities(stripslashes($ul_comment)));
        @fclose($fp);
        @chmod("$nom", 0777);
        redimage("$nom","$nom",800,'600');


echo '<center>La photo ',$nom, ' à bien été ajouté avec succés !!!</center>';
 }     
  }


?>

<?php
// AJOUT D'IMAGES
echo'
<form method="post" action="upload.php" enctype="multipart/form-data" >

<input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
Vous pouvez envoyer vos photos jpg de vos meilleurs prises sur  notre site.<br /><br />
<input type="file" name="ul_image" /> <br /><br />
Auteur: <input type="text" name="ul_auteur" /><br />
Description:
<input type="text" name="ul_comment" size="40" />
<input type="submit" name="post" value="charger" /><br />
Ces informations seront affichées avec l\'image.

</form>

';
?></center>

Posté : 17 janv. 2007, 17:01
par jeremy amiot
Il ne faut PAS faire la vérification sur l'extension du fichier (facilement contournable) , mais sur le type mime du fichier, et encore mieux en vérifiant que c'est bien une image avec la fonction imagecreatefrom*().

Posté : 17 janv. 2007, 17:11
par cemice
oui mais comment faire a moins que mon code est des erreurs mais je ne les voit pas merci de ton aide en attendant

Posté : 17 janv. 2007, 17:16
par Ultim4T0m
Je regarderais plutôt du côté de getimagesize() ou de imagetypes()

Pour plus d'infos, cliques sur ces fonctions, tu arriveras directement à la doc ;)

Petite remarque, pour tes tests, pendant le développement, évite de masquer les erreurs ( @ )

Edit : La prochaine fois, trouve un titre plus explicite ;)

Posté : 17 janv. 2007, 17:45
par AB
Pour reprendre les conseils ci-dessus, je proposerais de faire deux types de vérif.

- une très rapide qui vérifie l'extension du fichier
$extension = strtolower(strrchr($fichier, '.'));
if($extension == '.png' || $extension == '.gif' || $extension == '.jpg' || $extension == '.jpeg') 
{traitement }
- la seconde dans {traitement} qui vérifie par un getimagesize() si le fichier est bien une image en cherchant par exemple les dimensions non nulles de l'image et éventuellement le type de l'image.

L'avantage est que la première vérif rapide évacue les erreurs normales et que la seconde, plus longue en traitement serveur, n'est déclenchée qu'en cas de succès pour éviter les tentatives de piratage.

Posté : 17 janv. 2007, 18:00
par albat
Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP", "Aidez-moi !" n'apportent rien à la compréhension de ton problème.
Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.

Tu peux corriger ton titre en éditant ton premier message.

Merci de prendre le temps de lire les règlements.

Posté : 17 janv. 2007, 18:09
par cemice
oups desolez s'ayait je vient de regler probleme desolez