Autre system que blob pour stockage image

Eléphant du PHP | 388 Messages

04 avr. 2010, 09:05

Merci c nikel je vais mettre des commentaire pour mieux me repérer :D

cependant j'ai essayer file exist

J'ai essayé cela pour voir
f (in_array($extension_upload,$extensions_valides))
			{
				$image_sizes = getimagesize($_FILES['icone']['tmp_name']);
				
				if (file_exists($_FILES['icone']['name'])) 
				{				
						echo "Le fichier existe.";
						
				
				if (!$image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) 
				{
					$erreur = 'Image trop grande';
				}
Pour cela
if (file_exists($_FILES['icone']['name'])) 
				{				
						echo "Le fichier existe.";
Je pence qu'il faudrait mieux déplacer la $nom au début de la page pour que le puisse le reutiliser ici non ?

Car actuellement cela ne marche pas

Mammouth du PHP | 985 Messages

04 avr. 2010, 09:11

Repost tout ton code complet modifié et qui fonctionne stp
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

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';
			}
		}
	}
?>


Mammouth du PHP | 985 Messages

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';
                        }
                }
        }
?>
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

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 ?) ;
}

Mammouth du PHP | 985 Messages

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 :)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

04 avr. 2010, 09:39

pour rajouter une chiffre qui s'incremente doit faire cela

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

Mammouth du PHP | 985 Messages

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?
Modifié en dernier par Dr@ke le 04 avr. 2010, 09:55, modifié 2 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

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

Mammouth du PHP | 985 Messages

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.
Modifié en dernier par Dr@ke le 04 avr. 2010, 10:02, modifié 1 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 388 Messages

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

Mammouth du PHP | 985 Messages

04 avr. 2010, 10:02

Ok :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Mammouth du PHP | 985 Messages

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.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

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 ?

Mammouth du PHP | 985 Messages

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.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.