Jump to content
Sign in to follow this  
reg34000

includes aléatoires

Rate this topic

Recommended Posts

:gueule: ARRTGGG oups desole:

kes fichiers à inclure sont dans la variable $include_aleatoire et pas $fichier:

include($include_aleatoire[$i]);

Share this post


Link to post
Share on other sites

pourquoi dans ta premiere version il affiche bien dans le desordre, mais pourquoi c'est toujours dans le meme ordre ?

c'est un desordre aménagé lol

parcontre je sais pas ou mettre tes nouvelles ligne pour le rendre aléatoire totalement

Share this post


Link to post
Share on other sites

:blink: voila

<?php 
$nb_aleatoire="4";
$rep ="includes/";
// on liste les fichiers du repertoire
if ($handle = opendir($rep)) {
$fichiers = array();
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$fichiers[] = $rep . $file;
}
}
closedir($handle);
// On crée le tableau contenant les fichiers à inclure
srand ((double) microtime() * 10000000);
$include_aleatoire = array_rand ($fichiers, $nb_aleatoire);
shuffle($include_aleatoire);
for($i=0;$i<count($include_aleatoire);$i++){
include($include_aleatoire[$i]);
}
}

?>

Share this post


Link to post
Share on other sites
pourquoi dans ta premiere version il affiche bien dans le desordre, mais pourquoi c'est toujours dans le meme ordre ?

<{POST_SNAPBACK}>

parcequ'il prend les fichiers dans l'ordre de date de modif je crois

Share this post


Link to post
Share on other sites

alors cette fois j'ai des message d'erreur

Warning: main(4): failed to open stream: No such file or directory in ...../index.php on line 18

Warning: main(): Failed opening '4' for inclusion (include_path='.:/home/temporaire/upload') in ....index.php on line 18

Share this post


Link to post
Share on other sites

voila un mode debug ...

essaye de voir ce qui ne vas pas ;)

<?php 
$nb_aleatoire="4";
$rep ="includes/";
// on liste les fichiers du repertoire
if ($handle = opendir($rep)) {
$fichiers = array();
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$fichiers[] = $rep . $file;
echo $rep . $file.'<br>';
}
}
closedir($handle);
echo '<hr>';
// On crée le tableau contenant les fichiers à inclure
srand ((double) microtime() * 10000000);
$include_aleatoire = array_rand ($fichiers, $nb_aleatoire);
shuffle($include_aleatoire);
for($i=0;$i<count($include_aleatoire);$i++){
echo $include_aleatoire[$i].'<br>';
include($include_aleatoire[$i]);
}
}

?>

Share this post


Link to post
Share on other sites

maintenant il m'affiche includes/nom du fichier.php

+ message d'erreur

includes/dgd.php

includes/bkhjhk.php

includes/ùlùmm.php

includes/ù.php

includes/nnjkjhk.php

includes/fghg.php

--------------------------------------------------------------------------------

3

Warning: main(3): failed to open stream: No such file or directory in /indexphp on line 21

Warning: main(): Failed opening '3' for inclusion (include_path='.:/home/temporaire/upload') in /index.php on line 21

Edited by reg34000

Share this post


Link to post
Share on other sites

ok, petite erreur de ma part ;)

<?php 
$nb_aleatoire="4";
$rep ="includes/";
// on liste les fichiers du repertoire
if ($handle = opendir($rep)) {
$fichiers = array();
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$fichiers[] = $rep . $file;
}
}
closedir($handle);
// On crée le tableau contenant les fichiers à inclure
srand ((double) microtime() * 10000000);
$include_aleatoire = array_rand ($fichiers, $nb_aleatoire);
shuffle($include_aleatoire);
for($i=0;$i<count($include_aleatoire);$i++){
include($fichiers[$include_aleatoire[$i]]);
}
}

?>

cela devrait etre bon

Share this post


Link to post
Share on other sites

nikel trop fort

:fete::fete::fete:

tu bosse dans l'info c'est ton job t'es programmateur

au fait c'est quoi les risque d'un tel script on peut faire quoi a mon site ?

Share this post


Link to post
Share on other sites

au fait c'est quoi les risque d'un tel script on peut faire quoi a mon site ?

tu parles de failles ?? de sécurité ???

il peu se passer quoi

Edited by reg34000

Share this post


Link to post
Share on other sites

On pourrait mais ça dépend des fichiers qui vont être inclus ;)

J'ai pas vraiment lu le code, mais normalement je ne vois pas trop où il pourrait y avoir des failles. Et ce n'est pas vraiment ça le problème, mais c'est que dans le cas où il y en aurait elle seraient plus dures à trouver par les devellopeurs (par les crackers aussi mais bon, possibles quand même).

Mais sinon, je vois pas vraiment l'utilité d'un tel script m'enfin ...

Share this post


Link to post
Share on other sites

Salut rportal

j'espere que tu a bien dormis lol

car moi j'ai reflechit a ton script toute la nuit. :fou:

Et donc j'aimerais savoir s'il est possible de remplacer l'affichage aléatoire des includes a chaque chargempent par un affichage aléatoire des includes par jour (si on charge la page 10 fois le meme jour c'est les memes includes qui se font, alors que si on la charge le lendemain c'est d'autres qui se font).

L'idée serait de se servir de la date 18/08/2004 pour faire 10+08+04= 22

se servir de ce chiffre (fixe toute la journée) pour faire l'affichage des includes

et le lendemain 19/08/2004 -> 19+08+04 = 23

ce qui implique un nouvel affichage aléatoire ???

C'est possible ??? :D

Share this post


Link to post
Share on other sites

tout est possible. Pour cela il faut que tu crées un fichier de cache. Le plus simple est de se baser sur le nom du fichier; Je te propose une version non optimale (elle ne supprime pas les fichiers des jours précédents) :

$nb_aleatoire="4";
$rep ="includes/";

// Répertoire où l'on met les fichiers de cache
$rep_cache = 'cache/';
//On crée le nom du fichier du jour
$fichier_cache = $rep_cache . date("Ymd") . 'php';                          

// Si le n'existe pas on le crée puis on l'inclu.

if(!file_exists($fichier_cache)) {
$txt_fichier = "<?php\n";

// on liste les fichiers du repertoire
if ($handle = opendir($rep)) {
$fichiers = array();
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$fichiers[] = $rep . $file;
}
}
closedir($handle);
// On crée le tableau contenant les fichiers à inclure
srand ((double) microtime() * 10000000);
$include_aleatoire = array_rand ($fichiers, $nb_aleatoire);
shuffle($include_aleatoire);
for($i=0;$i<count($include_aleatoire);$i++){
$txt_fichier .= "include('".$fichiers[$include_aleatoire[$i]]."');\n";
}
}
$txt_fichier .= "?>";
$f=fopen($fichier_cache,'w');
fwrite($f,$txt_fichier);
fclose($f)=;
}

include($fichier_cache);

comme d'habitude: non testé

Share this post


Link to post
Share on other sites

Salut

tout est possible. Pour cela il faut que tu crées un fichier de cache. Le plus simple est de se baser sur le nom du fichier; Je te propose une version non optimale (elle ne supprime pas les fichiers des jours précédents) :

c'est quoi un fichier de cache ????

Share this post


Link to post
Share on other sites

C'est le résultat d'un script que tu mets dans un fichier pendant un certain temps et cela pour éviter de lancer ton script trop souvent.

En gros pour les scripts qui consomment beaucoup de ressources et dont les données ne varient pas beaucoup, il n'est pas nécessaire de générer le résultat à chaque fois mais tous les X heures ou jours. Dans ton cas tu ne veux pas mettre à jour la liste des includes à chaque visite mais une fois par jour, donc tu génères une seule fois par jour la liste des include et tu l'as met dans un fichier que l'on peut appeé un cache. C'est ce fichier qui est appelé au lieu du script (consommateur de ressources).

Share this post


Link to post
Share on other sites

Ok

Mais l'idée serait de se servir de la date 18/08/2004 pour faire 10+08+04= 22

se servir de ce chiffre (fixe toute la journée) pour faire l'affichage des includes

et le lendemain 19/08/2004 -> 19+08+04 = 23

ce qui implique un nouvel affichage aléatoire ???

c'est bien cela sauf que plutot que de refaire le calcul il stoke le 22 ou le 23 dans un fichier

Mais si, le script prend la date comme base de calcul il peut faire 10 fois le calcul dans la journée il trouvera toujours le meme resultat le 18 aout 2004 tous les calcul donneront 10+08+04= 22

donc c'est pas grave s'il fait le calcul a chaque affichage puisqu'il trouve toujours le meme resulta il affiche donc toujours la meme chose

ou c'est plus compliqué que cela ????

ou il y a vraiment un intéret particulier a faire le cache

Share this post


Link to post
Share on other sites

l'intérêt d'utiliser le cache et de ne pas se casser la tête à trouver une formule mathématiques pour tirer tes includes ;)

La tu as une génération aléatoire une seule fois par jour. Ce n'est pas ce que tu voulais?

Share this post


Link to post
Share on other sites

si mais je me disait que je pouvait mettre le fichier qui contient ce script dans plusieur dossiers

et que pour chaque dossier (basename(dirname($_SERVER["PHP_SELF"]));

) + le jour j'avais une valeur

du style le script le 18/08/2004 dans le dossier abcd

donne 18+08+04 +1+2+3+4 (si a=1, b=2, c=3...)

20+9 =29

d'ou une mise en page

alors que si je met le meme fichier dans le dossier bcde

donne 18+08+04 +2+3+4+5 (si b=2, c=3, d=4...)

20+14 = 34

avec les meme fichiers mais qui se trouve dans un autre dossier j'obtien une autre mise en page

Share this post


Link to post
Share on other sites

est ce que de refaire le calcul a chaque fois ca engendre quoi au niveau du serveur plus de consommation de bande passande, hits ...ou rien

Share this post


Link to post
Share on other sites

Si tu veux ;)

change juste la génération du nom du fichier de cache avec ta méthode et c'est bon non?

Share this post


Link to post
Share on other sites
est ce que de refaire le calcul a chaque fois ca engendre quoi au niveau du serveur plus de consommation de bande passande, hits ...ou rien

<{POST_SNAPBACK}>

Ca change que tu es obligé de trouver une fonction mathématiques pour faire le tirage... Perso je ne me lancerais pas là dedans, c'est se compliquer la vie pour rien.

Share this post


Link to post
Share on other sites

donc je fais quoi pour combiner le jour + le nom du dossier qui contient le script basename(dirname($_SERVER["PHP_SELF"]));

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...