Posez votre question Signaler

[PHP] Pb Boucle pour retailler plusieurs img [Résolu]

jimmyneutron 36Messages postés 6 janvier 2007Date d'inscription - Dernière réponse le 10 avril 2007 à 17:45
Bonjour,
voici ma boucle qui traite tous les fichiers du tableau $tab_online:
for($i=0; $i<count($tab_online); $i++)
{
$src = "http://mon.site.com/".str_replace(" ", "%20", $tab_online[$i]);
if (substr($src, -3) == "jpg")
{
$img = imagecreatefromjpeg($src);
$size = getimagesize($src);
$max_width = 800;
$max_height = 600;
$width = $size[0];
$height = $size[1];
if ( $width > $height )
{
$dst_height = $height * $max_width / $width;
$dst_width = $max_width;
}
else
{
$dst_width = $width * $max_height / $height;
$dst_height = $max_height;
}
$dst = imagecreatetruecolor(round($dst_width), round($dst_height));
$dst_thumbs = imagecreatetruecolor(round($dst_width * 25 / 100), round($dst_height * 25 / 100));
imagecopyresampled($dst, $img, 0, 0, 0, 0, round($dst_width), round($dst_height), $width, $height);
imagecopyresampled($dst_thumbs, $img, 0, 0, 0, 0, round($dst_width * 25 / 100), round($dst_height * 25 / 100), $width, $height);
imagejpeg($dst, "../../photos/".$new_dir."/".$i.".jpg");
imagejpeg($dst_thumbs, "../../photos/".$new_dir."/thumbs/".$i.".jpg");
imagedestroy($img);
imagedestroy($dst);
imagedestroy($dst_thumbs);
Si je la laisse comme ça, le serveur me retourne:
Fatal error: Maximum execution time of 30 seconds exceeded in /home ...
et une partie des photos n'est pas traitée.
Si j'ajoute set_time_limit(300); pour repousser le timeout à 5 min, l'erreur ne s'affiche pas mais l'opération n'aboutie pas non plus...
En isolant avec des 'echo' avant et après les fonctions, puis en chronométrant la vitesse d'éxécution des fonctions: il se trouve que l'application bloque au niveau de "imagecopyresampled" mais jamais sur la même image. Ce qui exclu le problème de la source.
J'ai essayé de mettre un sleep(1); dans la boucle pour ralentir l'éxécution au càs où le problème viendrait du fait que l'appli s'emballerait.
J'ai aussi essayé avec une "function" ...
Rien à faire...
Ce que je ne comprend pas c'est le timeout...
avec une simple boucle
for($i=0; $i<100; $i++)
{
sleep(1); // pause d'1sec à chaque itération
}
l'application doit donc durer 100 sec. Eh bien là, pas de Fatal error: Maximum execution time of 30 seconds exceeded in /home ...
Pour info je suis sur un 90plan de chez OVH
Merci pour les infos...
Lire la suite 

[PHP] Pb Boucle pour retailler plusieurs img »

4 réponses
Réponse
+0
moins plus
up !!!
Ajouter un commentaire
Réponse
+0
moins plus
up !!!
Ajouter un commentaire
Réponse
+0
moins plus
up ...
jimmyneutron- 10 avril 2007 à 17:45
réponse de la hotline:

Bonjour,

dans notre environnement cette variable n'a pas d'effet, nous avons des robots qui check en continu l'execution des scripts.

(au sujet du set_time_limit(); )

donc solution découper le programme en plusieurs partie pour retailler de 50 images en 50 ou moins ...

++
Ajouter un commentaire
Ce document intitulé « [PHP] Pb Boucle pour retailler plusieurs img » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?