Page 1 sur 1

Random image par dates

Posté : 17 déc. 2010, 01:57
par le_fermier
Salut à tous,
Comment pourrais-je faire en sorte qu'une image header de mon site change automatiquement selon des dates précises à l'avance?
genre random image mais lié a des dates et non pas au chargement de la page
Merci

Re: Random image par dates

Posté : 17 déc. 2010, 02:21
par moogli
si l'image est précise pour une date donnée je te conseil une table de sgbd (tu peut utiliser sqlite si tu veut pas utiliser un autre serveur).

Après si ce que tu souhaite c'est que l'image soit aléatoire mais changé à des date fixe, autant utiliser un fichier avec le nom de l'image et du prochain changement.

@+

Re: Random image par dates

Posté : 17 déc. 2010, 08:03
par xTG
Des images numérotées par exemple :
image_1.jpg, ...., image_5.jpg
Ensuite un petit traitement pour exploiter la date :
$dateDuJour = date("Ymd");
Nous obtenons donc un entier avec lequel nous pouvons travailler :
$numero_image = $dateDuJour % NOMBRE_MAX_IMG;
echo "image_$numero_image";
Et avec un modulo tu auras donc une image différente pour chaque jour.

Code à tester parce que je ne suis pas sûr du calcul vu que date renvoi une chaîne de caractères... Au pire il suffit de la convertir en entier.

Re: Random image par dates

Posté : 17 déc. 2010, 08:16
par epommate2
Voici une fonction qui affiche toujours le même chiffre en fonction de la date et d'un nombre d'image :
function getDayNumber($max_number){
	$hex = md5(date("Y-m-d"));
	$dec=0;
	$len = strlen($hex);
	for ($i = 1; $i <= $len; $i++) {
		$dec = bcadd($dec, bcmul(strval(hexdec($hex[$i - 1])), bcpow('16', strval($len - $i))));
	}
	return 	bcmod($dec,$max_number);;
}

Re: Random image par dates

Posté : 17 déc. 2010, 08:29
par xTG
Juste un petit commentaire : je suis effaré de voir si compliqué pour juste obtenir un numéro unique à partir d'une date. :/

Re: Random image par dates

Posté : 17 déc. 2010, 08:44
par epommate2
Oui, mais je n'ai pas trouvé plus simple pour garantir la répartition correcte des nombres ....

La complexité vient de l'utilisation d'une sortie de MD5 comme un entier qui ne peut se faire qu'avec BC et comme
BC ne lis pas l'hexadécimal, il faut faire la transformation à la main.

Si on n'a pas besoin de l'aléa, c'est plus simple :
function getDayNumber($max_number){
	return strtotime(date("Y-m-d")) % $max_number;
}
Mais les images vont revenir avec la même périodicité ...

On peut compliquer un peu, mais je pense qu'il faut utilisé un fonction de hash pour avoir un bon aléa.
Je ne suis pas sûr que si on prend les derniers numéros du MD5, on ne va pas introduire un biais dans le tirage...

Mais je serais heureux de connaitre une technique plus simple !

(bon, évidemment, dans ce cas, ca permet d'économiser un champs dans une base de données, mais il y a des cas ou c'est vraiment nécessaire, exemple : tirer au sort un avatar a partir d'un email)

Re: Random image par dates

Posté : 17 déc. 2010, 08:48
par xTG
Bon dérivons un petit peu car ton point de vue m'intéresse. :o
Je comprends tout à fait qu'un simple algo comme le mien fasse une répétition de certaines images puisque le nombre d'image ne sera pas accordé au nombre de jour dans le mois.
Donc si je comprends bien ton but est de donner autant de poids à chaque image ?

Re: Random image par dates

Posté : 17 déc. 2010, 09:26
par epommate2
Je n'avais pas vu ta réponse avec l'algo sur la date ;-)

Je pense que dans ce cas, les images vont se succéder dans le même ordre, avec une petite variante chaque début de mois et chaque début d'année.
Surtout s'il y a moins de 30 images ;-)
for($i = 0; $i<50; $i++){
$dateDuJour = date("Ymd",strtotime("+ $i day"));
$numero_image = $dateDuJour % 15;
echo " $numero_image";
}

Code : Tout sélectionner

2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 1 2 3 4
Pas très aléatoire non ?

Re: Random image par dates

Posté : 17 déc. 2010, 13:30
par xTG
Je suis d'accord avec toi, pour cela que je m'intéressais à ta solution. ^^
J'avais juste répondu au problème sous cet angle : "une image différente chaque jour"

Sinon @auteur du sujet :
Après relecture de ta demande en fait il demande plutôt une image fixe pour tel jour du mois non ?
Donc un tableau contenant l'url (ou le nom) de 31 images dont le résultat serait tiré de par l'index en corrélation avec la date du jour ne répondrait-il pas tout simplement au problème ?

Re: Random image par dates

Posté : 17 déc. 2010, 23:11
par moogli
on ne connaitra la réponse que lorsqu'il répondra .... :)

@+