Page 1 sur 1

Problème d'UP d'image

Posté : 18 sept. 2008, 14:25
par lenouvdu44
Bonjour à tous,

J'ai un problème (si si, c'est vrai), le voici :
Sur une page, j'envoie une image. Dès qu'elle dépasse les 600ko (proximo), j'ai un problème pour la récupérer.
Non pas que le temps d'up est trop long, j'ai tout vérifier, c'est au moment du 'imagecreatefromjpg()' que le script plante, il ne donne strictement plus rien et n'affiche pas la suite de la page.

J'ai pu isoler cela en insérant des 'print_r $_FILES["fichier"]' et cela fonctionne juste avant l'imagecreate (du moins il insère tout ce que je veux) et après ... il n'affiche rien.
Grâce à cela on sait aussi que cela ne vient pas de l'up, mais bien après.

J'ai testé directement un imagecopy(), qui ne fonctionne pas non plus.

Avec des images de moins de 600Ko, aucun problème, le reste de mon script se lance correctement ...

Niveau code, voici mon formulaire :
<form method="post" action="index.php" enctype="multipart/form-data" >
Parcourez votre disque dur et choississez votre fichier image que vous souhaitez transférer.<br />
Attention, la taille maximale autorisée est de <?php echo ($poids_max/1024); ?> Ko (Pour toute taille supérieur, <a href='index.php?page=contact'>Contactez-nous</a>).<br />
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $poids_max;?>" />

<input type="file" name="fichier" size="30"><br /><br />
Cliquez sur le bouton suivant pour envoyer votre image.<br />
<input type="submit" name="upload" onclick="showWait('Patientez svp - sauvegarde de votre image <br /> Cela peut prendre quelques minutes');" />
</form>
Le traitement derrière (je préviens, je ne vous mets pas la vérification du type et du poids)
// Récupération de l'image envoyée via le formulaire
$img = imagecreatefromjpeg($_FILES['fichier']['tmp_name']);
$nom_fichier = time().'.jpg';
			
// Récupère les dimensions
$size = getimagesize($_FILES['fichier']['tmp_name']);
$larg = $size[0];
$long = $size[1];
$coeff = $larg/$width;
$larg = $larg/$coeff;
$long = $long/$coeff;
			
$img_dest = imagecreatetruecolor($larg, $long);
			
$copy = imagecopyresampled($img_dest, $img, 0, 0, 0, 0, $larg, $long, $size[0], $size[1]);
			
imagejpeg($img_dest, $repertoire.'min/'.$nom_fichier);
imagejpeg($img, $repertoire.$nom_fichier);
			
imagedestroy($img_dest);
			
$url = $repertoire.''.$nom_fichier.'';
$picurl = $repertoire . $nom_fichier;
$picurlMin = $repertoire.'min/'.$nom_fichier;
Merci pour votre aide ;)

Posté : 18 sept. 2008, 15:35
par JeanJaybee
Bonjour,

Déjà, petite suggestion, ajoute une petite valeur aléatoire au nom de ton fichier, si deux personnes envoient un fichier en même temps, ton script risque trop de planter.

Je pense qu'il s'agit d'une histoire de mémoire limite pour l'exécution d'un script :
cf : http://fr.php.net/manual/fr/function.im ... .php#76968

En gros, il faut temporairement augmenter la mémoire qu'alloue PHP au script pour qu'il puisse générer ton image tranquillement.

Posté : 18 sept. 2008, 15:58
par lenouvdu44
Re-

Merci pour l'avertissement, c'était déjà fait ;) (je n'ai pas mis cette tite partie)

J'ai essayé en rajoutant un
header("Content-Type: image/jpeg");
ini_set('memory_limit', '50M');
mais cela n'a pas fonctionné. Il se peut que je l'utilise mal :/ ; je l'ai rajouté juste avant le imgcreatefromjpg ... sachant qu'après cela n'aurait servit à rien vu que l'exécution s'arrête juste avant.

Pour information, j'ai réussi à copier l'image envoyée des temporaires à son dossier de destination.

Le problème Ne vient pas du poids mais de la TAILLE : j'ai testé des jpg de 1600*1200 qui passe (550ko) et des jpg de 1600*1200 qui passe alors qu'elles pèsent 1.5Mo. Par contre, dès que cela dépasse les 2Mpx ...

Ma question, maintenant que mon image est sur mon serv, puis-je en créer une miniature sans utiliser de imagecreatefromjpg ?
J'arrive à l'ouvrir et à l'afficher (en binaire) via la fonction fopen, est-ce qu'elle serait adaptée pour le redimensionnement ?

Posté : 21 sept. 2008, 13:59
par lenouvdu44
Un petit UP :/

Posté : 21 sept. 2008, 19:18
par albat
Modération :
lenouvdu44, les "up" sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Merci de prendre le temps de lire les règlements.

Posté : 21 sept. 2008, 19:19
par albat
Modération :
lenouvdu44, le multipostage est interdit sur le forum.

Ce sujet a été verrouillé et sera supprimé sous peu.
Des réponses peuvent être apportées à cette adresse :
http://www.phpfrance.com/forums/voir_sujet-243038.php

Merci de prendre le temps de lire les règlements.