Page 1 sur 4

probleme d'upload vraiment bizarre

Posté : 13 août 2007, 11:52
par bazura1
Voila

j'ai touvé un script d'upload , mon but est de creer une miniature et de redimensionner aussi l'image pour eviter qu'elle apparaisse trop grande en 400 px. je suis hebergé sur le serveur 1&1
Mon soucis est :en jpg l'upload ne s'effectu pas des lors la photo depasse 1280 px avec des echo j'ai pu remarquer que cela bloqué a la ligne
$fichier_source = imagecreatefromjpeg($fichier_dossier1.$fichier_n_nom);// definition de l'image dont on va faire une miniature
par contre en local je peux aller a des resolution plus grande
est ce un pb de time out?
<?php	
	//////////////////////////////////////////////////////////////////////////////////////// IMAGE ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////		
$fichier_temp = $_FILES['fichier']['tmp_name'];
$fichier_nom = $_FILES['fichier']['name'];

list($fichier_larg, $fichier_haut, $fichier_type, $fichier_attr)=getimagesize($fichier_temp);// on défini les dimensions et le type du fichier
$fichier_poids_max = 2000000;// infos de contrôle du fichier
$fichier_h_max = 3000;
$fichier_l_max = 3000;
$fichier_dossier = 'mesminia/';// dossier de destination
$fichier_dossier1 = 'mesfichiers/';
$fichier_ext = substr($fichier_nom,strrpos( $fichier_nom, '.')+1);// extension du fichier
$fichier_date = date("dmyis");// on renomme le fichier
$ville=$_POST["ville"];
$fichier_n_nom = $cla.$ville.$fichier_date;
		if (!empty($fichier_temp) && is_uploaded_file($fichier_temp)) {// on vérifie s'il y a bien un fichier à uploader
		
			if (filesize($fichier_temp)<$fichier_poids_max) {// on vérifie le poids du fichier
				if (($fichier_type===1) || ($fichier_type===2) || ($fichier_type===3)) {// types de fichiers autorises 1=gif / 2=jpg / 3=png
				if (($fichier_larg<=$fichier_l_max) && ($fichier_haut<=$fichier_h_max)) {// on vérifie si l'image n'est pas trop grande
						if (move_uploaded_file($fichier_temp, $fichier_dossier1.$fichier_n_nom)) {// si le fichier est ok, on l'upload sur le serveur
							chmod ($fichier_dossier1.$fichier_n_nom, 0777);// on donne un acces total sur le fichier
								
								/*///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
								création de la miniature///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
								*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
								
								$taille_max = 80;// dimension maximale largeur et hauteur comprise
								if (($fichier_larg > $taille_max) || ($fichier_haut > $taille_max)) {// si le fichier est plus grand que $taille_max on le miniaturise
									if (($fichier_haut > $taille_max) && ($fichier_haut >> $fichier_larg)) {// définition des dimensions 
									$mini_haut = 80;
									$mini_larg = 100;
									}
									else {
									$mini_haut = $taille_max;
									$mini_larg = 100;
									}
	////////////////////////////////////////////////////////////////////////////////////////////////////							// si le fichier est un .gif
									if ($fichier_type === 1){
									$fichier_source = imagecreatefromgif($fichier_dossier1.$fichier_n_nom);// definition de l'image dont on va faire une miniature
									$fichier_reduit = imagecreate($mini_larg, $mini_haut);// on prépare le fichier miniature qui accueillera l'image réduite
									$fond_blanc = imagecolorallocate($fichier_reduit, 255, 255, 255);// fond blanc pour l'image
									$fichier_larg_red = imagesx($fichier_reduit);// dimensions x et y à donner au fichier
									$fichier_haut_red = imagesy($fichier_reduit);
									$nom_fichier_reduit1 = 'mini_'.$fichier_n_nom;// on rajoute un mini_ defant le nom du fichier
									// on redimensionne l'image de base dans le fichier $fichier_reduit
									imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
									imagecolortransparent($fichier_reduit, $fond_blanc);// on rend transparent le fond blanc
									imagegif($fichier_reduit, $fichier_dossier.$nom_fichier_reduit1);// crée le fichier réduit définitif
									chmod($fichier_dossier.$nom_fichier_reduit1, 0777);// on donne un acces total sur le fichier
									}
	////////////////////////////////////////////////////////////////////////////////////									/ si le fichier est un .jpg / .jpeg
									if ($fichier_type===2){
									$qualite=80;// définition de la qualité
									$fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut);// on prépare le fichier miniature qui accueillera l'image réduite	
									$fichier_larg_red = imagesx($fichier_reduit);// dimensions x et y à donner au fichier
									$fichier_haut_red = imagesy($fichier_reduit);
									
									$fichier_source = imagecreatefromjpeg($fichier_dossier1.$fichier_n_nom);// definition de l'image dont on va faire une miniature
									
									
									$nom_fichier_reduit1 = 'mini_'.$fichier_n_nom;// on rajoute un mini_ defant le nom du fichier
									// on redimensionne l'image de base dans le fichier $fichier_reduit
									imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
									imagejpeg($fichier_reduit, $fichier_dossier.$nom_fichier_reduit1, $qualite);// crée le fichier réduit définitif
									chmod($fichier_dossier.$nom_fichier_reduit1, 0777);// on donne un acces total sur le fichier
									}
	///////////////////////////////////////////////////////////////////////////////////									///////////// si le fichier est un .png
									if ($fichier_type===3){
									$fichier_source = imagecreatefrompng($fichier_dossier1.$fichier_n_nom);// definition de l'image dont on va faire une miniature
									$fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut);// on prépare le fichier miniature qui accueillera l'image réduite
									$fichier_larg_red = imagesx($fichier_reduit);// dimensions x et y à donner au fichier
									$fichier_haut_red = imagesy($fichier_reduit);
									$nom_fichier_reduit1 = 'mini_'.$fichier_n_nom;// on rajoute un mini_ defant le nom du fichier
									// on redimensionne l'image de base dans le fichier $fichier_reduit
									imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
									imagepng($fichier_reduit, $fichier_dossier.$nom_fichier_reduit1);// crée le fichier réduit définitif
									chmod($fichier_dossier.$nom_fichier_reduit1, 0777);// on donne un acces total sur le fichier
									}
								}
								else {
								$nom_fichier_reduit1 = $fichier_n_nom;// si le fichier est plus petit que $taille_max pas besoin de le miniaturiser
								}
								
								/*///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
								création de la normal///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
								*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
								$taille_max = 400;// dimension maximale largeur et hauteur comprise
								if (($fichier_larg > $taille_max) || ($fichier_haut > $taille_max)) {// si le fichier est plus grand que $taille_max on le miniaturise
									if (($fichier_haut > $taille_max) && ($fichier_haut >> $fichier_larg)) {// définition des dimensions 
									$mini_haut = $fichier_haut / ($fichier_larg / $taille_max);
									$mini_larg = $taille_max;
									}
									else {
									$mini_haut = $taille_max;
									$mini_larg = $fichier_larg / ($fichier_haut / $taille_max);
									}
	////////////////////////////////////////////////////////////////////////////////////////////////////							// si le fichier est un .gif
									if ($fichier_type === 1){
									$fichier_source = imagecreatefromgif($fichier_dossier1.$fichier_n_nom);// definition de l'image dont on va faire une miniature
									$fichier_reduit = imagecreate($mini_larg, $mini_haut);// on prépare le fichier miniature qui accueillera l'image réduite
									$fond_blanc = imagecolorallocate($fichier_reduit, 255, 255, 255);// fond blanc pour l'image
									$fichier_larg_red = imagesx($fichier_reduit);// dimensions x et y à donner au fichier
									$fichier_haut_red = imagesy($fichier_reduit);
									$nom_fichier_reduit = 'norm_'.$fichier_n_nom;// on rajoute un mini_ defant le nom du fichier
									// on redimensionne l'image de base dans le fichier $fichier_reduit
									imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
									imagecolortransparent($fichier_reduit, $fond_blanc);// on rend transparent le fond blanc
									imagegif($fichier_reduit, $fichier_dossier1.$nom_fichier_reduit);// crée le fichier réduit définitif
									chmod($fichier_dossier1.$nom_fichier_reduit, 0777);// on donne un acces total sur le fichier
									}
	////////////////////////////////////////////////////////////////////////////////////									/ si le fichier est un .jpg / .jpeg
									if ($fichier_type===2){
									$qualite=80;// définition de la qualité
									$fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut);// on prépare le fichier miniature qui accueillera l'image réduite	
									$fichier_larg_red = imagesx($fichier_reduit);// dimensions x et y à donner au fichier
									$fichier_haut_red = imagesy($fichier_reduit);
									
									$fichier_source = imagecreatefromjpeg($fichier_dossier1.$fichier_n_nom);// definition de l'image dont on va faire une miniature
									
									$nom_fichier_reduit = 'norm_'.$fichier_n_nom;// on rajoute un mini_ defant le nom du fichier
									// on redimensionne l'image de base dans le fichier $fichier_reduit
									imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
									imagejpeg($fichier_reduit, $fichier_dossier1.$nom_fichier_reduit, $qualite);// crée le fichier réduit définitif
									chmod($fichier_dossier1.$nom_fichier_reduit, 0777);// on donne un acces total sur le fichier
									}
	///////////////////////////////////////////////////////////////////////////////////									///////////// si le fichier est un .png
									if ($fichier_type===3){
									$fichier_source = imagecreatefrompng($fichier_dossier1.$fichier_n_nom);// definition de l'image dont on va faire une miniature
									$fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut);// on prépare le fichier miniature qui accueillera l'image réduite
									$fichier_larg_red = imagesx($fichier_reduit);// dimensions x et y à donner au fichier
									$fichier_haut_red = imagesy($fichier_reduit);
									$nom_fichier_reduit = 'norm_'.$fichier_n_nom;// on rajoute un mini_ defant le nom du fichier
									// on redimensionne l'image de base dans le fichier $fichier_reduit
									imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
									imagepng($fichier_reduit, $fichier_dossier1.$nom_fichier_reduit);// crée le fichier réduit définitif
									chmod($fichier_dossier1.$nom_fichier_reduit, 0777);// on donne un acces total sur le fichier
									}
								unlink ($fichier_dossier1.$fichier_n_nom);
									}
								else {
								$nom_fichier_reduit = $fichier_n_nom;// si le fichier est plus petit que $taille_max pas besoin de le miniaturiser
								}
								
																
								
								
								
								
								
									
								
						}
						// erreur
						else {?>
							<table border="0" cellpadding="0" cellspacing="0" width="870" height="100" id="table1"align="center">
							<tr><td><?echo "Le fichier n'a pas pu être uploadé<br />"; ?></td></tr>
							</table>
							<table border="0" cellpadding="0" cellspacing="0" width="870" height="100" id="table1"align="center">
							<tr><td><a href="deposerannonce.php">Retour</a></td></tr></table><?
							include("bas.php");
							exit;
							}
					}
					// erreur
					else {?>
							<table border="0" cellpadding="0" cellspacing="0" width="870" height="100" id="table1"align="center">
							<tr><td><?echo "Le fichier est trop grand<br />";?></td></tr>
							<tr><td><?echo "La résolution maximum hauteur ou largeur doit être de 1280 pixels<br />";?></td></tr>
							<tr><td><?echo "Veuillez redimmensionner votre image, merci<br />";?></td></tr>
							</table>
							<table border="0" cellpadding="0" cellspacing="0" width="870" height="100" id="table1"align="center">
							<tr><td><a href="deposerannonce.php">Retour</a></td></tr></table><?
							include("bas.php");
							exit;
						}
			
				}
				// erreur
				else {?>
							<table border="0" cellpadding="0" cellspacing="0" width="870" height="100" id="table1"align="center">
							<tr><td><?echo "Le fichier  n'a pas le bon format<br />"; ?></td></tr>
							</table>
							<table border="0" cellpadding="0" cellspacing="0" width="870" height="100" id="table1"align="center">
							<tr><td><a href="deposerannonce.php">Retour</a></td></tr></table>
							<?
							include("bas.php");
							exit;
					}
	
			}
			// erreur
			else {?>
							<table border="0" cellpadding="0" cellspacing="0" width="870" height="100" id="table1"align="center">
							<tr><td><?echo "Le fichier est trop lourd<br />"; ?></td></tr>
							</table>
							<table border="0" cellpadding="0" cellspacing="0" width="870" height="100" id="table1"align="center">
							<tr><td><a href="deposerannonce.php">Retour</a></td></tr></table>
							<?
							include("bas.php");
							exit;
					}?>

Re: probleme d'upload vraiment bizarre

Posté : 13 août 2007, 11:59
par Ryle
est ce un pb de time out?
Utilise la fonction set_time_limit() pour modifier le délai d'exécution des scripts... si cela fonctionne c'est un problème de timeout et tu l'auras résolu, si ça ne fonctionne toujours pas, c'est que le problème vient d'ailleurs....

Posté : 13 août 2007, 22:11
par Invité
tu la placerai ou exactement la fonction

Posté : 13 août 2007, 22:21
par bazura1
bon j'ai tenté et sans succes

up

Posté : 13 août 2007, 22:35
par bazura1
au pire si qq un a un script avec les memes options et qui marche a merveile c le bien venu

Posté : 13 août 2007, 22:41
par Calimero
Ca peut venir aussi d'un manque de mémoire pour ton script (le travail sur des images est assez gourmand). essaye un
error_reporting(E_ALL);
en début de script pour voir les éventuels messages d'erreur.

Posté : 14 août 2007, 08:27
par bazura1
je viens de teste et comme dab au bout 1 mn il m'affiche une page blanche et sans erreur

le fichier a bien ete upload mais cela bloq tjs au meme endroit

Posté : 14 août 2007, 14:43
par Sékiltoyai
Essaye avec des petits fichiers pour tester.

Posté : 14 août 2007, 22:07
par bazura1
avec des petits fichiers ca marche mais des lors je depasse 1280 px ca foire pour les minia
et la ca me fait une image noir et au dessus 1500 plus rien

Posté : 15 août 2007, 00:18
par Sékiltoyai
Donne les poids des fichiers. Si ca dépasse les 2Mo, c'est impossible de les uploader par http, c'est une limitation du serveur Apache et de la configuration PHP.

Posté : 15 août 2007, 08:06
par bazura1
nop max essayé c 1,7 mo

et une tof en 2000x2000 environ pese 1,2mo

par contre la 2 eme miniaturisation en 400px peut aller plus haut en resolution elle ne bloq pas a 1280px comme la 1er miniaturisation

Posté : 15 août 2007, 08:29
par bazura1
j'ai enlever le systeme de miniature et laisser que celui syteme miniature a 400 px

et en mettant tof de 2000px

voila message + photo noir

Code : Tout sélectionner

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /homepages/37/d212658822/htdocs/dep3.php on line 2143 Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'mesfichiers/chamb312150807' is not a valid JPEG file in /homepages/37/d212658822/htdocs/dep3.php on line 2143 Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /homepages/37/d212658822/htdocs/dep3.php on line 2149

Posté : 17 août 2007, 22:09
par AB
Voici un script de redimensionement qui fonctionne (il faut que l'image soit sur le serveur dans le répertoire PHOTO et que le répertoire PHOTO_min existe)
<?php
//script de redimensionnement pour une image jpg se trouvant sur le serveur à l'adresse suivante
$adres = 'PHOTO/maphoto.jpg';

$source = imagecreatefromjpeg("$adres"); 

// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur de l'image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);

//redimensionnement à une largeur de 400px
$rap = $hauteur_source/$largeur_source; $largeur = '400'; $hauteur = round($largeur * $rap);
$destination = imagecreatetruecolor($largeur, $hauteur);

$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);

// On crée la miniature
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);

// On enregistre la miniature sous le nom "mini_couchersoleil.jpg"
imagejpeg($destination, 'PHOTO_min/maphoto.jpg',100);
?>
Tu pourrais faire l'essai avec ce script simple, cela te permettrait peut-être de trouver l'origine de ton pb plus facilement.

Important: Attention avec la taille des fichiers uploadés. Bien que l'upload soit réglé à 2 Mo (maintenant c'est plutôt 8 mo) par défaut, certains serveurs rencontrent des pb à partir de 1.5 Mo voire moins même si phpinfo indique un maxupload size de 2Mo. J'ai ce pb avec l'hébergeur online.net.

Alors que chez un autre hébergeur j'ai la possibilité d'uploader des fichiers de plusieurs dizaines de Mo : j'ai testé avec succès des fichiers de 50Mo car on peut définir set_time_limit(0) en début de script et php_value upload_max_filesize et php_value post_max_size dans le fichier .htacces

Posté : 17 août 2007, 22:49
par Sékiltoyai
De toute façon, il faut se dire que le protocole HTTP n'est pas fiable pour ce genre de choses, il n'est pas du tout adpaté.

Posté : 18 août 2007, 12:14
par guiµ8676
Bonjour a tous

J'ai le meme probleme que bazura1

Comment faire pour connaitre la valeur de set_time_limit?

Merci d'avance Guillaume