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

Bibliothèques et frameworks PHP Discussion :

[Images] Galerie photo (Fatal error: Allowed memory size)


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Par défaut [Images] Galerie photo (Fatal error: Allowed memory size)
    Bonjour les gens!
    Voilà, j'explique mon petit problème: je dois créer un site composé de plusieurs galeries. Chacune d'entre-elles est accessible via un menu. les images de chaque galerie sont stockées dans des dossiers portant le nom de cette dernière (le nom de la galerie quoi ). Pour afficher les images je n'ai qu'a lister le dossier voulu et écrire les liens en fonction du résultat.

    Jusque là, pas de problème. La ou ça coince, c'est au niveau de mon administration. Il faut prévoir la possibilité d'ajouter une galerie. J'arrive à créer le dossier (voici l'arborescence : magalerie -> thumb - photos). Ensuite, j'ai créé un petit formulaire d'upload. Voici le script qui traite l'envoi:

    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
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?php
     
      if(isset($_POST['send_btn'])) {
     
        $root = $_POST['gallery'];
        $repertoire = $root ."photos/";
        $extensions_ok = array('jpg','JPG','jpeg','JPEG');
        $nomorg = $_FILES['nomfich']['name'];
     
        if( !in_array( substr(strrchr($_FILES['nomfich']['name'], '.'), 1), $extensions_ok ) ) {
    	if($_FILES['nomfich']['name'] != "") { 
    		echo "<p>Format non attendu</p>"; 
    	}
        $echec = 1;
        } 
        if($echec != 1) {
    	$temp = $_FILES['nomfich']['tmp_name'];
    	$nomorg = strtr($nomorg,
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     
    	$nomorg = preg_replace('/([^.a-z0-9]+)/i', '_', $nomorg);
    	$nomdef = $repertoire .$nomorg;
     
    	if (!file_exists($nomdef)) {
    	  move_uploaded_file($temp, $nomdef);	
    	  photoZoom($nomdef);
    	  echo "<p>Photo envoyée</p>";
    	}
    	else if (file_exists($nomdef)){ 	
    	  echo "<p>La photo existe déjà</p>";
    	}
        }
    }
    ?>
    Dans ce script, il y a un appel de fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    photoZoom($nomdef);
    Voici la fonction en question:

    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
     
    function photoZoom($dir) {
     
      $im = imagecreatefromjpeg($dir);
      // Récupération des dimensions
      $ox = imagesx($im);
      $oy = imagesy($im);
     
      if ($ox != 500 || $oy != 500) {
        // Si paysage
        if ($oy<$ox) {
    	$nx = 500;
    	$ny = floor($oy * (500 / $ox));
        }
        else {
    	$ny = 500;
    	$nx = floor($ox * (500/ $oy));
        }
     
        // Création de l'image redimensionnée
        $nm = imagecreatetruecolor($nx, $ny);
        imagecopyresampled($nm, $im, 0, 0, 0, 0, $nx, $ny, $ox, $oy);
        imagejpeg($nm, $dir);
        imagedestroy ($im);
      }
     
    }
    Les images doivent être redimensionnées car la résolution de l'image source n'est pas adaptée au web. Tout cela fonctionne lors d'un premier envoi. Si j'efface manuellement la photo pour ensuite la renvoyer, ça fonctionne. Par contre si j'en envois une seconde image, j'ai ce message d'erreur:

    Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 9920 bytes) in C:\Program Files\wamp\www\test\admin\include\pic_functions.php on line 5
    Même si ça ne me semble pas être une excellente idée, j'ai fait un test en modifiant php.ini (memory_limit = 8M -> 16M), le problème reste le même. Je suis conscient que le code de la fonction n'est pas optimisé et en aurait bien besoin mais je ne vois pas comment procéder. C'est pourquoi je vous demande votre aide. J'espère vous lire bientôt et avoir été assez clair dans mes explications.

    Merci d'avance

  2. #2
    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 : 61
    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
    Par défaut
    Bonjour,

    c'est quoi la ligne 5 de pic_functions.php ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Par défaut
    Bonjour bonjour!
    Oui désolé j'aurais du le préciser, la ligne 5:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $im = imagecreatefromjpeg($dir);
    L'exécution du script est plutôt longue, j'ai également essayé "imagecopyresized" au lieu de "imagecopyresampled", le script s'exécute plus rapidement mais même problème lors d'un nouvel envoi et l'image perd en qualité.

    Voila et merci de vous intéresser si vite à mon cas .

  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 : 61
    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
    Par défaut
    Quelle est la taille des fichiers que tu envoies ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 21
    Par défaut
    Là je teste en local avec des fichiers dont la taille varie de presque rien à 1.5Mo. Tout ceci n'est pas pour moi et les photos qui seront envoyées seront tout aussi lourdes (voir plus). Une collection comprend +/- 25 photos de ce type donc là c'est la galère

  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 : 61
    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
    Par défaut
    Là, je ne comprends pas.
    Généralement l'erreur Max Memory survient dans le cas où ton script dépasse la taille mémoire allouée. ça arrive souvent lors de boucles assez longues.

    Toutes ces fonctions sont dans une boucle ?
    Tu traites un répertoire entier ou une image à la fois ?

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

Discussions similaires

  1. [Spip] Image sous Spip : Fatal error: Allowed memory size
    Par clio671 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 12/10/2010, 13h23
  2. [PEAR][Mail] Fatal Error : Allowed memory size of 8388608 bytes exhausted
    Par bigben89 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 20/10/2008, 18h01
  3. Réponses: 3
    Dernier message: 08/08/2007, 19h08
  4. [Librairies] zip.lib.php Fatal error: Allowed memory size of 8388608 bytes exhausted
    Par manaboko dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 22/05/2006, 10h42
  5. Fatal error: Allowed memory size of...
    Par Webfab dans le forum Langage
    Réponses: 3
    Dernier message: 17/09/2005, 10h11

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