2014-05-17 4 views
0

J'ai une fonction qui ouvre un répertoire pré-désigné, crée un tableau des fichiers image dans le répertoire, puis tire un nom d'image aléatoire de la liste de tableaux pour l'écho vers une page Web. Le problème est parfois que cela ne tire pas le nom de l'image.PHP Random Image La fonction insère parfois une image vide

Voici le code php:

<?php 

    $actualpath = get_stylesheet_directory_uri() . "/img/banners/"; 

    // open this directory 
    $myDirectory = opendir("wp-content/themes/beautysalon/img/banners/"); 

    // get each entry 
    while($entryName = readdir($myDirectory)) { 
     $dirArray[] = $entryName; 
    } 

    // close directory 
    closedir($myDirectory); 


    function getRandomFromArray($ar) { 
     mt_srand((double)microtime() * 1000000); // php 4.2+ not needed 
     $num = array_rand($ar); 
     return $ar[$num]; 
    } 
    $randomPicture = getRandomFromArray($dirArray); 

?> 

Et le code que j'utilise pour afficher réellement l'image sur la page Web:

<?php 
    if (!is_front_page()) { 
     echo '<img src="' . $actualpath . $randomPicture . '"/>'; 
    }; 

?> 

Lorsque le code fonctionne, il finit par écho quelque chose comme:

<src="http://sitename.com/directorypath/image.png" /> 

Ce qui est exactement ce que je l'ai l'intention de faire. Mais quand cela ne fonctionne pas, il ne tire le nom de l'image pour une raison quelconque et finit par produire quelque chose comme ça, ce qui se traduit par une image brisée:

<src="http://sitename.com/directorypath/" /> 

Il est presque comme si le php n'a pas eu le temps pour parcourir la fonction avant que le contenu de la page soit généré, mais je pensais que php était toujours exécuté complètement avant le rendu de la page.

Working example of the PHP script in action can be found here.

Le script fonctionne sur toutes les pages sauf la page d'accueil et la page de contact.

Répondre

2

Essayez d'utiliser scandir au lieu de opendir. Dites-moi si cela fonctionne, si ce n'est pas le cas, je vais corriger le code. Je l'ai testé de mon côté et ça fonctionne.

<?php 
// Your variables... 
$actualpath = get_stylesheet_directory_uri() . "/img/banners/"; 
$directory = 'wp-content/themes/beautysalon/img/banners/'; 

// Scan the directory and strip the dots that come with the array 
$sd = array_diff(scandir($directory), array('..', '.')); 

// Sort the array so that the numbering is correct 
sort($sd); 

// The random array function. 
function getRandomFromArray($ar) { 
    return $ar[array_rand($ar)]; 
} 

// Your variable. 
$randomPicture = getRandomFromArray($sd); 

?> 

Bonne chance!

+1

Cela semble fonctionner parfaitement. Une idée de pourquoi la méthode opendir créait des problèmes? – Longblog

+0

Je ne sais pas exactement à coup sûr, mais cela pourrait être un problème avec le logiciel PHP lui-même. Veuillez marquer ma réponse comme résolue si elle a résolu votre problème. Merci! – synquall

+1

Marqué comme résolu maintenant. J'attendais juste votre réponse avant de la marquer comme résolue. Je voulais connaître votre avis sur ce qui pourrait causer le problème et je ne savais pas si vous reviendriez si elle était marquée comme résolue. ;) – Longblog