upload de fichier image

Eléphant du PHP | 76 Messages

17 janv. 2007, 16:49

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>
Modifié en dernier par cemice le 17 janv. 2007, 18:08, modifié 1 fois.

jeremy amiot
Invité n'ayant pas de compte PHPfrance

17 janv. 2007, 17:01

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*().

Eléphant du PHP | 76 Messages

17 janv. 2007, 17:11

oui mais comment faire a moins que mon code est des erreurs mais je ne les voit pas merci de ton aide en attendant

Eléphant du PHP | 445 Messages

17 janv. 2007, 17:16

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 ;)
LLDC
Ulti

ViPHP
AB
ViPHP | 5818 Messages

17 janv. 2007, 17:45

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.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

17 janv. 2007, 18:00

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.

Eléphant du PHP | 76 Messages

17 janv. 2007, 18:09

oups desolez s'ayait je vient de regler probleme desolez