Pour celà j'ai une fonctionne qui scanne un répertoire, liste les fichiers JPG, puis fait une boucle et les redimentionne à la lumière de ce que j'ai appris dans le tuto php.
Mon problème est dur à cibler, je m'explique.
Dans un répertoire contenant des photos ne pesant pas bien lourd (1Mo chacune environ), aucun souci ça fonctionne impeccablement
Dans un autre répertoire contenant de très grosses photos JPG (entre 8 et 18Mo pour les plus grosses), le script fonctionne mais s'arrête de façon brutale et sans erreur (au bout d'une vingtaine d'images)
J'ai pensé à un problème d'allocation mémoire bien que je n'ai pas d'erreur, mais :
c'est un NAS, donc j'ai accès au PHP.ini et j'ai augmenté la mémoire allouée à 256Mo, j'ai augmenté tous les timout à 300 ou 600 -----> mêmes symptomes
j'observe que les miniatures correctement créés ne sont pas les X premiers (ordre aléatoire pour lequel je n'arrive pas à trouver de logique)
si je vide mon dossier pour ne garder que l'image la plus grosse, celle ci ne pose aucun souci
J'utilise imagedestroy sur la source comme la destination...
J'ai parcouru google dans BEAUCOUP de sens, je n'ai pour le moment rien trouvé qui m'aide....
Des idées? Voilà le bout de code en question
if($rep = opendir($chemin)) // le if au cas où on s'est planté de répertoire pour afficher erreur au lieu de planter
{
while(false !==($fichier = readdir($rep))) // tant que $fichier renvoie une valeur
{
$extension = strrchr($fichier,'.'); // ça nous renvoie .jpg
$extension = substr($extension,1); // on vire le point pour n'avoir que jpg
if($extension == "jpg" || $extension == "JPG") // n'affiche que les jpg
{
// Redimensionner une image avec GD : à priori ça bug à cause de la mémoire?
$source = imagecreatefromjpeg("$chemin/$fichier"); // La photo est la source
$destination = imagecreatetruecolor($xminia, $yminia); // On crée la miniature vide
// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);
// On crée la miniature
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
//on libère la mémoire de l'image d'origine
imagedestroy($source);
//on indique le chemin pour la miniature
$chemindest = $chemin . '/mini/mini_' . $fichier;
// On enregistre la miniature sous le nom "$mini_fichier.jpg");
imagejpeg($destination, $chemindest);
$i++;
// on libère la mémoire de la photo qui a été enregistré sur le disque
imagedestroy($destination);
//confimation de création image par image
echo '<br />Miniature ' . $chemindest . ' correctement créé<br />';
}
else
{
echo "";
}
}
echo '<h2><br />Fin de la création des miniatures de l\'album ' . $_POST['doss'] . '<br /></h2>';
}
else
{
echo "erreur dans le répertoire !! <br />";
echo $chemin;
}
Je précise que j'ai créé plus haut dans le code le sous répertoire "mini", sans aucun souci)Merci d'avance !