PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 05-07-2009 09:51:31

umo
Membre
Inscription : 23-06-2009
Messages : 3

Script d'upload de photo: modif

Bonjour,

Je suis occupé de modificier un petit script, celui-ci contient un code php pour uploader des photos JPG, PNG, GIF, j'aurai voulu modifier ce script légèrement pour pouvoir uploader aussi des fichiers. rar, le problème c'est que je comprend pas certaines choses, merci de m'aider! J'ai déjà regarder certains tutoriaux pour l'upload bien entendu, mais c'est ce code que j'aimerai adapter pour avoir un code identique dans tout le site web, merci ...

Cette fonction est faite pour l'envoi d'image et très sécurisée graçe à la fonction getimagesize car c'est uniquement des images qui peuvent être uploadées, mais si je voudrai mettre des fichiers .rar comment pourrais je faire?

J'ai lu ce tutorial très intéressant aussi: http://www.vulgarisation-informatique.c … ad-php.php

Formulaire pour ajouter un fichier photo
[c]<tr>
                                <td nowrap="nowrap" bgcolor="#dadada">Photo  1 :</td>
                                <td bgcolor="#e9e9e9"><input name="photo1" type="text" id="photo1" size="30" value="<?php echo $data_annonce['photo']; ?>" />
                                  <a href="#null" onclick="OpenCenterPopUp('upload.php?champ=photo1')"><img src="images/disque-dur.jpg" alt="upload" width="21" height="21" border="0" align="middle" style="vertical-align:middle" /></a> <?php echo $language['info_add_photo']; ?></td>
                              </tr>[/c]


Source de upload.php

[c]if(isset($_POST['upload_photo']))
    {
       
    //-- On lance l'upload de la photo
   
    $resultat = $petite_annonces -> upload_photo($_FILES['fichier']['name'],$_FILES['fichier']['size'],$_FILES['fichier']['tmp_name'],"../");
       
    //-- Preparation des variables
   
    $nom_fichier     = $resultat['image_reel'];
    $url_reel         = $resultat['image_reel'];
    $poids             = $resultat['poids'];
    $resolution        = $resultat['resolution'];
    $resultat        = $resultat['resultat'];
   
    //-- Traitement du résultat
   
    if($resultat=="succes")
        {
        header("location:upload.php?fichier=".urlencode($url_reel)."&champ=".$_POST['champ']."&MoveUrlFile=1&msg=1");
        }
    else
        {
        header("location:upload.php?error=1&champ=".$_POST['champ']."");
        }
   
    }

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Uploader une photo</title>
<script>
<?php if(isset($_GET['MoveUrlFile'])) { ?>

function MoveUrlFile()
    {
   
    window.opener.document.getElementById('<?php echo $_GET['champ']; ?>').value='<?php echo urldecode($_GET['fichier']); ?>';
   
    //window.close();

    }
   
<?php } ?>

//--

function GoUpload()
    {
    document.getElementById('load').style.display='block';
    }

</script>
<style>
body {
    font-family:Arial, Helvetica, sans-serif;
    font-size:12px;
    color:#000;
    margin:0px;
    padding:0px
}
h1 {
    font-size:16px;
    font-weight:bold
}
a {
    color:#F60;
    text-decoration:none
}
</style>
</head>
<?php if(isset($_GET['MoveUrlFile'])) echo '<body onload="MoveUrlFile()">'; else echo '<body>'; ?>

<div id="load" style="height:344px; background-color:#FFF; display:none; position:absolute; width:396px; text-align:center">
  <p><strong>Veuillez patienter, chargement en cours.</strong></p>
  <p><img src="images/progressbar10.gif" width="200" height="10" /></p>
  <p>Cela peut prendre plusieurs minutes</p>
  <p><img src="images/floppy_disk_48.png" width="48" height="48" /></p>
</div>
<div style="background-image:url(images/fenetre-upload-script-petite-annonces_03.jpg); width:396px; height:344px; top:0px">
  <div style="padding-left:20px; padding-top:50px; padding-right:10px;">
    <?php

if(isset($_GET['msg']))
{
echo '<p align="center"><img src="images/accepted_48.png" width="48" height="48" alt="ok" /></p>
<p align="center">La photo a bien été ajoutée</p>
<p align="center">[ <a href="javascript:window.close();">Fermer la page</a> ]';
}
else if(isset($_GET['error']))
{
echo '<p align="center"><img src="images/cancel_48.png" width="48" height="48" alt="ok" /></p>
<p align="center">Erreur lors de l\'enregistrement de la photo</p>
<p align="center">[ <a href="javascript:window.close();">Fermer la page</a> ]';
}
else
{

?>
    <p>Format de photo acceptés : JPG, PNG, GIF (MAX 2Mo)</p>
    <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
      <input type="hidden" name="upload_photo" value="1" />
      <input type="hidden" name="champ" value="<?php echo $_GET['champ']; ?>" />
      <table border="0" cellspacing="0" cellpadding="3">
        <tr>
          <td><input name="fichier" type="file" id="fichier" size="25" /></td>
          <td><input type="submit" name="button" id="button" value="Envoyer" onclick="GoUpload()" /></td>
        </tr>
      </table>
    </form>
    <p>Sélectionnez le fichier sur votre ordinateur, l'envoi peut prendre plusieurs minutes.</p>
    <?php } ?>
  </div>
</div>
</body>
</html>[/c]



Fonction upload

[c]function upload_photo($fichier_name,$fichier_size,$fichier_tmp_name,$destination)
    {
   
    //-- Generation du de l'avatar
       
    $nom_fichier = time();
   
    //-- Definition des variables
   
    $target             = $destination.'upload/';  // Repertoire cible
    $nom_file              = strtolower($fichier_name);
    $taille             = $fichier_size;
    $tmp                = $fichier_tmp_name;
    $max_size            = 5000;
    $width_max            = 100;
    $height_max            = 100;
   
    //-- Verification du poids de l'image
   
    if($taille>=2097100)
        {
       
        //-- On retourn les parametres
       
        return array(
                    "resultat"             => "false",
                    "message"             => "La photos est trop lourde",
                    );
                   
        }
   
    //-- Preparation des variables

    $nom_du_fichier      = $nom_fichier.".".strtolower(substr($nom_file, -3));
    $image_reel          = "photo-".$nom_fichier.".".strtolower(substr($nom_file, -3));

    //-- Upload de l'image
   
    if(move_uploaded_file($tmp,$target.$nom_file))
        {
        $this->miniature($target.$nom_file,800,600,$target.$image_reel,75);
        }
    else
        {
       
        //-- On retourn les parametres
        
        return array(
                    "resultat"             => "false",
                    );
                   
        }
   
    // On récupère les dimensions du fichier
   
    list($width_orig, $height_orig, $type) = getimagesize($target.$image_reel);

    //-- Calcule du poids du fichier

    $poids_photo = filesize($target.$image_reel);

    //-- Suppression de l'image temporaire
   
    unlink($target.$nom_file);
   
    //-- On retourn les parametres
   
    return array(
                "message"             => "La photo a bien été enregistrée",
                "fichier"             => $image_reel,
                "image_reel"         => $image_reel,
                "poids"             => $poids_photo,
                "resolution"         => $width_orig."x".$height_orig,
                "resultat"             => "succes",
                );
    }

//-- Fonction : Deconnexion d'une annonce[/c]


Fonction miniature, plus utile ici dans mon cas:

[c]function miniature($image,$width,$height,$rep,$qualite)
    {
   
    //-- On augmente la memoire de php
   
    ini_set("memory_limit","50M");
   
    // Cacul des nouvelles dimensions
   
    list($width_orig, $height_orig, $type) = getimagesize($image);
   
    //-- On calcule les proportio,
   
    if($width_orig > $width or  $height_orig > $height)
        {
       
        $ratio_orig = $width_orig/$height_orig;
       
        if ($width/$height > $ratio_orig)
            {
            $width = $height*$ratio_orig;
            $lance_resize = 1;
            }
        else
            {
            $height = $width/$ratio_orig;
            $lance_resize = 1;
            }
       
        }
    else
        {
        $lance_resize = 0;
        $width  = $width_orig;
        $height = $height_orig;
        }
   
    // Redimensionnement
   
    $image_p = imagecreatetruecolor($width, $height);
   
    //-- Type 1 : GIF
   
    if($type == "1")
        {

        copy($image,$rep);
       
        }
   
    //-- Type 2 : JPG
   
    if($type == "2")
        {
       
        //-- Creation d'une image jpeg
       
        $image  = imagecreatefromjpeg($image);
   
        //-- On copy la nouvelle image
       
        imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
   
        //-- Enregistrement de la miniature
       
        imagejpeg($image_p, $rep, $qualite);
        }
   
    //-- Type 3 : PNG
   
    if($type == "3")
        {
       
        if($lance_resize==1)
            {
            $image = imagecreatefrompng($image);
   
            $transparent = imageColorAllocate($image_p, 0, 0, 0);
            $red = imageColorAllocate($image_p, 255, 50, 50);
            imageColorTransparent($image_p, $transparent);
            imageFilledRectangle($image_p, 0, 0, 640-1, 100-1, $transparent);
       
            imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
            }
       
        //--
       
        if($lance_resize==1)
            {
            imagepng($image_p, $rep,0);
            }
        else
            {
            copy($image,$rep);
            }
           
        }

    //--
   
    return true;
    }


//-- Enregistrement de la photo sur le serveur[/c]

Dernière modification par umo (05-07-2009 10:04:35)

Hors ligne

#2 05-07-2009 11:05:51

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Script d'upload de photo: modif

Je ne me suis pas amusé à lire ta flopée de code mais en gros tu cherches à vérifier la taille non ?
En PHP après l'upload (donc quand le fichier se trouve encore en dossier temporaire) tu as la variable $_FILES['fichier_source']['size'] qui te permet de récupérer la taille du fichier.
Sinon lors de l'upload tu as la possibilité de fixer la taille maximum acceptée par le forumulaire :
<input type="hidden" name="MAX_FILE_SIZE" value="ta taille maxi en octets" />

Hors ligne

Pied de page des forums