Aller au contenu

Renommer une image uploadée


Sujets conseillés

Posté

Bonjour à tous,

J'aimerais rajouter la date à la fin du nom d'une image uploadée mais je ne sais pas comment faire.

Voilà ce que j'ai :

<form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
<input type="hidden" name="posted" value="1">
<input type="hidden" name="annonce" value="<?php echo $annonce;?>">
<input type="hidden" name="minute" value="<?php echo $date;?>">
<input name="fichier" type="file">
<input type="submit" value="Uploader">
</form>

<?php

//--------------------------------------
// DEFINITION DES VARIABLES
//--------------------------------------

$target = "files/"; // Repertoire cible
$max_size = 100000; // Taille max en octets du fichier
$width_max = 205; // Largeur max de l'image en pixels
$height_max = 155; // Hauteur max de l'image en pixels


$extensions_ok = array("jpg","gif","png","jpeg");

//------------------------------------------------------------
// DEFINITION DES VARIABLES LIEES AU FICHIER
//------------------------------------------------------------

$nom_file = $_FILES['fichier']['name'];
$taille = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];
$chemin = $target.$_FILES['fichier']['name'];

$extension = substr($nom_file,-3); // Récupération de l'extension

//---------------------------
// SCRIPT D'UPLOAD
//---------------------------

if($_POST['posted'])
{

// On vérifie si le champ est rempli

if($_FILES['fichier']['name'])
{
// On vérifie l'extension du fichier

if(in_array(strtolower($extension),$extensions_ok))
{
// On récupère les dimensions du fichier

$infos_img = getimagesize($_FILES['fichier']['tmp_name']);

// On vérifie les dimensions et taille de l'image

if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($taille <= $max_size))
{
// Si c'est OK, on teste l'upload

if(move_uploaded_file($tmp,$chemin))
{

// Si upload OK alors on affiche le message de réussite
echo '<p>Image uploadée avec succès !</p>';
echo '<ul><li>Fichier : '.$_FILES['fichier']['name'].'</li>';
echo '<li>Taille : '.$_FILES['fichier']['size'].' Octets</li>';
echo '<li>Largeur : '.$infos_img[0].' px</li>';
echo '<li>Hauteur : '.$infos_img[1].' px</li></ul>';

la variable date est défini plus haut. Je ne sais pas comment l'insérer dans le nom du fichier.

Merci d'avance pour votre précieuse aide.

Posté (modifié)

Le champs date, même en hidden, c'est pas vraiment une bonne idée, surtout s'il intervient sur ton nom de fichier.

(c'est pas parce que ton formulaire est en POST qu'il est plus sécurisé qu'en GET)

fais un truc du genre :

if(is_uploaded_file($tmp))
{
//ici quelques vérifications de sécurité

rename($tmp,$target.strftime("%Y-%m-%d").$_FILES['fichier']['name']);
}

strftime("%Y-%m-%d") pour insérer une date de type YYYY-MM-DD

Si tu souhaites mettre une date, met la plutôt au début du nom de fichier, et de cette forme, tes fichiers seront ainsi facilement "triables" et identifiables par un être humain dans un dossier. (Après c'est toi qui voit :) )

Stéphane

Modifié par SStephane
Posté (modifié)

Salut,

(oups, le temps que je poste, Stéphane a donné une réponse... je suis d'accord avec sa méthode de mettre la date AVANT... pour ordonner plus facilement les fichiers et aussi pour le fait que la date doit être définie au vol par PHP et non via une donnée modifiable dans le formulaire d'envoi! )

-----

Voila ce que je ferais (toujours avec la date a la fin du fichier comme demandé plus haut):

1/modification de la détection de l'extension et la mettre en 1er dans la section variables.... car pour l'instant, elle ne prend que les 3 derniers caractères.... (il pourrait y en avoir 4), sans compter que cette méthode ne vérifie pas la présence du . dans le nom de fichier ... Quelqu'un pourrait uploader un fichier "nimportequoijpg"

donc au lieu de :

$extension = substr($nom_file,-3); // Récupération de l'extension

mettre cela :

$extA = explode('.',$nom_file);

$extension = $extA[count($extA)-1];

et dans ce cas, on ne prend que les X lettres après le dernier point, et c'est déjà plus une "extension"

2/Rajouter la date...

d'abord on prend que la 1ere partie du nom...

$nom_court = substr($_FILES['fichier']['name'],0,strlen($_FILES['fichier']['name'])-strlen($extension)-1);

ensuite on recontruit le nom du fichier en y incluant la date

$chemin = $target.$nom_court.'-'.date('ddmmYYYY').'.'.$extension;

donc en finale :

//------------------------------------------------------------
// DEFINITION DES VARIABLES LIEES AU FICHIER
//------------------------------------------------------------

// Récupération de l'extension en 1er, car on s'en servira plus tard
$extA = explode('.',$nom_file);
$extension = $extA[count($extA)-1];

$nom_file = $_FILES['fichier']['name'];
$taille = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];

//d'abord on prend que la 1ere partie du nom...
$nom_court = substr($_FILES['fichier']['name'],0,strlen($_FILES['fichier']['name'])-strlen($extension)-1);
//ensuite on recontruit le nom du fichier en y incluant la date
$chemin = $target.$nom_court.'-'.date('ddmmYYYY').'.'.$extension;

En espérant que ça marche ... (je n'ai pas testé mais théoriquement c'est ça!)

b0b0

Modifié par b0b0

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...