Bonjour,
Pour un site web écrit en php j’ai besoins de redimensionner des photos par lot pour en faire des miniatures.
J’utilise pour celà imagick (bibliothèque image magick pour php) de la manière suivante :
$image = new Imagick($path]);
$image->thumbnailImage($width, $height);
$image->writeImage($path_preview);
$image->destroy();
Si je rentre ces lignes de code telles quelles dans mon script pour une image à redimensionner ça marche parfaitement, mais, mon script scanne le contenu d’un répertoire et doit redimensionner toutes les images qui s’y trouvent pour en faire une galerie. Il peut y en avoir jusqu’à 100. J’ai essayé de faire une boucle pour chaque image trouvée. Le problème c’est que l’exécution se lance dans un seul thread, dure très longtemps (une dizaine de minute) ce qui n’est pas compatible avec le temps maximum d’exécution d’un script php. J’ai modifié en local mon php.ini mais si je veux distribuer mon logiciel ça ne sera pas possible pour tout le monde. De plus avec cette méthode si le client est déconnecté la génération des aperçus s’arrête, ce qui n’est pas le comportement souhaité.
Partant de ça j’ai essayé de lancer chaque redimensionnement dans un nohup, toujours en bouclant sur les résultats du scan du dossier :
Là plus de problème de temps d’exécution du script, mais je me retrouve avec autant de thread lancés que d’images, et il faut croire que 70 threads la machine n’a pas aimée, même avec le nice (freeze complet de l’interface, j’ai du forcer le reboot au bout de 30 minutes…).
J’ai pensé aussi à lancer les requêtes de redimensionnement en ajax depuis le client mais je me retrouve toujours avec le problème si le client est déconnecté.
Avez vous une idée de la bonne méthode pour redimensionner ces images par lot, sans surcharger le serveur et sans craindre les déconnections du client ?
Merci à vous.
PS: Excusez la longueur du post, je commence seulement à développer et j’ai du mal à tout exprimer de manière concise.