2014-05-17 96 views
0

我有一個函數,它打開預先指定的目錄,在目錄中創建一個圖像文件數組,然後從數組列表中拉出一個隨機圖像名稱以回顯到網頁。問題有時它實際上並不拉圖像名稱。PHP隨機圖像函數有時會插入空白圖像

這裏是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); 

?> 

,而且我用實際網頁上顯示的圖像的代碼:

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

?> 

當代碼的工作就結束了呼應類似:

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

這正是我打算做的。但是,當它不工作,它不是出於某種原因拉動映像名稱並最終輸出這樣的事情,其結果是破壞形象:

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

這幾乎就像如果PHP還沒有來得及在頁面內容生成之前運行該函數,但我認爲PHP在頁面呈現之前總是完全執行。

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

運行該腳本上,除了主頁和聯繫頁面的所有頁面。

回答

2

嘗試使用scandir而不是opendir。告訴我它是否有效,如果不行,我會修復代碼。我已經在我身邊測試過它,它的工作原理。

<?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); 

?> 

祝你好運!

+1

這似乎很好地工作。任何想法爲什麼opendir方法造成的問題? – Longblog

+0

我並不確定,但它可能是PHP軟件本身的問題。如果它解決了您的問題,請將我的答案標記爲已解決。謝謝! – synquall

+1

現在標記爲已解決。在將其標記爲已解決之前,我只是在等待您的迴應。我想就可能導致問題的問題提出意見,並不確定如果標記爲解決方案,您是否會回來。 ;) – Longblog