Redimensionner 3000 images

Eléphant du PHP | 331 Messages

15 oct. 2009, 23:43

Bonjour,

J'ai besoin de redimensionner 3000 images

J'ai donc fait un bout de code qui marche mais pour une raison inconnu il n'en fait que environs 200 et le script arrete

jai pensé augmenté les limite de php.ini mais sa na rien changé

Voici mon code:
function resize_images($max_width, $max_height, $img_path)
{
	$maxwidth = $max_width;
	$maxheight = $max_height;
	$imgpath = $img_path;
	$imagehw = GetImageSize("$imgpath");
	$imagewidth = $imagehw[0];
	$imageheight = $imagehw[1];
	if($imagewidth >= $imageheight)
	{
		if ($imagewidth > $maxwidth)
		{
			$imageprop = ($maxwidth*100)/$imagewidth;
			$imagevsize = ($imageheight*$imageprop)/100 ;
			$r_width = $maxwidth; 
			$r_height = ceil($imagevsize);
		}
		else
		{
			$r_width = $imagewidth;
			$r_height = $imageheight;
		}
	$returned = array("$r_width", "$r_height", "$imagewidth", "$imageheight");
	
	}
	else
	{
		if ($imageheight > $maxheight)
		{
			$imageprop = ($maxheight*100)/$imageheight;
			$imagevsize = ($imagewidth*$imageprop)/100 ;
			$r_width = ceil($imagevsize); 
			$r_height = $maxheight; 
		}
		else
		{
			$r_width = $imagewidth;
			$r_height = $imageheight;
		}
	$returned = array("$r_width", "$r_height", "$imagewidth", "$imageheight");
	
	}
return $returned;
}


function redimensionner($source, $destination)
{
		//--------------------------------------------------------------------
		$size = getimagesize("/home/content/j/m/a/jmartinacn/html/".$source) or die("getimagesize erreur 35");
    		$newwidth=resize_images(50, 50, $source) or die("rezine width erreur");
		$src_img = imagecreatefromjpeg($source) or die("imagecreatefromjpg erreur");
		$dst_img = imagecreatetruecolor ($newwidth[0],$newwidth[1]) or die("createtruecolor erreur 40");
		imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $newwidth[0],$newwidth[1], $size[0], $size[1]) or die("imagecopyresampled erreur"); // la fonction qui redimensionne les photos
		imagejpeg($dst_img, $destination, 60) or die("imagejpg erreur179");
		imagedestroy($src_img) or die("destroy src_img erreur");
		imagedestroy($dst_img) or die("destroy dest_img erreur"); 	
		//-----------------------------------------------------------------------------------------

}


$rep_dest = "pictures/listings7/";
$rep_source = "listings/";

mysql_connect("***","***","***") or die("Impossible de connecter la bd");
$base=mysql_select_db("nospac") or die("erreur de DB");
$table=mysql_query('select id, ad_id, picture from class_ads_pictures') or die("Impossible d'ouvrir la table");
while ($row=mysql_fetch_array($table))
	{


		if (file_exists("listings/".$row["picture"]."") && filesize("listings/".$row["picture"]."")>0) {
		$path_parts = pathinfo("listings/".$row["picture"]."");
		if($path_parts['extension']=="jpg")
		{
		echo "".$row["id"]." = listings/".$row["picture"]."<br>";
		redimensionner("listings/".$row["picture"]."", "pictures/listings7/".$row["ad_id"]."_112.jpg");
		}
		}

}
Pouvez-vous m'aider svp?

Merci!
Modifié en dernier par stefane321 le 15 oct. 2009, 23:47, modifié 1 fois.

ViPHP
fab
ViPHP | 2657 Messages

15 oct. 2009, 23:46

Il t'affiche un message d'erreur ? Tu l'executes depuis le web ou ne ligne de commandes?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 331 Messages

15 oct. 2009, 23:48

Sa ne me retourne aucun message d'erreur et je l'exécute depuis un fichier php via le navigateur

ViPHP
fab
ViPHP | 2657 Messages

15 oct. 2009, 23:54

Bon le truc est que si ton script marche pour les 200 premières images il doit marcher pour la 201 ième... ( dailleurs le compte est vraiment rond à 200 ou c'était juste pour un ordre d'idée ? )

Dans le PHP.ini tu as modifié quelles limites? Il faut regarder le temps d'éxecution maximum mais aussi la mémoire alloué maximum.

As-tu bien pensé à redémarrer apache après avoir modifié ton php.ini?

Des petites idées de débug a chaud sinon affiche le compte d'images redimensionnées ainsi que le nom//path comme ça tu pourras voir là ou ça plante.

Tu as même pas d'affiché un message présent dans tes or die() ?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 331 Messages

16 oct. 2009, 00:12

J'ai mis un chiffre rond ... en fait cest 234 le chiffre exact de la dernière tentative

Nom je n'ai pas redémarré apache car je ne peux pas cest sur mon hébergeur

jai mis un php.ini a la racine du site:
max_input_time = 10000;

memory_limit = 80000000;

post_max_size = 10000000;

upload_max_filesize = 5000000;

magic_quotes_gpc = Off;

max_execution_time = 3000000;
Et il y a vraiement aucun message d'erreure.

et chose bizarre, si je fais simplement une copie avec renommage sans redimensionner bien là il les fait toute

exemple:
$rep_dest = "pictures/listings7/";
$rep_source = "listings/";

mysql_connect("*******","*****","*****") or die("Impossible de connecter la bd");
$base=mysql_select_db("nospac") or die("erreur de DB");
$table=mysql_query('select id, ad_id, picture from class_ads_pictures') or die("Impossible d'ouvrir la table");
while ($row=mysql_fetch_array($table))
	{

		$copie=copy("listings/".$row["picture"]."", "pictures/listings4/".$row["ad_id"]."_112.jpg"); 
}

ViPHP
fab
ViPHP | 2657 Messages

16 oct. 2009, 00:17

Cherche pas plus loin alors, le php.ini en racine de ton site il doit pas être pris en compte! Ca serait trop facile et trop dangereux !
Je pense que tu vas être obligé de le faire par tranche, par exemple de 100. A la fin de ton script tu fais une redirection en passant en parametre d'url là ou t'es arrété :)
Et oubli surtout pas de voir si là où tu en es c'est pas le maximum de ton nombre d'images sinon ton truc va tourner en boucle :) Bon certes en boucle jusqu'a que tu fermes la page de ton navigateur mais bon .. tu auras surement une erreur à la fin :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 331 Messages

16 oct. 2009, 00:25

Merci

peux-tu m'aider a faire le "par tranche" car jai aucune idée comment faire ça

ViPHP
fab
ViPHP | 2657 Messages

16 oct. 2009, 00:40

Sans problèmes :) Par contre je te préviens je ne suis pas là pour te faire ton code :p Je te donne les pistes et si tu bloques je t'aide à trouver les solutions! C'est comme ça qu'on apprend !

1 / Vérifier si il y a une limite passée en parametre d'url ( tableau $_GET , tu choisis le nom que tu veux moi je vais dire l donc isset($_GET['l'] )
2/ Déterminer les limites dans ta requete SQL en fonction de l, une limite sous mysql c'est LIMIT u,v ou u est l'élement de départ et v le nombre d'élements à afficher. Pour u si il n'y a pas de paramètre l c'est 0 dans le cas contraire c'est ta l - 1, et pour v c'est le nombre d'élements qui constitues ta tranche, on a dit 100 :)
3/ Ton script redimensionne les images
4/ tu utilises header('location: monUrl') pour rédiriger comme il faut et oubli pas de passer la limite l en paramètre d'url et qu'ici il faut lui ajouter 100 avant de la transmettre

Attention ! la fonction header() ne te permet pas d'afficher quoi que ce soit avant! Donc exit les echos de debug et compagnie! Si tu veux asbolument faire afficher des trucs avant il faudra que tu fasses la même redirection mais en javascript, ce qui fonctionne tout aussi bien
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 331 Messages

17 oct. 2009, 19:04

J'ai fait ceci en suivant tes instruction:
$nb = 150;
if (!isset($_GET['page'])) $page = 1;
else $page = intval($_GET['page']);
$debut = ($page - 1) * $nb;


$rep_dest = "pictures/listings7/";
$rep_source = "listings/";

mysql_connect("**************","***********","***********") or die("Impossible de connecter la bd");
$base=mysql_select_db("nospac") or die("erreur de DB");
$table=mysql_query("select id, ad_id, picture from class_ads_pictures LIMIT $debut,$nb") or die("Impossible d'ouvrir la table");
while ($row=mysql_fetch_array($table))
	{
		if (file_exists("listings/".$row["picture"]."") && filesize("listings/".$row["picture"]."")>0) {
		$path_parts = pathinfo("listings/".$row["picture"]."");
		if($path_parts['extension']=="jpg")
		{
		
		redimensionner("listings/".$row["picture"]."", "pictures/listings7/".$row["ad_id"]."_112.jpg");
		}
		}
		
}
$page=$page+100;
header("location: renommer_les_images.php?page=$page");
sa me donne cette erreur:
Redirection de page incorrecte

Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas.

* La cause de ce problème peut être la désactivation ou le refus
des cookies.

Mammouth du PHP | 985 Messages

17 oct. 2009, 19:18

J'ai fait ceci en suivant tes instruction:
header("location: renommer_les_images.php?page=$page");
Salut,
Je ne sais pas si c'est la cause de l'erreur mais il faut toujours mettre l'adresse complète avec une redirection (header).
Donc en incluant le chemin complet: http:// ...
Note: HTTP/1.1 demande une URI absolue comme argument de » Location:, y compris le protocole, hôte et chemin absolu. Mais certains navigateurs acceptent les URI relatives. Vous pouvez généralement utiliser les variables globales $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] et dirname() pour construire vous-même une URI absolue
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
fab
ViPHP | 2657 Messages

17 oct. 2009, 22:18

Bonne réponse dr@ke :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 331 Messages

18 oct. 2009, 05:12

Merci

J'ai finalement changé la méthode de refresh pour le javascript afin de pouvoir faire des echo qui me donnerais des détails sur le déroulement du script

Là le refresh fonctionne , il est exécuté environs 20 fois et apres sa plante

Je reçois:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Vous pouvez essayer la page ici:

http://www.nospacs.ca/renommer_les_images.php

Avez-vous une idées?