[PHP] Pb Boucle pour retailler plusieurs img

Résolu/Fermé
jimmyneutron Messages postés 35 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 11 septembre 2011 - 4 avril 2007 à 21:37
jimmyneutron Messages postés 35 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 11 septembre 2011 - 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...
A voir également:

3 réponses

jimmyneutron Messages postés 35 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 11 septembre 2011 5
5 avril 2007 à 09:24
up !!!
0
jimmyneutron Messages postés 35 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 11 septembre 2011 5
5 avril 2007 à 15:54
up !!!
0
jimmyneutron Messages postés 35 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 11 septembre 2011 5
6 avril 2007 à 13:48
up ...
0
jimmyneutron Messages postés 35 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 11 septembre 2011 5
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 ...

++
0