rportal Posté 17 Août 2005 Posté 17 Août 2005 ARRTGGG oups desole: kes fichiers à inclure sont dans la variable $include_aleatoire et pas $fichier: include($include_aleatoire[$i]);
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 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
rportal Posté 17 Août 2005 Posté 17 Août 2005 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 à incluresrand ((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]);}}?>
rportal Posté 17 Août 2005 Posté 17 Août 2005 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
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 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
rportal Posté 17 Août 2005 Posté 17 Août 2005 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 à incluresrand ((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]);}}?>
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 (modifié) maintenant il m'affiche includes/nom du fichier.php + message d'erreur includes/dgd.phpincludes/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 Modifié 17 Août 2005 par reg34000
rportal Posté 17 Août 2005 Posté 17 Août 2005 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 à incluresrand ((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
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 nikel trop fort 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 ?
rportal Posté 17 Août 2005 Posté 17 Août 2005 [HS]Je suis informaticien, mais le web n'est pas ma profession mais un passe temps[/HS]
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 (modifié) 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 Modifié 17 Août 2005 par reg34000
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 on oeu m'effacer le site ?? afficher des truc a la place ??? le faire planter, tourner en boucle ?
Boo2M0rs0 Posté 17 Août 2005 Posté 17 Août 2005 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 ...
reg34000 Posté 18 Août 2005 Auteur Posté 18 Août 2005 Salut rportal j'espere que tu a bien dormis lol car moi j'ai reflechit a ton script toute la nuit. 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 ???
rportal Posté 18 Août 2005 Posté 18 Août 2005 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 à incluresrand ((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é
reg34000 Posté 18 Août 2005 Auteur Posté 18 Août 2005 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 ????
rportal Posté 18 Août 2005 Posté 18 Août 2005 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).
reg34000 Posté 18 Août 2005 Auteur Posté 18 Août 2005 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
rportal Posté 18 Août 2005 Posté 18 Août 2005 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?
reg34000 Posté 18 Août 2005 Auteur Posté 18 Août 2005 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
reg34000 Posté 18 Août 2005 Auteur Posté 18 Août 2005 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
rportal Posté 18 Août 2005 Posté 18 Août 2005 Si tu veux change juste la génération du nom du fichier de cache avec ta méthode et c'est bon non?
reg34000 Posté 18 Août 2005 Auteur Posté 18 Août 2005 La génération du nom de fichier ??? tu me parle chinois Avec ma methode, j'ai pas de methode moi
rportal Posté 18 Août 2005 Posté 18 Août 2005 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.
reg34000 Posté 18 Août 2005 Auteur Posté 18 Août 2005 donc je fais quoi pour combiner le jour + le nom du dossier qui contient le script basename(dirname($_SERVER["PHP_SELF"]));
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant