Autre system que blob pour stockage image

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Autre system que blob pour stockage image

Re: Autre system que blob pour stockage image

par AB » 05 avr. 2010, 16:44

[EDIT]
Un autre avantage que je n'avais pas pensé au départ, c'est de ne plus se soucier des caractères dans le nom du fichier.
Vue que l'on renomme le fichier avec un ID unique, on n'a donc plus besoin de vérifier ou de remplacer les caractères spéciaux.
Économie donc d'une fonction ou d'une reg qui souvent n'est pas efficace à 100%.
Donc au final, c'est mieux et plus simple de le renommer mais en utilisant la fonction uniqid() :wink:

A noter aussi, qu'en renommant le fichier avec un ID unique, l'utilisation d'un test file_exists() n'est quasiment plus nécessaire non plus.
A noter aussi que cela est possible vue que l'on enregistre le nom du fichier dans la Bd pour pouvoir retrouver ce même fichier quelque soit son nouveau nom.
Et c'est pour ces raisons que j'ai insisté auprès despidercrash pour qu'il prenne bien en considération l'intérêt de cette solution, qui en plus est facile à mettre en oeuvre :wink:

Re: Autre system que blob pour stockage image

par Dr@ke » 04 avr. 2010, 17:23

Oui oui AB, c'est possible, je lui ai dis qu'il y avait pleins d'alternatives, et ce même un unique ID c'est possible aussi...
La fonction uniqid() génère un id unique, donc cela règle les inconvénients d'une simple valeur aléatoire.
http://php.net/manual/fr/function.uniqid.php
$fichier = uniqid() . '.' . $extension_upload;
[EDIT]
Un autre avantage que je n'avais pas pensé au départ, c'est de ne plus se soucier des caractères dans le nom du fichier.
Vue que l'on renomme le fichier avec un ID unique, on n'a donc plus besoin de vérifier ou de remplacer les caractères spéciaux.
Économie donc d'une fonction ou d'une reg qui souvent n'est pas efficace à 100%.
Donc au final, c'est mieux et plus simple de le renommer mais en utilisant la fonction uniqid() :wink:

A noter aussi, qu'en renommant le fichier avec un ID unique, l'utilisation d'un test file_exists() n'est quasiment plus nécessaire non plus.
A noter aussi que cela est possible vue que l'on enregistre le nom du fichier dans la Bd pour pouvoir retrouver ce même fichier quelque soit son nouveau nom.

Re: Autre system que blob pour stockage image

par AB » 04 avr. 2010, 11:12

D'accord je vais laisser comme cela c'est vrai le script est bloqué il aura juste a modifier le nom de l'image :P

Merci pour tout, maintenant je vait adapter se code dans mon formulaire puis ;)
Pourquoi bloquer le script et faire intervenir le visiteur alors que tu peux renommer le fichier automatiquement ?

Re: Autre system que blob pour stockage image

par Dr@ke » 04 avr. 2010, 10:20

Et ne remet pas les $erreur = car cela ne fonctionnait pas dans ton script, laisse bien les echo, c'est important :wink:

je reviens plus tard dans la journée.

Re: Autre system que blob pour stockage image

par Dr@ke » 04 avr. 2010, 10:02

Ok :wink:

Re: Autre system que blob pour stockage image

par spidercrash » 04 avr. 2010, 10:01

D'accord je vais laisser comme cela c'est vrai le script est bloqué il aura juste a modifier le nom de l'image :P

Merci pour tout, maintenant je vait adapter se code dans mon formulaire puis ;)

Re: Autre system que blob pour stockage image

par Dr@ke » 04 avr. 2010, 09:56

Car sinon tu peux utiliser un truc du style (je précise -> vite fait hein):
$rand = rand(1, 50);
$_FILES['icone']['name'] = $rand . '_' . $_FILES['icone']['name'];
La fonction rand() permet de générer un nombre aléatoire.
http://php.net/manual/fr/function.rand.php
Mais il faudrait ensuite re-vérifier si le fichier existe déjà, car vue que c'est aléatoire, rien ne garantit qu'un autre fichier n'existera pas non plus sous ce nouveau nom...

Il y a pleins d'alternatives et de solutions.
Tout ceci est donc possible à faire, mais à mon avis c'est ce compliquer la vie pour rien.
Car, le script s'arrête et dit que le fichier existe et donc l'utilisateur a juste a renommer son fichier lui-même -> point :wink:

Maintenant, tu fais comme tu veux, mais moi à ta place, je laisserais juste l'echo.

Re: Autre system que blob pour stockage image

par spidercrash » 04 avr. 2010, 09:54

Oui c'est vrai cela sera plus simple derniere chose pour voir le renommage

j'ai attribuer une variable nommé
$compteur +=1;
Au début de mon script

Puis j'ai éffectué se changement
elseif (file_exists($dossier . $_FILES['icone']['name']))
                                {
                                        @rename($_FILES['icone']['name'], "Images/" . $compteur . ".jpg"
                                }
Et cela me met
erreur :

Parse error: syntax error, unexpected '}' in /homez.316/logisdesq/www/blob/reception.php on line 34

Me manque t'il quelques chose ou si le renommage ne se rapproche pas a cela dit le moi merci :D

Re: Autre system que blob pour stockage image

par Dr@ke » 04 avr. 2010, 09:49

Es tu certain de vouloir renommer, car sinon le script dit que le fichier existe déjà, l'utilisateur a juste a changer le nom lui-même, cela serait plus simple à mon avis, non?

Re: Autre system que blob pour stockage image

par spidercrash » 04 avr. 2010, 09:39

pour rajouter une chiffre qui s'incremente doit faire cela

rename ($_FILES['icone']['name'],'.'),'1'++;

Re: Autre system que blob pour stockage image

par Dr@ke » 04 avr. 2010, 09:35

Voilà, ne touche a rien d'autre que cette ligne:
echo 'Fichier déjà existant';
Et tu la remplaces en ce que tu veux faire, donc renommer...

Ensuite, on regardera d'autres trucs dans ton script, car quelques trucs a améliorer... :wink:

Mais cela sera quand ton renommage fonctionnera, te laisse y réfléchir un peu et tester :)

Re: Autre system que blob pour stockage image

par spidercrash » 04 avr. 2010, 09:32

oui cela marche bien en faite fallait que je else, mais maintenant que cela est bon faut que je renomme le fichier

faut que je face quelques chose de se genre :

elseif (file_exists($dossier . $_FILES['icone']['name']))
{
rename(Faire une incrementation ou ajouter un chiffre ?) ;
}

Re: Autre system que blob pour stockage image

par Dr@ke » 04 avr. 2010, 09:24

Essaye comme ceci :)
<?php
        $dossier = 'Images/';
        $maxsize = '1048576';
        $maxwidth = '2000';
        $maxheight = '2000';

        if ($_FILES['icone']['error'] > 0)
        {
                echo 'Erreur lors du transfert';
        }
        else
        {
                if ($_FILES['icone']['size'] > $maxsize)
                {
                        echo 'Le fichier est trop gros';
                }
                else
                {
                        $extensions_valides = array('jpg','jpeg','gif','png');
                        $extension_upload = strtolower(  substr(  strrchr($_FILES['icone']['name'], '.'),1));
                       
                        if (in_array($extension_upload,$extensions_valides))
                        {
                                $image_sizes = getimagesize($_FILES['icone']['tmp_name']);
                               
                                if (!$image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
                                {
                                        echo 'Image trop grande';
                                }
                                elseif (file_exists($dossier . $_FILES['icone']['name'])) 
                                {
                                        echo 'Fichier déjà existant';
                                }
                                else
                                {
                                        $nom = "{$_FILES['icone']['name']}";
                                        $resultat = move_uploaded_file($_FILES['icone']['tmp_name'],$dossier.$nom);     if ($resultat)
                                        {
                                                echo 'Transfert réussi';
                                                mysql_connect("aaa", "aaa", "aaa");
                                                mysql_select_db("aaa");
                                               
                                                $nom = mysql_real_escape_string($nom);
                        $image = $dossier.$nom;
                        $description = mysql_real_escape_string($_POST['description']);
                                               
                        mysql_query("INSERT INTO images VALUES('','" . $nom . "', '" . $description. "', '" . $image . "')");
                                        }
                                        else
                                        {
                                                echo 'Echec du transfert';
                                        }
                                }
                        }
                        else
                        {
                                echo 'Extension incorect';
                        }
                }
        }
?>

Re: Autre system que blob pour stockage image

par spidercrash » 04 avr. 2010, 09:14

donc voici le code complet qui fonctionnement
<?php
	$dossier = 'Images/';
	$maxsize = '1048576';
	$maxwidth = '2000';
	$maxheight = '2000';

	if ($_FILES['icone']['error'] > 0) 
	{
		$erreur = 'Erreur lors du transfert';
	}
	else
	{
		if ($_FILES['icone']['size'] > $maxsize)
		{
			$erreur = 'Le fichier est trop gros';
		}
		else
		{
			$extensions_valides = array('jpg','jpeg','gif','png');
			$extension_upload = strtolower(  substr(  strrchr($_FILES['icone']['name'], '.'),1));
			
			if (in_array($extension_upload,$extensions_valides))
			{
				$image_sizes = getimagesize($_FILES['icone']['tmp_name']);
				
				if (!$image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) 
				{
					$erreur = 'Image trop grande';
				}
				else
				{
					$nom = "{$_FILES['icone']['name']}";
					$resultat = move_uploaded_file($_FILES['icone']['tmp_name'],$dossier.$nom);	if ($resultat)
					{
						echo 'Transfert réussi';
						mysql_connect("aaa", "aaa", "aaa");
						mysql_select_db("aaa");
						
						$nom = mysql_real_escape_string($nom);
                        $image = $dossier.$nom;
                        $description = mysql_real_escape_string($_POST['description']);
                                               
                        mysql_query("INSERT INTO images VALUES('','" . $nom . "', '" . $description. "', '" . $image . "')");
					}
					else
					{
						echo 'Echec du transfert';
					}
				}
			}
			else
			{
				echo 'Extension incorect';
			}
		}
	}
?>

Re: Autre system que blob pour stockage image

par Dr@ke » 04 avr. 2010, 09:11

Repost tout ton code complet modifié et qui fonctionne stp