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:
Dans ce script, il y a un appel de fonction:
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>"; } } } ?>
Voici la fonction en question:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 photoZoom($nomdef);
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:
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); } }
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.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
Merci d'avance
Partager