comment installer automatiquement une photo si $file_max_size est trop lourd?

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 : comment installer automatiquement une photo si $file_max_size est trop lourd?

par AB » 28 janv. 2009, 20:02

Evidemment si tu met une limite d'upload à 50 Ko cela ne m'étonne pas que tu aies une collection de croix rouge à la place de tes images :).

Faudrait autoriser un upload max plus important (par exemple 1Mo) et ensuite tu traites le redimensionnement de l'image et son optimisation pour le web avec ton script php.
Il y a un exemple ici http://www.phpfrance.com/forums/viewtop ... highlight=

Sinon tu trouveras un tuto sur le siteduzero

par thehawk » 28 janv. 2009, 19:52

Il faudrait établir les tests suivant :

les extensions sont pas bonnes :
si oui
On arrete le script avec un beau message d'erreur
si non
on regarde la taille
si oui
On arrete le script avec un beau message d'erreur
si non
C'est tout bon, on enregistre.


Il va de soit qu'avant de faire ceci il convient de mettre en ligne la photo en question.

(Je te laisse le soin de faire le code php de la forme :
<?php

if(CONDITION)
   exit("ERREUR #1 : ....");
elseif (CONDITION 2)
   exit("....");
else
On enregistre

par olivia » 28 janv. 2009, 09:30

Merci Thehawk l'insertion dans ma table j'arrive bien à monter la requete se qui me pose probleme c'est de dire à la requete d'enregistrer une photo (photo.jpg) si l'internaute envoie une photo trop lourde ou au mauvais format.
Car chaque fois à l'édition d'une page internet, certain des résultats de ma table s'affichent en image vide avec la croix rouge (normal pas de photo dans le champ).
Comme je suis sur un serveur payant et limité financièrement je prefere refuser les photos qui font plus de 50ko mais certains intenautes ne savent pas compresser leurs photos malgrés les explications écritent que je leurs fournies.
Penses tu qu'il y à un script automatique possible? Merci

par AB » 26 janv. 2009, 15:21

Attention pour les gestions des erreurs


switch ($_FILES['aFile']['error']) te renverra des erreurs dans la mesure ou l'ensemble de ton upload ne dépasse pas post_max_size, si ça dépasse cette valeur, les superglobales $_POST et $_FILES seront vides. Pour gérer ce cas on peut envoyer une variable $_GET en même temps que le formulaire comme indiqué dans la doc :
http://fr3.php.net/manual/fr/ini.core.p ... t-max-size

par thehawk » 26 janv. 2009, 14:05

Pour l'enregistrement dans la base de données :
http://www.phpfrance.com/tutoriaux/inde ... l-avec-php

Bye Hawk

par olivia » 26 janv. 2009, 13:58

Merci thehawk le script du tutorial fonctionne bien mais je n'arrive pas à enregistrer dans mysql.
Je vias voir avec ce que tu me propose stef. Bisous à vous

par Stef » 25 janv. 2009, 21:58

aurais tu une adresse ou je peux apprendre car cela fais trois ans que je ne programme pas suite accident et perte de mémoire avec medicaments.
Je viens de passer trois jours sur ce soucis de photo et je n'arrive pas à en dormir.
Merci à toi
Ho bichoune :cry: forces-toi à te reposer, avec un peu de repos et recul, des fois on y voit plus clair! :)*


Pour répondre à ta question, j'me suis planté avec l'idée du if, elseif, ça peut pas marcher comme ça... faudrait certainement utiliser plutôt un switch !
-> http://fr.php.net/manual/fr/control-str ... switch.php

Là je suis trop claqué paske j'ai beaucoup bossé sur mon site (oui moi aussi j'ai du mal à m'arrêter) et donc j'vais regarder ça plus tard! si personne ne t'aide à résoudre ton problème d'ici là, et si tu t'apperçois que je ne réponds pas envoie moi un mp juste pour me dire de penser à ton topic, paske je reçois pas les mails de notifications pour les fils de discussions!

Edit

En fait ça doit pouvoir marcher avec if, elseif, reste à savoir quelles instructions leur donner...

par thehawk » 25 janv. 2009, 19:55

par olivia » 24 janv. 2009, 19:13

Bonjour stef, j'ai vraiment pas de bon resultat sur mon code passe enregistre le nom de la photo trop lourde et pas le fichier 'normal' mais il ne prend pas la photo.jpg qui pese elle 3ko
if ($_FILES['aFile']['size'] <= $file_max_size) { 
    //ton code 
} 
elseif ($_FILES['aFile']['size'] > $file_max_size) { 
    //autre traitement 
}
aurais tu une adresse ou je peux apprendre car cela fais trois ans que je ne programme pas suite accident et perte de mémoire avec medicaments.
Je viens de passer trois jours sur ce soucis de photo et je n'arrive pas à en dormir.
Merci à toi

par Stef » 24 janv. 2009, 11:39

Dans ce cas avec if tu devrais pouvoir t'en sortir:
if ($_FILES['aFile']['size'] <= $file_max_size) {
    //ton code
}
elseif ($_FILES['aFile']['size'] > $file_max_size) {
    //autre traitement
}

par olivia » 24 janv. 2009, 11:32

Merci à vous deux mais ce que je souhaiterais installer c'est une ligne dans mon code source qui permet d'enregistrer le nom de photo.jpg si la photo de l'internaute est trop lourde et donc refusé par mon
$file_max_size = 100000;

par Stef » 24 janv. 2009, 07:55

bonjour olivia,

dans un premier temps tu peux déjà modifier cette partie pour autorisé l'envoi de fichier plus gros:
//Valeur actuelle: 100ko
$file_max_size = 100000;

//Nouvelle valeur (à toi de choisir), ex.: 1Mo
$file_max_size = 1000000;
Ensuite lorsque tu affiches tes images, il te suffit d'imposer une largeur au cas où l'image soit très large, ex.:

Code : Tout sélectionner

<img src="chemindel'image" style="width:400px;" alt="blabla" />
J'ai mis 400 pixels, mais tu mets bien ce que tu veux...

Bon voilà, ça c'est une solution qui peut te dépanner provisoirement...

par rolusseum » 24 janv. 2009, 01:06

comment installer automatiquement une photo si $file_max_siz

par olivia » 23 janv. 2009, 23:30

bonjour messieurs cela fait des années que j'installe manuellement une photo.jpg modele pas trés lourde quand les intenautes dépose une photo trop lourde sur mon site. Le programme refuse la photo qui dépasse $file_max_size et donc présente un encadrement avec une croix rouge sur la page du site. C'est vraiment pas trés jolie alors j'installe une à une chaque jours pratiquement.
Peut on faire autrement?
$destination_dir = '../photo/'; 
$file_max_size = 100000; 
$authorized_extensions = array('jpg', 'gif'); 

if 
(!is_dir($destination_dir)) 
{ 
echo 'Veuillez indiquer un répertoire destination correct !'; die(); 
} 

if 
(!is_writeable($destination_dir)) 
{ 
echo 'Veuillez spécifier des droits en écriture pour le répertoire destination !'; die();       
} 
   
if 
(
isSet($_POST['submitFile'])
) 

{ 
if 
(isSet($_FILES) && is_array($_FILES))
 
{ 
if 
($_FILES['aFile']['error'] == UPLOAD_ERR_OK) 

{ 
if 
($_FILES['aFile']['size'] <= $file_max_size) 

{ 
$lastPos = strRChr($_FILES['aFile']['name'], "."); 
if 
(
$lastPos !== false && in_array(strToLower(subStr($lastPos, 1)), $authorized_extensions)
) 

{ 
$destination_file = time().formatFileName($_FILES['aFile']['name']);             
if 
(
move_uploaded_file($_FILES['aFile']['tmp_name'], 
$destination_dir.DIRECTORY_SEPARATOR.$destination_file)) 
{ 
echo 'Votre annonce nous est bien parvenue et notre service la enregistrée avec votre photo.';   		    
} 
else 
{
echo 'La photo n\'a pas été envoyée correctement !';  die();
} 
} 
else 
{
echo 'Mauvaise extension pour votre photo, les formats acceptés sont jpeg ou gif!'; die(); 
}       
} 
else 
{
echo 'Votre annonce nous est bien parvenue et notre service la enregistrée, la photo dépasse 50ko, elle ne sera donc pas diffusez sur le site!'; die(); 
} 
} 
else 
{
switch ($_FILES['aFile']['error'])

{ 
case UPLOAD_ERR_INI_SIZE: 

echo 'La photo envoyée dépasse la valeur spécifiée pour upload_max_filesize dans php.ini.'; 

break; 

case UPLOAD_ERR_FORM_SIZE: 
echo 'La photo na pas été envoyée, elle dépasse 50 ko.'; 

break; 

case UPLOAD_ERR_PARTIAL: 
echo 'La photo n\'a ét&eacute que partiellement envoyée.'; 

break;  
                           
default: 

echo 'Votre annonce nous est bien parvenue.'; 
}
 }    
} 



else 
{
 echo 'Pas de photo recu';  die();
 } 
 } 
if(isset($_FILES['aFile']['name'])) 
{ 
$destination_file = time().formatFileName($_FILES['aFile']['name']); 
} 
else 
{ 
$destination_file = ""; 
}
$destination_lect = '../photo/';

$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) 
{
echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier"; exit;}


if(isset($_FILES['aFile']) && $_FILES['aFile']['name'] != "") 
{ 
    $resultq=mysql_db_query($sql_bdd,"INSERT INTO annonce VALUES ('','$destination_lect$destination_file','$destination_file')",$db_link) or die(mysql_error()); 
} 
else 
{ 
    $result=mysql_db_query($sql_bdd,"INSERT INTO annonce VALUES ('','". $destination_lect ."photo.jpg','')",$db_link) or die(mysql_error()); 
} 
Pensez vous que l'on peu l'inserer merci.