OVH Community, votre nouvel espace communautaire.

[PHP] Problème Boucle redimensionner plusieurs images ...


izzyway
10/04/2007, 16h55
Pourquoi ne pas faire deux pages.
L'une qui redimensionne une image dont le nom lui serait donné en paramètre (_GET) et l'autre qui interroge cette même page n fois successivement en javascript grace à l'objet XMLHttpRequest (et en passant le bon nom par parametre biensur).

jimmyneutron
10/04/2007, 16h50
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 ...

++

jimmyneutron
06/04/2007, 16h41
J'ai rajouté ce code pour renommer mes fichiers via la fonction ftp_rename(); et supprimer ceux qui ne sont pas des jpg (car on m'upload souvent le fichier thumbs de windows)...

Code PHP:

$array_verif 
ftp_nlist($ftp"www/photos/photos/");

$num 0;

for(
$i=0$i<count($array_verif); $i++){

$filename $array_verif[$i];

if (
substr($filename, -3) == "jpg"){
    
ftp_rename($ftp$filename"www/photos/photos/" $num ".jpg");
        
$num++;
    
} else {
    
ftp_delete($ftp$filename);
    
}


J'ai essayé de revoir le problème avec l'insertion de ftp_size(); plutôt que filesize(); mais rien d'anormal de toutes façons... Comme je l'avais dis avant, l'appli ne se bloque pas sur une image particulière... mais au bout de 70, 80 images lorsque je la retaille en 2 modèle. Avec toujours la même erreur : Fatal error: Maximum execution time of 30 seconds exceeded in /home...

J'attends une réponse d'Ovh... sinon je ne vois pas comment faire si ce n'est de couper mon programme en X parties pour l'arrêter toutes les 50 itérations et demander à l'utilisateur de le relancer pour 50 autres etc...

ce que je trouve franchement laid !

Bye, et merci pour l'aide...

++

Abogil
05/04/2007, 10h18
Citation Envoyé par jimmyneutron
Je ne comprend pas bien ?
Code PHP:
for($i=0$i<count($tab_online); $i++) 
   { 
   
$src "http://mon.site.com/".str_replace(" ""%20"$tab_online[$i]); 
   if (
substr($src, -3) == "jpg"
      { 
      
$image_size   filesize ($src);
      echo 
" \$fichier_image=$fichier_image - \$image_size=$image_size 
 \n"
;
      }
   } 
Remarque : éviter de mettre des espaces et des carractères accentués dans les noms de dossiers et de fichiers.

jimmyneutron
05/04/2007, 10h02
sur un autre forum:
Peut etre un pb de limite mémoire...
Check les log d'erreur apache, php et system..
t 'as ptet tout simplemetn un segfault....
je ne sais pas comment faire mais je vais bien trouvé...

Petite suggestion : Sans faire les traitements d'image, relève les tailles de tous tes fichiers image à traiter.
je ne comprend pas bien ?

Abogil
05/04/2007, 09h40
Oui, tu as tout à fait raison : ini_set("memory_limit" , "40M");

Mais je persiste à dire qu'il y a un problème de mémoire. J'ai eu ce type de problème où le traitement sur mon micro s'arrêtait sur une seule image, mais de grande taille.

Petite suggestion : Sans faire les traitements d'image, relève les tailles de tous tes fichiers image à traiter.

jimmyneutron
05/04/2007, 09h16
bonjour,

merci pour l'aide mais non le problème ne vient pas de là ou ne peut-être résolu comme cela.

pour note, la syntaxe exact serait :

ini_set("memory_limit" , "40M");

au lieu de

ini_set("memory_limit" , 40M);

j'avais déjà pensé à ce problème mais peut-être que tu as une idée en tête particulière... car tu propose de mettre 40M de mémoire pour l'appli, alors que par défaut PHP à comme valeur 8M ?

j'ai tout essayé de toutes façons: 100M, 40M, 8M, 1M, 256K, 16K etc... et il n'y a pas de différence... l'appli s'arrête comme d'habitude sans erreur... mais sans être achevée...

Abogil
05/04/2007, 08h35
Je pense que tu consommes trop de mémoire.
Insère avant ta boucle :
ini_set("memory_limit" , 40M);

jimmyneutron
05/04/2007, 08h26
up !!!

jimmyneutron
04/04/2007, 20h34
Bonjour,

voici ma boucle qui traite tous les fichiers du tableau $tab_online:

Code PHP:

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$img0000round($dst_width), round($dst_height), $width$height); 

imagecopyresampled($dst_thumbs$img0000round($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...