Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2007, 23h00   #1
Invité de passage
 
Inscription : septembre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 4
Points : 0
Points : 0
Par défaut [Upload] Ressources mémoire lors de l'upload de photos

Bonjour,

J'ai un hébergement chez Net4all.ch qui mentionne dans le phpinfo 32M de memory_limit

Le problème c'est que lorsque j'envoie une photo de 2.5Mo par exemple, le script plante :
Citation:
Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 600 bytes) in /var/www/vhosts/www.mondomaine.com/web/upload.php on line 130
Est-ce que c'est normal par rapport à la limite de 32Mo ou est-ce qu'il y a quelque chose que je fais de mal dans mon script ?

Une partie de mon script :
Code :
1
2
3
4
5
6
if (in_array($_FILES["userfile"]["type"], array("image/jpeg", "image/pjpeg"))) {
$imagepath = "images_temp/pouet.jpg";
move_uploaded_file($_FILES['userfile']['tmp_name'],$imagepath);
chmod ($imagepath, 0644);
$image_source = imageCreateFromJpeg($imagepath);
$thumb_destination=ImageCreateTrueColor($new_thumb_width,$new_thumb_height) OR die("Pas pu faire ImageCreateTrueColor");
Le script plante en général sur une des 2 dernières lignes (imageCreateFromJpeg ou ImageCreateTrueColor)

Merci d'avance, je craque !

Nostromo
Nostromo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 23h18   #2
Membre émérite
 
Inscription : septembre 2007
Messages : 951
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 951
Points : 948
Points : 948
les 32M de memory_limit sont pour la taille des scripts par pour les uploads,
c'est une autre variable upload_max_filesize.
batataw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 23h19   #3
Membre éclairé
 
Avatar de nicocsgamer
 
Inscription : mars 2005
Messages : 324
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Luxembourg

Informations forums :
Inscription : mars 2005
Messages : 324
Points : 365
Points : 365
Envoyer un message via MSN à nicocsgamer
C'est le max_upload qui est à 2Mo.
nicocsgamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 23h44   #4
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Bonjour,
Peux tu mettre tout ton code qui crée les images ici ?
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2007, 00h36   #5
Invité de passage
 
Inscription : septembre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 4
Points : 0
Points : 0
Merci julp pour la mise en forme de mon message, la prochaine fois, promis je le fais

En fait si je regarde le phpinfo de mon hébergeur, j'ai :
upload_max_filesize = 24M
post_max_size = 32M
memory_limit = 24M

Voici mon script :
Code :
1
2
3
4
5
6
7
8
9
10
 
$imagepath = "images_temp/pouet.jpg";
move_uploaded_file($_FILES['userfile']['tmp_name'],$imagepath);
chmod ($imagepath, 0644);
$image_source = imageCreateFromJpeg($imagepath);
$thumb_destination=ImageCreateTrueColor($new_thumb_width,$new_thumb_height) OR die("Pas pu faire ImageCreateTrueColor");
imagecopyresampled($thumb_destination,$image_source,0,0,0,0,$new_thumb_width,$new_thumb_height,ImageSX($image_source),ImageSY($image_source));
Imagejpeg($thumb_destination, $_SERVER["DOCUMENT_ROOT"]."/albums/thumbs/".$picture_name);
imagedestroy($image_source);
imagedestroy($thumb_destination);
Actuellement ca plante sur la ligne qui comporte le ImageCreateTrueColor

Le but c'est que les membres de ma famille puissent envoyer des photos sur mon site, et il se peut qu'ils envoient des photos de 3Mo éventuellement car tous ne savent pas comment réduire la taille d'une photo.
Pensez-vous qu'il faut un serveur dédié juste pour ça ?

Merci,

Nostromo
Nostromo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2007, 00h50   #6
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
C'est dans une boucle ou c'est tel quel ?
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2007, 01h46   #7
Invité de passage
 
Inscription : septembre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 4
Points : 0
Points : 0
Citation:
Envoyé par N1bus Voir le message
C'est dans une boucle ou c'est tel quel ?
Non il y a juste un if devant...

A noter que cela fonctionne avec un fichier qui fait 2Mo environ, mais vers 2.5Mo ca plante.

Merci en tous cas pour tes propositions.
Quelqu'un d'autre a une idée ?

Nostro
Nostromo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2007, 01h53   #8
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
En fait si je regarde le phpinfo de mon hébergeur,
Vérifie quand même sur ton espace d'hébergement :

Crée un fichier infos.php et écris dedans
Code :
1
2
3
4
 
<?php
phpinfo();
?>
Place le à la racine de ton site et affiche la page puis vérifie
upload_max_filesize
post_max_size
memory_limit
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2007, 14h10   #9
Membre émérite
 
Inscription : septembre 2007
Messages : 951
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 951
Points : 948
Points : 948
En relisant ton premier post, je me suis rendu compte que je faisais fausse route, le probleme vient bien du memory limit, il faut savoir que la fonction
imagecreatefromjpeg utilise énormement de memoire.

Exemple pour une image a 2,5 millions de pixels:

2500 x 1000 x 3 = 7500000, tu es deja a 7500000 octets sans avoir appliqué
encore le Overhead fudge factor


Citation:
The memory required to load an image using imagecreatefromjpeg() is a function
of the image's dimensions and the images's bit depth, multipled by an overhead.
It can calculated from this formula:
Num bytes = Width * Height * Bytes per pixel * Overhead fudge factor
Where Bytes per pixel = Bit depth/8, or Bits per channel * Num channels / 8.
This script calculates the Overhead fudge factor by loading images of
various sizes.
batataw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 00h25   #10
Invité de passage
 
Inscription : septembre 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 4
Points : 0
Points : 0
Citation:
Envoyé par batataw Voir le message
En relisant ton premier post, je me suis rendu compte que je faisais fausse route, le probleme vient bien du memory limit, il faut savoir que la fonction
imagecreatefromjpeg utilise énormement de memoire.

Exemple pour une image a 2,5 millions de pixels:

2500 x 1000 x 3 = 7500000, tu es deja a 7500000 octets sans avoir appliqué
encore le Overhead fudge factor
Merci pour ton message.
Quand j'envoie une image de 2.5Mo (c'est pareil que 2.5 millions de pixels ou pas ?), j'obtiens le message suivant :
Code :
1
2
 
Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 525 bytes) in /var/www/vhosts/www.famillemagique.com/web/process.php on line 205
Est-ce normal qu'une image de 2.5Mo ait besoin de 10 fois sa mémoire côté serveur ?

Merci,

Nostromo
Nostromo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 15h48   #11
Membre émérite
 
Inscription : septembre 2007
Messages : 951
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 951
Points : 948
Points : 948
oui c'est pareil 2.5Mo = 2 500 000

Le besoin de mémoire coté serveur est lié a ce que tu veux faire. Il faut savoir que le traitement numérique d'images est un gros consomateur de mémoire vive.
Un document Word ou Excel n'occupe pas la meme place qu'une image sous Photoshop.

A mon avis essaye de trouver une autre librairie, un truc optimisé pour traiter
des gros fichiers.
batataw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2007, 17h52   #12
Invité de passage
 
Inscription : octobre 2007
Messages : 1
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : octobre 2007
Messages : 1
Points : 1
Points : 1
Envoyer un message via MSN à psyohm
Bonjour,

Citation:
Envoyé par batataw Voir le message
oui c'est pareil 2.5Mo = 2 500 000
Non, 2.5MP c'est pas pareil que 2.5MO.

Tout dépends de la résolution de ton image, car lorsque tu crées une image avec la fonction imagecreatefromjpeg(), il va recréer une image en fonction l'originale mais sans compression.

Pour ma part j'ai le même problème chez Free. je dispose d'un memory_limit de 32 MO.

J'ai effectué quelques tests sur une photo de résolution 3072*2304 d'un poids de 5.11 MO
> Le traitement me renvoi l'erreur
Code :
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 12288 bytes)
Ce qui veut dire que la fonction à crée une image de 33.5MO donc bien supérieure aux 32Mo du memory_limit


J'ai redimmensionner celle-ci pour une résolution de 2800*2100 avec un poids de 5.74 MO
> Le traitement fonctionne

Puis, j'ai laisser la résolution en 3072*2304 en baissant la qualité pour obtenir un JPG d'un poid de 660 KO
>Le traitement echoue...

Donc pour régler ton problème, il faut soit modifier la résolution de tes images pour te situer juste en dessous du memory_limit soit demander à ton hébergeur d'augmenter la taille du memory_limit.

Voilà, j'espère que ça t'aideras.

Psyohm
psyohm est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h16.


 
 
 
 
Partenaires

Hébergement Web