2014-09-20 51 views
0

我有一個包含幾個文本文件的目錄。我試圖做的是隨機選擇一個文件,然後顯示它。這是我到目前爲止,但我仍然沒有設法得到它的工作。有任何想法嗎?謝謝。從目錄中隨機選擇一個文件,然後顯示它

<?php 
function random_pic($dir = 'wp-content\files') 
{ 
    $files = opendir($dir . '/*.txt'); 
    $file = array_rand($files); 
    return $files[$file]; 
} 

while(!feof($file)) { 
     echo fgets($file) . "<br />"; 
    } 

    fclose($file); 
?> 
+0

您可能有權限問題。檢查你的錯誤日誌。 – IamGhale 2014-09-20 08:44:16

+0

嘗試['glob'](http://php.net/manual/en/function.glob.php) – georg 2014-09-20 08:45:57

回答

1

scandir將把目錄中的所有元素放入一個數組中。然後使用array_rand從數組中選擇一個隨機元素。

$dir = "/path/to/pictures/"; 
$dirarray = scandir($dir); 
unset($dirarray [0]); 
unset($dirarray [1]); 
$content = file_get_contents($dir . $dirarray[array_rand($dirarray)]); 
echo $content; 

unset命令是從數組中刪除...。 這可能會導致迴音picturename.jpg

+0

這會獲取目錄中的文件名。我需要它來顯示內容。我不知道如何在fopen中使用數組的輸出。 – user2334436 2014-09-20 09:11:11

+0

對不起,我沒有正確地讀你的問題。我現在更新了我的回覆,以便它將發佈隨機文件的內容 – 2014-09-20 09:28:21

0

試試這個: -

使用glob函數來獲取目錄中的所有文件,然後取這個數組隨機元素,並將其返回。然後閱讀該文件並回顯其內容。

function get_random_file($dir = 'folder_name') 
{ 
    $files = glob($dir . '/*.txt'); 
    $file = array_rand($files); 
    return $files[$file]; 
} 

    $fh = fopen($myFile, 'r'); 
    $theData = fread($fh, filesize($myFile)); 
    fclose($fh); 
    echo $theData; 
+0

$ myFile未在$ fh = fopen($ myFile,'r');中標識。 – user2334436 2014-09-20 09:12:59

+0

請確保你也必須給這裏的目錄路徑。 例如: - fopen(「/ home /".$ myFile,」r「); 請檢查fopen php手冊。 http://php.net/manual/en/function.fopen.php – Garima 2014-09-20 11:13:50

0

您的目錄中有斜槓。

$dir = 'wp-content\files' 

應該

$dir = 'wp-content/files' 

它應該是正斜槓不回凶多吉少。同時檢查您正在訪問的目錄的權限。

相關問題