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 :

[error] depassement de memoire non compris


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Points : 48
    Points
    48
    Par défaut [error] depassement de memoire non compris
    Bonjour,
    voici le message d'erreur :

    Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 10692 bytes) in /web/clients/c/cuistei2/vignette/mini_functions.php on line 124

    ma memory_limit est de 8M.
    il me semble que 10692 bytes semblent saturer 8M de bytes. je ne comprends pas trop.
    ce script marchait en local avec easyphp. cette erreur apparait sur mon site en ligne.

    ligne 124, voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $imageBase = imagecreatefromjpeg($path);
    je créé des vignettes avec ce script.

    Merci pour l'aide.

  2. #2
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par guns17
    il me semble que 10692 bytes semblent saturer 8M de bytes. je ne comprends pas trop.
    Ca ne résoud pas ton problème de fond, mais les 10692 c'est juste "la goutte de trop", la première demande d'allocation mémoire à être refusée.

  3. #3
    NoT
    NoT est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Points : 280
    Points
    280
    Par défaut
    Salut,

    Quelle taille faisait l'image que tu as essayer de redimensionner avec ce script ?
    Les 10692 bytes qui font saturer la mémoire est la dernière opération que le script a tenté de faire avant saturation , pas la taille totale utilisée par ton script.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    salut,
    desole internet ne fonctionnait plus hier.
    ok, je viens de comprendre le message d'erreur.
    l'image à recadrer fait 474ko.
    mon image recadrée fera 200x200.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    je me suis fait un script allégé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    ini_set("display_errors",1);
    // Ajout au nom des vignettes
    define("TYPE_IMG", "_small");
    $fichierSource = "mon_image.jpg";
     
    $source = ImageCreateFromJpeg($fichierSource);
     
    $largeurSource = imagesx($source);
    $hauteurSource = imagesy($source);
     
    $hauteurDestination = 200;
    $coeff = $hauteurSource / $hauteurDestination;
     
    $largeurDestination = round($largeurSource / $coeff, 0);
     
    echo("hauteur : $hauteurDestination, largeur : $largeurDestination");
     
    $im = ImageCreateTrueColor($largeurDestination, $hauteurDestination) or die("Erreur lors de la création de l'image");
     
    ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);
    // ajout de _small au nom de la photo et affichage
    $photo = "$fichierSource";
    $array_name = explode(".",$photo);
    $miniature = $array_name[0].TYPE_IMG.".".$array_name[count($array_name)-1];
     
    ImageJpeg($im, $miniature);
    echo("miniature générée : $miniature");
    celui-ci fonctionne en local mais pas en ligne alors que la limitation memoire est la meme...

  6. #6
    NoT
    NoT est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Points : 280
    Points
    280
    Par défaut
    Bizzare en effet.

    Au delà du poids de ton image de départ, quelles sont ses dimensions ?
    On peut supposer que ImageCreateFromJPG recréé une image RAW brute, proche du bmp, à partir de ton JPG, et stock donc ça dans x * y * 4 octets ( pour du 32 bits ) avec x et y les dimensiosn de l'image.

    Ce qui pourrait provoquer ton dépassement mémoire, c'est vite arrivé.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    t'as raison, mon image est trop pixelisée.
    elle ne faisait que 474ko mais 2673x2003 pixels.

    j'ai reessayé en la mettant en 500 x 375 et ca passe.
    il ne reste plus qu'à trouver jusqu'à combien de pixels la miniature se créé pour pouvoir tester l'image avant de la traiter et l'interdire si necessaire.

    par contre je trouve que la qualité n'est vraiment pas géniale. y a-t-il un moyen de l'améliorer?
    Merci pour le coup de main.

  8. #8
    NoT
    NoT est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Points : 280
    Points
    280
    Par défaut
    Et bien théoriquement il faut que x * y soit inférieur à 2 000 000 pour être à peu près trankil.

    Pour ce qui est de la qualité je te renvoi à la doc officielle : http://fr.php.net/manual/fr/function.imagegd2.php

    Notament la fonction imageantialias

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    merci.
    bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bug non compris
    Par Alec6 dans le forum Hibernate
    Réponses: 2
    Dernier message: 05/02/2007, 10h48
  2. Current (bug ou principe non compris ?)
    Par DelphiManiac dans le forum Access
    Réponses: 7
    Dernier message: 10/10/2006, 15h55
  3. OutOfMemory error ,prob de memoire ?
    Par abd21 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 02/06/2006, 10h44
  4. On error goto Err : goto non exécutée au 2ème appel
    Par charliejo dans le forum Access
    Réponses: 1
    Dernier message: 11/04/2006, 16h00
  5. [TP] Runtime error 200 : programme TP5 non patchable
    Par HERON Daniel dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 02/11/2005, 22h53

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