Chargement et utilisation d'image

petitspouces Messages postés 5 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 14 décembre 2009 - 10 oct. 2009 à 11:51
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 18 oct. 2009 à 06:24
Bonjour,

Je souhaiterai que mes visiteurs puissent charger une image depuis un formulaire, accompagnée de leur nom et d'un commentaire puis que les images ainsi chargées soient affichée ( avec leurs commentaires ) sur une autre page de façon aléatoire, une seule photo à la fois.
Merci d'avance.

17 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
10 oct. 2009 à 12:11
Bonjour,

D'accord, tu souhaiteras ça. Tu nous diras quand le moment sera venu, quand tu seras en train de le souhaiter (puisque ce moment ne semble pas encore être arrivé).
Accessoirement, tu nous informes de ce que tu souhaiteras, ça nous fait une belle jambe, mais qu'est-ce qu'on doit faire avec ton souhait futur ?
0
petitspouces Messages postés 5 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 14 décembre 2009
10 oct. 2009 à 12:17
lol !
petite rectification donc : JE VEUX
Et j'ai besoin de votre aide sous forme de 2 codes : un pour stocker les photos, un autre pour en afficher une de façon aléatoire sur ma page.
C'est tout.
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
10 oct. 2009 à 12:45
Ah ! :o)

Exercice de diction... répète 10 fois sans te tromper : je veux et j'exige.

Hum. Bon, sérieusement. Pour ma part, il ne m'est pas possible de te fournir du code tout fait prêt à installer, pour plusieurs raisons.
* La première c'est que j'ai pas le temps
* La deuxième, c'est que je facture environ 200€ HT / jour de développement
* La troisième : il est quand même préférable que tu le fasses toi-même, pour des raisons évidente d'économie financière (si tu t'adresses à moi) et pour des raisons didactiques (c'est quand même plus gratifiant de pouvoir dire : "c'est moi qui l'ai fait tout seul").

Ce que je peux faire, par contre, c'est fournir du support (ça je ne le facture pas, en tout cas pas sur phpCS ^^).
Concrètement, tu vas avoir besoin de :
* un formulaire avec un champ de type file. La balise forme doit avoir l'attribut enctype="multipart/form-data" pour pouvoir envoyer des fichiers
* un script qui récupère les données du formulaire (le fichier, le nom et le commentaire) et qui va :
[list][*] vérifier que l'image est d'un type autorisé (jpg, gif, png, ce que tu veux, mais il faut vérifier), qu'elle n'est pas trop lourde (sachant que PHP a de toute façon une limite définie suivant la configuration du serveur)
[*] stocker l'image sur le serveur dans un répertoire approprié avec un nom aléatoire unique et conserver le chemin vers l'image dans une variable pour la suite des évènements
[*] insérer dans une base de données les informations nécessaires : le nom de fichier d'origine de l'image, son nom unique sur ton serveur, le nom de l'uploader et le commentaire
/list
* un autre script qui va afficher l'image en allant la chercher dans la base de données et qui va donc :
[list][*] faire une requête de type SELECT sur la table où se trouvent enregistrées les informations de tes photos, avec ORDER BY RAND() LIMIT 1 pour n'en prendre qu'une au hasard
[*] vérifier que l'image existe bel et bien sur le serveur (avec la fonction is_file())
[*] générer une balise avec les informations récupérées (attention à ce que le chemin de l'image soit converti en "chemin web", qui n'est pas le même que son chemin sur le serveur, hein...)
/list

Accessoirement, le premier script, qui reçoit l'image, pourra redimensionner les photos uploadées si tu souhaites limiter leur taille (pour cela, il faut utiliser GD).

Pour les différentes étapes que je liste ici, il existe déjà des sources (sur phpCS ou ailleurs). Attention, certaines sont de mauvaise qualité, ou difficilement réutilisables (parce que mal codées). Il en existe sûrement des correctes, je n'en doute pas un instant. Faut les chercher (et les trouver !) ^^
Cela dit, à coder, c'est vraiment pas la mer à boire. Peut-être qu'une âme charitable qui a le temps pourra te proposer une aide plus concrète que celle que je fournis...

P.S. : merci d'avoir apprécié la note d'humour dans mon précédent message ;)
P.S.2 : désolé pour la mise en page des liste, mais c'est vraiment la merde avec cet éditeur, on peut pas imbriquer deux listes à puces :/ et on peut pas indenter du texte non plus :(
0
petitspouces Messages postés 5 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 14 décembre 2009
10 oct. 2009 à 12:54
Merci pour votre réponse.
J'ai déjà les neurones qui font des noeuds.
Tout ça n'est pas facile mais qui ne tente rien ...

Y a t'il quand même une âme charitable ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
christie49 Messages postés 16 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 7 novembre 2011
16 oct. 2009 à 09:46
Chercher une solution comme le fait petit pouce et tomber sur l'humour (???) cynique de neige laisse assez froid.
J'en ai marre de ces programeurs qui se sentent supérieurs aux autres
ils ont autre chose a faire non ?, facturer 200 euros par jour (c'est tout, boaf, moi c'est 700)



Bref
Je cherche la meme chose actuellement car j'ai programmé un forum sur mon site, Un forum assez complet en toute modestie je dois dire, calqué sur les forums classiques avec decodeur balises bb entre autres.
EN m'aidant bien sur de codes rectifiés et adaptés que j'ai pu trouver a droite a gauche par de généreux programmeurs qui ne parlent pas de facture.
Mon point de départ du PHP c'est grace au site du zero (sans oublier celui ci bien sur, (ca c'est pour que ce message reste ici))
Je m'attaque a la partie image AVATAR sur mon forum
Je suis tombée sur un site lien
qui detaille pas mal, mais la complexité est grande car cela mele trop d'autres choses.
Les aspect importants sont
- controle de l'image type jpg ou gif etc pour ecarter les exe virus
- controle de la taille du fichier


Le probleme avec FREE c'est qu'apres moultes recherches on ne peux pas vraiment acceder a l'ecriture de fichiers, ils ont limité les attributs des fichiers a 644 et non 777 pour ceux qui connaissent
A moins que je me trompe bien sur

Je suis débutante en programmation PHP et le reste d'ailleurs, mais j'avance, je donnerais ma solution épurée ici pour stocker les images sur une base de données PHP
Les images seront stockées sur une base de donnéee sql differente de celle des messages du forum pour ne pas ralentir l'acces a la bdd du forum.


Je ne poste pas souvent sur ce site, le seul ou je sois inscrite
je recois la news letter de temps en temps qui me rappelle a son bon souvenir
Mais par pitié, les génies du programme, soyez modestes, un peu, yen a marre de vous lire
une bonne claque de temps en temps ca devrait vous faire redescendre

a suivre..
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
16 oct. 2009 à 14:08
Salut Christie,

J'aime beaucoup ton humour...
J'en ai marre de ces programeurs qui se sentent supérieurs aux autres

Merci de préciser ce qui dans mon message indique que je me sens supérieur aux autres.

L'auteur du message initial demande un code tout fait, ce qui est contraire au règlement du forum, que je t'invite à relire si besoin est. Notamment :
4. On demande une explication ou de l'aide sur un sujet précis, on ne l'exige pas!
9. On ne demande pas un programme tout fait, on ne demande que de l'aide sur un problème concret.

Je me permettais donc de signaler que développer des codes tout faits prêts à installer, c'est le métier de certains, et que ça se paie. Et ce n'est pas le rôle de ce forum de faire ce genre de mise en relation.
Par contre, quand tu dis :
facturer 200 euros par jour (c'est tout, boaf, moi c'est 700)

Qui se considère supérieur à l'autre dans l'histoire ?
Ou encore :
[quote]'ai programmé un forum sur mon site, Un forum assez complet en toute modestie je dois dire,[:quote]
Laisse-moi rire !! Franchement, c'est l'hôpital qui se fout de la charité !

Bref.

Tout ça pour dire que chez Free, pas de problème d'écriture des fichiers : tes scripts peuvent lire/écrire/supprimer tous les fichiers (je dis bien TOUS) qui se trouvent sur ton site. Les permissions n'ont rien à voir dans l'histoire : le serveur est configuré pour être exécuté avec les permissions de l'utilisateur, pas les permissions du serveur Apache (ils utilisent PHP en tant que CGI avec SuExec).
Pour ce qui est de contrôler le type de fichier, il suffit de vérifier l'extension. Si la manipulation avec GD échoue (lors du redimensionnement pour l'avatar), alors l'image n'est pas valide, et c'est tout, il suffit de supprimer le fichier temporaire uploadé.

--
Neige

N'hésitez pas à lire la doc
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
16 oct. 2009 à 14:12
Ah j'ai oublié... Un autre point du règlement du site :
5. On ne pose qu'une question par topic.


Et puis note quand même que tu es la seule à n'avoir pas apprécié la note d'humour dans mes premiers messages. En même temps c'es pas grave, ils ne t'étaient pas destinés.

--
Neige

N'hésitez pas à lire la doc
0
christie49 Messages postés 16 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 7 novembre 2011
16 oct. 2009 à 14:42
Navré neige, pour lire et repondre à des longs messages, mon tarif est desormais de 800 euros par heure

Sinon, apres recherches sur le net
je confirme
les instructions
ftp_connect("$ftp_server" );

n'existent pas sur free donc impossible de sauver les images avatar et cie sur un fichier, cela sera sur ma bdd en ce qui me concerne

Fatal error: Call to undefined function: ftp_connect() in upload.php on line ...
voila ce que free renvoi
pas mal de gens qui s'en plaignent
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
16 oct. 2009 à 15:30
Mais tu n'as pas besoin de cette fonction. A quoi cette fonction te sert-elle ?
Elle te serait utile pour ouvrir une connexion ftp distante : est-ce vraiment ce dont tu as besoin pour les avatars de ton forum ? J'en doute...
Il te suffit d'utiliser move_uploaded_file(). Tu n'as pas besoin d'autre chose...

Que ftp_connect() soit désactivé chez free est une chose, mais cela n'empêche pas des forums comme phpBB, SMF, vBulletin ou autre de pouvoir charger des avatars, et d'une manière générale des fichiers (pièces jointes dans les messages par exemple). Même chez Free...

--
Neige

N'hésitez pas à lire la doc
0
christie49 Messages postés 16 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 7 novembre 2011
17 oct. 2009 à 12:44
Voici une solution possible

tout d'abord pour te répondre petit pouce un code pour sauver une image sur une base de donnée
puis afficher au hasard les images contenues dessus
J'ai mis sur le meme code :
1) la possibilité de sauver une image
2) la possibilité d'afficher une image particulière
3) la possibilité d'afficher une image au hasard
-----------------------------------------------------

En preparation préliminaire:
1) remplacer sur ce code tout les identifiants de connexions
2) remplacer tous les chemins d'accès
3) le sauver sous forme php par exemple "charger_image.php"
4) avoir créé une page nommée avatar.php (voir le code) sauvée dans le même repertoire que cette page, c'est ce fichier qui est votre image.
5) avoir créé une base de donnée nommée 'test' qui devra contenir 2 champs
1er champ nommé 'numero' de type 'int' avec un 'auto_increment' coché
2em champ nommé 'avatar' de type 'mediumblob' ou 'blob'
--------------------------------------------------
Voici le code de la page principale


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type" />
  <title>Envoyer une image sur une bdd</title>
</head>





<?php
//Connexion (remplacer les parametres de connexion)
mysql_connect("mon_site.free.fr", "login", "mot_de_passe")or die(mysql_error());
mysql_select_db("test")or die(mysql_error());

//----------------------------------
//enregistrer une image sur la BDD
//----------------------------------
// Pour vos essais créez une base de donnée nommée 'test' qui devra contenir 2 champs
// 1er champ nommé 'numero' de type 'int' avec un 'auto_increment' coché
// 2em champ nommé 'avatar' de type  'mediumblob' ou 'blob'

if(!empty($_FILES['image']['size'])) //si on a posté un fichier 
{
//récupère taille, nom , fichier temporaire
$f1_size = $_FILES['image']['size'];
$f1_name = $_FILES['image']['name'];
$f1_tmpname =$_FILES['image']['tmp_name'];
//Récupération extension fichier texte qui suit le dernier point converti minuscule
$ext = strtolower(substr($f1_name,strrpos($f1_name, ".")+1));

//tableau des extensions acceptées, des images
$valides = array("jpg","jpeg","png","gif");

//vérifie la taille et le type de fichier
$taille_max = 25000; // par exemple 25ko
if ($f1_size > $taille_max) 
{
$infos = "fichier trop gros, maximum : " . ($taille_max/1000) ." ko
";
}
if (!in_array($ext,$valides)) 
{
$infos .= "le fichier doit etre une image jpg, png, jpeg, gif
";
}
if($infos == '') // pas d'erreur enregistrée
{


//Lecture du fichier. utilise mysql_escape_string car donnees binaires contiennent des caracteres speciaux.
$image = mysql_escape_string(file_get_contents($_FILES['image']['tmp_name']));

//inserer dans la bdd
mysql_query("INSERT INTO test VALUES('','$image','')") or exit (mysql_error());
$infos .= 'Image sauvée dans la base de données
';
}
echo($infos);
}
//----------------------------------
// afficher une image particulière
//----------------------------------
// vous devrez avoir créé une page nommée avatar.php (voir le code) sauvée dans le même repertoire que cette page, c'est ce fichier qui est votre image.

$numero_image = $_POST['numero_image']; //numero de l'image particulière demandée
if ($numero_image <> "") //si on a demandé une image particulière
{
// affiche juste le n° de l'image
echo('image numero : ' . $numero_image . ' ');
//affiche l'image via un lien de type 
echo('
');
}
//----------------------------------
// afficher une image au hasard
//----------------------------------


$hasard = $_POST['hasard']; 
if ($hasard <> "") //on a demandé une image au hasard
{
$retour = mysql_query('select count(*) from test')or die(mysql_error());	 
$donnees = mysql_fetch_row($retour); 
$nbr_entrees = $donnees[0]; 
$aleatoire = rand(0,$nbr_entrees-1); // nbr aleatoire compris entre 0 et $nbr_entrees-1
echo("position dans la table : " .$aleatoire . "---");
$retour = mysql_query("select * from test LIMIT " . $aleatoire . " , 1")or die(mysql_error()); //prend la ligne correspondante au n° aléatoire
$donnees =  mysql_fetch_array($retour);
$numero_image = $donnees['numero'];

// affiche juste le n° de l'image
echo('image aléatoire numero : ' . $numero_image . ' ');
//affiche l'image via un lien de type 
echo('
');

}

mysql_close(); //fermeture bdd
?>	
<form enctype="multipart/form-data" action="http://mon_site.free.fr/dossier_divers/charger_image.php" method="post">
Sauver une image sur la base de donnee







Voir une image particulière indiquez son numero







Afficher une image au hasard


 oui

 



</form>

</html>

----------------------------------------------
et voici le code pour l'image
enregistrez le tel quel sous forme "avatar.php"

<?php
$numero_image = $_GET["numero_image"]; //recupere le numero de l'image donnée dans le lien

$connexion = mysql_connect("mon_site.free.fr", "login", "mot_de_passe") or exit (mysql_error());
$database = mysql_select_db("test") or exit (mysql_error());
$retour = mysql_query("SELECT * FROM test WHERE numero='$numero_image'") or die(mysql_error());
$donnee = mysql_fetch_array($retour);	
$image = $donnee['avatar'];
mysql_close(); 

print $image;

?>
0
christie49 Messages postés 16 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 7 novembre 2011
17 oct. 2009 à 13:08
2 em possibilité

Certains disent que mettre des images sur une BDD c'est tabou, vous en pensez quoi ?

ha mince j'oubliai le reglement et j'ai posé une question

Voila une possibilté de les mettre sur un fichier à la place, meme si vous avez un hebergeur pas sympa.

merci a NOHAR, qui m'a debloqué gratuitement en postant sur ce meme site.

CONTOURNER-LE-SAFE-MODE-POUR-L-UPLOAD-DES-FICHIERS-AVEC-MOVE_UPLOADED_FILE

Remarque pour l'instruction move_uploaded_file : Pour certains serveurs, meme en indiquant un autre emplacement avec cette instruction, le fichier sera enregistrée dans le dossier ou est stocké le programme qui execute, par exemple free ne veux pas qu'on ecrive ailleurs dans un autre dossier. Veux pas qu'on se connecte via un code php etc ...
D'ou plein de galere pour vous si vous debutez, vous n'y comprendrez rien !
Remarque pour l'instruction CHMOD, elle n'est plus reconnue par FREE depuis 2003 au moins, inutile de chercher 4 heures sur le net, tout le monde dis tout et son contraire, le serveur renvoie 500 not understood (tu parles !!) free a limité l'acces aux fichiers, le chmod est definitivement bloqué a 700 pour les dossiers et 644 pour les fichiers.
Si comme moi vous êtes débutante ou débutant, ca va vous mettre des batons dans les roues.

Bref
Voici le code specifique pour enregistrer des images sur un dossier de votre site genre FRee ou pas sympa
Le seul bémol comme je le decrivait c'est que le dossier ou est enregistrée ce code (cette page) sera le même dossier ou sont enregistrées les images.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type" />
  <title>envoyer une image sur un fichier</title>
</head>



<form name="post_photo" method="post" action="http://mon_site.free.fr/dossier_divers/charger_image.php" enctype="multipart/form-data">


</form>

<?php

if(!empty($_FILES['photo1']['size'])) //méthode POST a envoyé un fichier
{
//récupère taille, nom , fichier temporaire
$f1_size = $_FILES['photo1']['size'];
$f1_name = $_FILES['photo1']['name'];
$f1_tmpname =$_FILES['photo1']['tmp_name'];

//Récupération extension fichier texte qui suit le dernier point converti minuscule)
$ext = strtolower(substr($f1_name,strrpos($f1_name, ".")+1));

//tableau des extensions acceptées
$valides = array("jpg","jpeg","png","gif");

//vérifie la taille et le type de fichier
$taille_max = 25000; // par exemple 25ko 
if ($f1_size > $taille_max) 
{$infos = "erreur fichier trop gros, maximum : " . ($taille_max/1000) ." ko
";}
//Verifiez bien pour ces codes testeurs trouvés sur le net que les fichiers "fausse-image-virus-hacker.jpeg.exe" sont bien filtrées, là ca marche, certains sont mal élaborés
if (!in_array($ext,$valides)) 
{$infos .= "erreur le fichier doit etre une image jpg, png, jpeg, gif
";}

//renomme le fichier uploadé
$numero = rand(1,9999); // ici vous remplacez l'aléatoire par un compteur perso, c'est evidemment ici que vous mettez le numéro d'identifiant de la personne en relation avec son compte par exemple,  son pseudo que sais-je ...
$name=strtolower("image_avatar".$numero.".".$ext);

if($infos == '') // pas d'erreur enregistrée
{
     //if(!move_uploaded_file($f1_tmpname, "http://votre_site.free.fr/general/dossier/sous_dossier/".$name."")) 
 //====> Pour certains serveurs, meme en indiquant un autre emplacement avec cette instruction, la photo sera enregistrée dans le dossier ou est stocké ce programme			 
if(!move_uploaded_file($f1_tmpname, $name))
//merci nohar, avec ceci on evite toute erreur pour les hebergeur comme free, 

//move_uploaded_file() renvoie un BOOLEEN, True si ça a marché
//False dans le cas contraire
{                                                                  
$infos .= "erreur Impossible d'enregistrer la photo ".$name." 
";
}
 else {$infos .= "ok fichier enregistré
";}
}
echo ($infos);
}

?>



</html>
0
petitspouces Messages postés 5 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 14 décembre 2009
17 oct. 2009 à 13:32
Merci infiniment.
Voilà une bonne base de travail.
Je suis en effet novice ( débutante )en php mais je n'ai pas de problème de chmod avec mon hébergeur ( un petit hébergeur canadien Planethoster ). Je peux modifier les permissions comme bon me semble.
En ce qui concerne le stockage des photos dans la bdd, certains disent que ça la surcharge rapidement et qu'il vaut mieux ne stocker que le chemin d'accès.
Personnellement je n'ai pas d'opinion sur la question, n'ayant jamais tester ni l'un, ni l'autre.
Je vais faire un essai avec les 2 codes que vous m'avez gentiment communiqué et vous tiendrai au courant des résultats et des problèmes rencontrés.
Merci encore.
0
christie49 Messages postés 16 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 7 novembre 2011
18 oct. 2009 à 05:06
Lors de mes essais j'ai constaté que si l'on envoie une image trop lourd > 1 Mo il arrive que l'on ai la page "Internet explorer ne peux pas afficher cette page"

J'ai l'intuition que pour certain serveur pas pro, genre Free, quand on clic sur "envoi" en postant la page vers le serveur et en lui demandant de calculer tout ca, celui ci compte le nombre de secondes écoulées entre le moment ou il recoit la demande puis doit charger le fichier puis doit calculer via notre PHP quelle page HTML il doit renvoyer à l'utilisateur. Au bout de genre 10 secondes pour free, il trouve ca trop long et decide de renvoyer un message d'erreur et de s'occuper d'autres demandes que notre vulgaire programme PHP de debutante ou de debutant, nos naviguateurs que ce soit firefox ou IE renvois alors l'info comme quoi c'est rapé, impossible d'afficher la page.
On peut avoir la sensation frustrante d'une erreur aléatoire dans notre programme, mais non, c'est juste que certains serveur ont un service non compris dans le prix.

Donc n'hesitez pas a limiter l'envoi de la taille du fichier grace aux lignes
//vérifie la taille et le type de fichier
$taille_max = 1000000; // par exemple 1000ko 
if ($f1_size > $taille_max) 


Voici quelques lignes de code a rajouter à ma deuxieme solution pour petit pouce
Cela permet de redimentionner l'image recu à la taille que l'on desire.
Ce redimentionnage n'empêche pas les problemes que je viens d'evoquer.
L'idée du programme complet serait grace au premier test ci dessus de limiter l'envoi d'une image a max 1mo
puis grace aux lignes de codes suivante que je joins ci dessous, de redimentionner l'image precisement à la taille que l'on veux, par exemple 90 sur 100 pour un avatar.
Cela permet aux gens qui ne savent pas utiliser de logiciels de dessin pour reduire l'image de les assister un peu, bien sur, si leur image de depart est 25 MO, l'image ne sera sans doute meme pas telechargée par le serveur comme je disais.

Pour le code qui suit a coller a la 2em solution, il s'agit bien de "redimentionnage" (arg le francais ) et non de deformation et d'anamorphose (genre un format paysage miniaturisée et déformé en format portrait)car ca c'est nul, personne veut avoir sa figure passée sous un rouleau compresseur.

Je ne l'ai pas adapté a la solution n°1 pour bdd je vous laisse faire, je vais retourner a la conception de mon forum.

explication :
le programme regarde la largeur hauteur de l'image originale.
Si l'image est en dessous des limites de taille que vous avez fixé il ne fait rien
sinon
calcul le rapport hauteur/largeur
fixe arbitrairement la largeur finale à 90 pixels (la largeur maximale fixée par vous)
regarde si dans ce cas la hauteur finale tient dans les limites (100pixels fixé par vous)
sinon il fixe la hauteur finale a 100 et calcul avec le rapport la largeur finale
puis on sauve

ce bout de code se colle juste apres l'enregistrement de l'image dans ma solution n°2 (vers ligne 56)

$infos .= "ok fichier enregistré 
";
// --------------------------
// partie 'Redimentionnage' 
// --------------------------
// limitation de largeur et hauteur par exemple avatar pour un forum
$largeur_max = 90;
$hauteur_max = 100;
// L'image est la source, on selectionne selon format
if (($ext "jpg") or ($ext "jepg"))
{
$source = imagecreatefromjpeg($name);
}
if ($ext == "gif") 
{
$source = imagecreatefromgif($name);
}
if ($ext == "png") 
{
$source = imagecreatefrompng($name);
}


// Prend la largeur et la hauteur de l'image originale
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);

//garde l'image en proportion et lui impose les limites max si elle depasse
$rapport = $hauteur_source / $largeur_source;

$largeur_finale = $largeur_source;
$hauteur_finale = $hauteur_source;

if (($largeur_finale > $largeur_max) or ($hauteur_finale > $hauteur_max))
{
$largeur_finale = $largeur_max;
$hauteur_finale = $largeur_finale * $rapport;

if ($hauteur_finale > $hauteur_max)
{
$hauteur_finale = $hauteur_max;
$largeur_finale = $hauteur_max / $rapport;
}
}
// création de l'image redimentionnée vide
$destination = imagecreatetruecolor($largeur_finale, $hauteur_finale); 

// creation de l'image redimentionnée
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_finale, $hauteur_finale, $largeur_source, $hauteur_source);

//enregistre la redimentionnée à la place de l'autre selon format

if (($ext "jpg") or ($ext "jepg"))
{
imagejpeg($destination, $name);
}
if ($ext == "gif") 
{
imagegif($destination, $name);
}
if ($ext == "png") 
{
imagepng($destination, $name);
}	
0
christie49 Messages postés 16 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 7 novembre 2011
18 oct. 2009 à 05:11
nota pour le forum

il est tres regretable de ne pouvoir editer ses messages, c'est le minimum pour le confort

enlever les fautes corriger les erreurs de code, rendre plus comprehensible ce qui a été mal dit

enfin, moi mon forum on pourra editer
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
18 oct. 2009 à 05:32
La remarque comme quoi on ne peut pas éditer revient régulièrement... Tout le monde en souffre, tout le monde le sait... Mais si ce n'est pas possible, c'est probablement qu'il y a une raison (qui nous échappe à nous simples mortels mais que l'admin du site doit considérer comme valable)

Sinon, effectivement, il y a certains paramètres de la configuration qui peuvent bloquer :
- max_execution_time : le temps maximal d'execution d'un script (20 sec chez Free)
- max_input_time : le temps maximum d'envoi d'un fichier (ou plus généralement de données) (60 sec chez Free)
- post_max_size : la taille maximale des données envoyées en POST (3Mo chez Free)
- upload_max_filesize : la taille maximale d'upload d'un fichier (2Mo chez Free)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
christie49 Messages postés 16 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 7 novembre 2011
18 oct. 2009 à 06:11
Merci Neige pour ces infos au moins les utilisateurs de free auront pas mal de renseignement sur Free et ses mystères.

j'imagine qu'ils peuvent avoir la liste complete en glissant l'instruction : phpinfo(); dans n'importe quel programme PHP.

Sinon, je crois que je viens de realiser que le 1er test sur les programmes que j'ai proposé qui limite la taille a par exemple 1 MO ne vont pas empecher un message d'erreur du serveur si on envoi un fichier de 25 MO
En effet, pour savoir combien fait le fichier, le serveur doit d'abord charger le fichier image, puis executer notre ligne de code qui regarde la taille. Mais si le time out de chargement est dépassé, le serveur ne prendra meme pas la peine de lire notre programme
Ils sont mal poli ces serveurs.
Jadis les serveur était en costume avec un noeud papillon.

Nota sur l'edition des messages de ce forum :
c'est nous qui faisons que le forum existe, si ce forum nous plait pas on va ailleurs, c'est aux administrateurs de s'adapter a notre demande, pas le contraire.
On est en train d'oublier cela pour pas mal de choses dans notre société.
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
18 oct. 2009 à 06:24
LOL Maintenant certains serveurs sont en jean basket... C'est aussi ça le low-cost...

Oui, voilà, c'est bien ça, pour tout...

Concernant l'édition des messages, je suis d'accord avec toi, sauf que... je ne sais pas exactement quelle raison motive l'admin à ne pas l'autoriser. Ca peut aussi bien être philosophique que technique, ou légal, ou juste pratique, j'en sais fichtre rien... Je me garde donc bien de porter quelque jugement que ce soit là dessus, par contre, je ne cesserai de déplorer l'impossibilité d'éditer... Pour ce qui est d'aller voir ailleurs... Oui, chacun peut le faire... Pour ma part, je suis bien ici, j'aime bien comme ça se passe même si ça pourrait être mieux concernant l'environnement technique (le forum qui n'est pas adapté à des discussions de fond persistantes par exemple, ou ce problème d'édition). On fait avec quoi...

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
Rejoignez-nous