reg34000 Posté 17 Août 2005 Posté 17 Août 2005 Salut j'ai eu une idée de script mais j'ai besoin de votre aides pour m'aider à le realiser. Je souhéterais faire en php un script qui permette de faire des includes aléatoirement. C'est a dire qu'il va chercher un fichier a inclure au hazard dans un dossier déterminé. L'idée est que l'on puisse définir le nombre de fichier a inclure Du style on lui dis inclus au hazard 3 fichiers du dossier XXX sans inclure 2 fois le meme (quelque soit le nom des fichiers). Je compte sur vous
rportal Posté 17 Août 2005 Posté 17 Août 2005 voila une idee. Pas testée, ecrite en live. // 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$include_aleatoire = array_rand ($fichiers, $nb_aleatoire);}
oxyd-x Posté 17 Août 2005 Posté 17 Août 2005 Salut, ce que tu cherches à faire peut se réaliser en quelques lignes de codes, mais, le probléme, ne ce situe pas réellement dans cette opération, mais plutot dans le résultat que celle-ci pourrait engendrer. Au niveau de la sécurité par exemple, ce genre de scripts peut laisser derriere lui des "trous" de sécurité énormes, du meme fait que l'inclusion "a la volée" peut engendrer des bugs (simple et de compatiblité avec le reste du code source). Je ne sais pas réellement pourquoi tu veux agir ainsi, mais il éxiste, j'en suis persuadé, une alternative "propre" pour faire ce que tu cherche à réaliser. Je reste dans le coin pour te filer un coup de main si tu en as besoin; @+ oxyd-x
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 rportal je met ou ladresse de mon dossier ou se trouve mes fichier PHP a inclure ? ok merci a tous les deux (oxyd-x) je compte sur vous lol
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 je suis vraiment nul en php (programmation) variable $rep ok si c'est le dossier "includes" je fait includes $rep ou variable $includes lol
oxyd-x Posté 17 Août 2005 Posté 17 Août 2005 tu ajoute $rep="lechemin"; juste avant le if ($handle = opendir($rep)) {
rportal Posté 17 Août 2005 Posté 17 Août 2005 <?php$rep ="test/";// 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$include_aleatoire = array_rand ($fichiers, $nb_aleatoire);for($i=0;$i<count($include_aleatoire);$i++){include($fichiers[$i]);}}?>
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 pour le code <?php $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 $include_aleatoire = array_rand ($fichiers, $nb_aleatoire); } ?> voici le message d'erreur Warning: array_rand(): Second argument has to be between 1 and the number of elements in the array in ................/index.php on line 12
oxyd-x Posté 17 Août 2005 Posté 17 Août 2005 (modifié) essaye de renseigner la valeur de la variable "$nb_aleatoire" avec , par exemple , le nombre de fichier que tu deserais listé (place cette variable au début du code, à l'endroit ou tu à inserer la varaible $rep="blablabla") je reste quand meme persuadé que tu devrait te méfier de ce genre de script, surtout si tu ne métrise pas le language php, car, il peut générer des erreurs et des trous de sécurité, MEME SI, au premier ou au second lancement, tout va pour le mieux ! Le débugage d'un script ne se fait pas sur une phase de tests précise, elle est longue, et doit impliqué toutes les probabilitées de mélanges/actions. Je doute fort que l'inclusion à la volée soit une bonne pratique... la compatiblié, les dépendances, la sécurité, la gestion parent/enfant, ... Modifié 17 Août 2005 par oxyd-x
rportal Posté 17 Août 2005 Posté 17 Août 2005 ah, j'ai oublié de tout préciser ... désolé, mais en même temps je teste pas mes codes
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 <?php $nb_aleatoire="3";$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$include_aleatoire = array_rand ($fichiers, $nb_aleatoire);}?> ca n'affiche plus d emessage d'erreur mais ca affiche rien lol page vide
rportal Posté 17 Août 2005 Posté 17 Août 2005 essaye de mettre un '/' à la fin de ton repertoire cela fonctionnera mieux
rportal Posté 17 Août 2005 Posté 17 Août 2005 tu as oublié la boucle pour faire les include .... relit un peu plus haut j'avais complété le code .... mais laisse le '/'
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 super genial extra WAOUWWWWWWWWWWWWWW trop fort BINGOOOOOOOOOOO maintenant c'est quoi c'est histoire de truc pas fiable avec des risques de faille enorme ????
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 au fait il m'affiche toujours tout dans le meme ordre pas de facon aléatoire ??? quand je fais recharger la page il la charge toujours avec les meme includes et dans le meme ordre
rportal Posté 17 Août 2005 Posté 17 Août 2005 bah si tu fais des includes aleatoires de scripts php, ceux ci vont: 1) modifier des variables, inclurent d'autres trucs, ... Du coup, il peut y avoir une interactions avec les autres scripts que tu vas inclure (initialisatio de varaible à la mauvaise valuer, etc) 2) il se peut que un des scripts possèdent un trou de secu...
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 oui mais le but c'été de faire des includes de facon aléatoire si c'es toujours pour les faire de la meme facon je reste avec des page statique et je le fais direct avec la fonction include <?php include ('02.php'); ?> <?php include ('01.php'); ?> <?php include ('03.php'); ?>
rportal Posté 17 Août 2005 Posté 17 Août 2005 au fait il m'affiche toujours tout dans le meme ordre pas de facon aléatoire ???quand je fais recharger la page il la charge toujours avec les meme includes et dans le meme ordre <{POST_SNAPBACK}> met : srand ((double) microtime() * 10000000); avant la lign array_rand Si tu as peu de fichiers dans include, il se peut que l'aleatoire soit difficile tu peux aussi faire un shuffle apres le array_rand si tu veux: shuffle($include_aleatoire);
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 je fais les deux ou juste l'un ou l'autre il vaut mieux le quel lol
rportal Posté 17 Août 2005 Posté 17 Août 2005 (modifié) fait au moins le premier: il initialise le generateur de nombre aléatoire (normalement c'est fait automatiquement depuis php 4.2 mais bon) et tu peux faire le deuxieme: il va te melanger les fichiers extraits ou tu peux le faire sur le rpertoire si tu preferes l'alea est de toute facon fonction du nombre de fichiers dans ton repertoire. Si tu as une 10aine de fichiers, l'alea va etre faible si tu en tires 3 Modifié 17 Août 2005 par rportal
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 <?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[$i]);}}?> je suis vraiment nul mais j'ai pas compris ou les mettre, car il n'y a rien de plus d'aléatoire lol
reg34000 Posté 17 Août 2005 Auteur Posté 17 Août 2005 pour le moment 6 poiur le test mais apres je pourait en mettre plus
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant