php : interdire upload d'une image avec même nom
Dernière réponse : dans Programmation
bonjour à tous,
je tente désespérément d'empêcher un upload d'une image qui aurait le même nom qu'une autre déjà présente dans le dossier "photos" (du coup, logo.jpg est remplacé par une image qui a le même nom et que j'ai chargé ultérieurement).
ET je ne vois pas comment faire malgré les tuto !!!
Je me doute que c'est une condition mais laquelle et où ?
voici mon code php :
$dossier = 'photos/';
$fichier = basename($_FILES['mon_image']['name']);
$taille_maxi = 1000000000;
$taille = filesize($_FILES['mon_image']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['mon_image']['name'], '.');
$connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données");
mysql_select_db ('phototheque');
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = "Vous devez charger un fichier de type png, gif, jpg, jpeg";
}
if($taille>$taille_maxi)
{
$erreur = "le fichier est trop gros...";
}
if(!isset($erreur))
{
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
{
echo "succès !";
}
else
{
echo "échec du chargement !";
}
}
else
{
echo $erreur;
}
mysql_close($connexion);
?>
si quelqu'un a une idée voire un superbe lien que j'ai pas encore trouvé...
merci d'avance
je tente désespérément d'empêcher un upload d'une image qui aurait le même nom qu'une autre déjà présente dans le dossier "photos" (du coup, logo.jpg est remplacé par une image qui a le même nom et que j'ai chargé ultérieurement).
ET je ne vois pas comment faire malgré les tuto !!!
Je me doute que c'est une condition mais laquelle et où ?
voici mon code php :
Citation :
<?php$dossier = 'photos/';
$fichier = basename($_FILES['mon_image']['name']);
$taille_maxi = 1000000000;
$taille = filesize($_FILES['mon_image']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['mon_image']['name'], '.');
$connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données");
mysql_select_db ('phototheque');
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = "Vous devez charger un fichier de type png, gif, jpg, jpeg";
}
if($taille>$taille_maxi)
{
$erreur = "le fichier est trop gros...";
}
if(!isset($erreur))
{
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
{
echo "succès !";
}
else
{
echo "échec du chargement !";
}
}
else
{
echo $erreur;
}
mysql_close($connexion);
?>
si quelqu'un a une idée voire un superbe lien que j'ai pas encore trouvé...
merci d'avance
Autres pages sur : php interdire upload image nom
Lassé par la pub ? Créez un compte
ça marche pas en fait car tout les upload sont dégagés !!!
aucun ne passe à cause de la nouvelle condition.
pourtant mon code paraît bon :
<?php
$dossier = 'photos/';
$fichier = basename($_FILES['mon_image']['name']);
$taille_maxi = 1000000000;
$taille = filesize($_FILES['mon_image']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['mon_image']['name'], '.');
$connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données");
mysql_select_db ('phototheque');
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = "Vous devez charger un fichier de type png, gif, jpg, jpeg";
}
if($taille>$taille_maxi)
{
$erreur = "le fichier est trop gros...";
}
if (!file_exists ($dossier . $fichier))
{
$erreur = "déjà là";
}
if(!isset($erreur))
{
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
{
echo "succès !";
}
else
{
echo "échec du chargement !";
}
}
else
{
echo $erreur;
}
mysql_close($connexion);
?>
j'vois vraiment pas là...
faute de syntaxe? petit oubli?
merci pour votre aide
aucun ne passe à cause de la nouvelle condition.
pourtant mon code paraît bon :
Citation :
<?php
$dossier = 'photos/';
$fichier = basename($_FILES['mon_image']['name']);
$taille_maxi = 1000000000;
$taille = filesize($_FILES['mon_image']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['mon_image']['name'], '.');
$connexion=mysql_connect ('localhost','root','') or die ("impossible de se connecter à la base de données");
mysql_select_db ('phototheque');
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = "Vous devez charger un fichier de type png, gif, jpg, jpeg";
}
if($taille>$taille_maxi)
{
$erreur = "le fichier est trop gros...";
}
if (!file_exists ($dossier . $fichier))
{
$erreur = "déjà là";
}
if(!isset($erreur))
{
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
{
echo "succès !";
}
else
{
echo "échec du chargement !";
}
}
else
{
echo $erreur;
}
mysql_close($connexion);
?>
j'vois vraiment pas là...
faute de syntaxe? petit oubli?
merci pour votre aide
camzo a dit :
parfait parfait,, j'ai mis :Citation :
if (!file_exists ($dossier . $fichier)){
$erreur = "
déjà là
";
}
meri bien
tu as pas bien compris mon post, tu remarqueras que j'ai mis un ! avant le file_exists () ce qui veut dire n'existe pas
et c'est dans le else que j'affiche l'erreur
de plus dans ton programme, tu compares $fichier avant de le formater, il ne le trouvera donc pas dans le repertoire s'il contient un accent ou tout ce que tu enleves avant de le sauver
EDIT: d'ailleurs je ne comprends pas bien, pourquoi tu n'as pas simplement repris le squelette que j'ai mis au lieu de mettre un nieme variable ($erreur) que tu retestes dans le if avant le move_...?
pour le ! j'ai juste testé. et comme tu le dis, faut le laisser. Pour la suite, j'ai pas tout pigé (désolé, j'suis pas ben fort...). Mis, j'ai esaayé quand même et :
c'est plus ça...?
merci de me donner ton avis
if(!isset($erreur))
if (!file_exists ($dossier . $fichier))
{
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
{
echo "succès !";
}
else
{
echo "fichier existe déjà\n";
}
c'est plus ça...?
merci de me donner ton avis
je viens de relire ton code, j'ai pas remarqué que tu utilisais $erreur autre part
essaye ca:
et il faudrait ne pas tester le reste des conditions une fois qu'une erreur est détécté, c'est une perte de temps
essaye ca:
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
// a ce stade $fichier devrait exactement correspondre au nom sur le disque
if (file_exists ($dossier . $fichier))
{
$erreur = "le fichier existe déjà";
}
if(!isset($erreur))
{
if(move_uploaded_file($_FILES['mon_image']['tmp_name'], $dossier . $fichier))
{
echo "succès !";
}
else
{
echo "ehec du chargement\n";
}
}
else
echo $erreur;
et il faudrait ne pas tester le reste des conditions une fois qu'une erreur est détécté, c'est une perte de temps
ok ok... ça marche. et je crois comprendre maintenant quand tu disais qu'il fallait formater avant... effectivement, le strtr(fichier, était mal placé, etc.
bref, mes variables étaient mal placées (trop loin en fait). Mais j'avoue que j'aurais pas pensé à mettre le !isset...
merci en tout cas car ça m'éclairci (et m'aide) grandement !!!
bref, mes variables étaient mal placées (trop loin en fait). Mais j'avoue que j'aurais pas pensé à mettre le !isset...
merci en tout cas car ça m'éclairci (et m'aide) grandement !!!
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- solutionsUpload image php pour forum
- ForumPhp image upload
- ForumPhp upload image renommer
- solutionsRenommer image upload php
- ForumPhp upload image redimensionner
- ForumUpload image en php
- ForumUpload image php avec easyphp
- ForumPhp upload image sur un serveur
- ForumUpload image php gd2
- ForumIncrementer image upload php
- Voir plus