Aller au contenu
reg34000

includes aléatoires

Noter ce sujet :

Recommended Posts

:gueule: ARRTGGG oups desole:

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

include($include_aleatoire[$i]);

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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]);
}
}

?>

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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]);
}
}

?>

Partager ce message


Lien à poster
Partager sur d’autres 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

Modifié par reg34000

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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 ?

Partager ce message


Lien à poster
Partager sur d’autres 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

Modifié par reg34000

Partager ce message


Lien à poster
Partager sur d’autres 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 ...

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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é

Partager ce message


Lien à poster
Partager sur d’autres 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 ????

Partager ce message


Lien à poster
Partager sur d’autres 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).

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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?

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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

Partager ce message


Lien à poster
Partager sur d’autres 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?

Partager ce message


Lien à poster
Partager sur d’autres 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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×