[Résolu] Sélectionner un fichier au hasard dans un dossier

Eléphanteau du PHP | 20 Messages

07 mai 2010, 19:04

Bonjour,

Je cherche à sélectionner une image au hasard dans un répertoire pour mon blog wordpress. J'ai trouvé ceci, qui fonctionne parfaitement en local sur mon pc :

Code : Tout sélectionner

<?php $curdir=getcwd(); chdir(get_template_directory() . "/images/headers"); $files=glob("*.{gif,png,jpg,gif}", GLOB_BRACE); chdir($curdir); $file=$files[array_rand($files)]; ?> <img src="<?php echo(get_bloginfo('template_url')."/images/headers/$file"); ?>" width="770" height="140" alt="<?php bloginfo('name'); ?> random header image" />
Sauf que voilà, chez Free, ça ne marche pas, car "glob" est désactivé... J'ai d'ailleurs trouvé l'info suivante sur proxad news :
Pour être, en local, presque comme free, mettre ceci dans php.ini :

disable_functions = glob, filter_list, chown, chmod, get_current_user,
php_uname, putenv, set_time_limit, getmyuid, getmypid, dl, ini_alter,
ini_restore, ini_set, exec, passthru, system, popen, pclose, leak,
mysql_list_dbs, listen, chgrp, disk_total_space, disk_free_space, rmdir,
tmpfile, link, shell_exec, proc_open, chroot, openlog, closelog, syslog,
flock, socket_create_listen, socket_accept, socket_listen, sleep, umask,
set_include_path, restore_include_path, symlink, imagerotate

Donc voilà : est-ce possible d'arriver à un résultat équivalent sans passer par "glob" ?
Modifié en dernier par pled le 10 mai 2010, 20:02, modifié 1 fois.

devlop78
Invité n'ayant pas de compte PHPfrance

07 mai 2010, 19:39

J'ai envie de te dire de changer d'hébergement mais ça risque de ne pas répondre à ta question. J'ai aussi envie de te dire que tu peux lister le contenu de ton répertoire dans un fichier ou une bdd mais ça risque de ne pas répondre à ta question. je peux aussi te dire que si tu ouvres ton répertoire, que tu le parcoures et enregistres dans un tableau chaque fichier (sauf . et ..), que tu le mélanges, et que tu choisis la première "occurence" (désolé mais avec flash, ya que ce mot qui me vient à l'esprit) du tableau, tu auras quelque chose de satisfaisant ... :D

Cherche google "php parcours de dossiers".

Eléphanteau du PHP | 20 Messages

08 mai 2010, 18:16

Merci pour ta réponse.

Changer d'hébergeur, oui j'y ai déjà pensé, c'est pas la première fois que je suis embêté avec les limitations de Free (fonction include). Mais les offres payantes sont toutes limitées en espace disque pour ce que j'ai vu, et j'ai beaucoup de photos... et Free ne gère même plus les quotas j'ai l'impression (sinon officiellement 100Go).

J'ai cherché "php parcours dossiers", et j'ai trouvé comment lister un répertoire. Mais pour mettre ça dans un tableau, le mélanger comme tu dis et choisir le premier... là ça me dépasse !

J'ai donc simplifié le truc : comme mes fichiers ont tous le même nom + un numéro, j'ai fait comme ça :

Code : Tout sélectionner

<?php $rand = rand(1, 50); ?> <img src="<?php echo(get_bloginfo('template_url')."/images/headers/banniere$rand.jpg"); ?>" width="970" height="140" alt="<?php bloginfo('name'); ?> random header image" />
Bon, ça oblige à gérer le nombre d'images manuellement, mais ça a le mérite d'être simple !

ViPHP
AB
ViPHP | 5818 Messages

09 mai 2010, 18:58

Pour remplacer glob et mélanger les fichiers du répertoire on peut utiliser les fonctions opendir, readdir et closedir. Ces fonctions sont d'ailleurs mentionnées dans la doc sur glob
  $list = opendir($dossier);
  
  $tabfile = array();
  
  while ($fichier = readdir($list)) 
  {
  ($fichier != "." && $fichier != ".." && $fichier != ".htaccess")? $tabfile[] = $fichier : '' ;
  }
  closedir($list);

//mélange du tableau
  shuffle($tabfile);

// premier élément du tableau
$premier = array_shift($tabfile);
Comme tu vois c'est pas très compliqué. N'oublies pas de tager résolu si ton pb est résolu :wink:

Eléphanteau du PHP | 20 Messages

10 mai 2010, 20:02

Super, ça marche parfaitement.

Non, ça n'a pas l'air compliqué... quand on a les connaissances !

Merci bien en tout cas, et je passe donc la question en [Résolu].