IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Ressources mémoire lors de l'upload de photos


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 1
    Points
    1
    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 :
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    les 32M de memory_limit sont pour la taille des scripts par pour les uploads,
    c'est une autre variable upload_max_filesize.

  3. #3
    Membre averti Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Points : 342
    Points
    342
    Par défaut
    C'est le max_upload qui est à 2Mo.

  4. #4
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Bonjour,
    Peux tu mettre tout ton code qui crée les images ici ?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    C'est dans une boucle ou c'est tel quel ?

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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

  8. #8
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    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


    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.

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    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.

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. [Upload] chmod à 600 lors d'un Upload
    Par dimebagplan dans le forum Langage
    Réponses: 1
    Dernier message: 16/12/2008, 19h26
  2. [VWD 2005][Upload]Fichier corrompu lors de l'Upload
    Par DonkeyMaster dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 16/01/2007, 22h24
  3. [Upload] Erreur de mémoire lors d'un upload
    Par alpking dans le forum Langage
    Réponses: 3
    Dernier message: 10/11/2006, 10h35
  4. [Upload] Erreur 'Action annulée' lors d'un upload
    Par SegmentationFault dans le forum Langage
    Réponses: 8
    Dernier message: 31/07/2006, 15h12
  5. Reduire la taille d'une image lors de son upload
    Par mael94420 dans le forum ASP
    Réponses: 1
    Dernier message: 19/06/2006, 20h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo