2016-12-15 61 views
3

我有一個包含子目錄的目錄,每個子目錄中都有圖像。我想隨機顯示圖像。 下面我的代碼在PHP中運行良好,但它不工作在Laravel,問題是opendir()readdir()Laravel:如何從目錄中獲得隨機圖像?

窺視片

<?php 
$folder = opendir('images/'); 

$i = 0; 
while(false !=($file = readdir($folder))){ 
if($file != "." && $file != ".."){ 
    $images[$i]= $file; 
    $i++; 
    } 
} 
$random_img=rand(0,count($images)-1); 
?> 

<div> 
<?php 
echo '<img src="images/'.$images[$random_img].'" alt="" />'; 
?> 
</div> 
+0

檢查http://stackoverflow.com/questions/7121479/listing-all-the-folders-subfolders-and-files-in-a-directory-using-php,你可能會得到目錄中的文件列表和子目錄然後可以放入隨機順序。 – Dev

回答

3

在Laravel你需要使用Storage與文件系統的工作。

$files = Storage::allFiles($directory); 
$randomFile = $files[rand(0, count($files))]; 
+0

我有錯誤:語法錯誤,意外',',期待']' – nabil

+0

我忘了插入'rand()',已更新。 –

+0

現在我沒有錯誤信息,但我沒有收到任何內容,頁面沒有完全充電! – nabil

1

可以使用Laravel的allFiles方法獲取的所有文件,並得到使用隨機邏輯的圖像之一。

File::allFiles($directory) 
1

實際上,您可以使用Laravel Filesystem,但要使其完全正常工作,您必須設置配置。例如,下面的代碼將無法正常工作:

$dir = 'images'; // public/images 
$files = \Storage::allFiles($dir); 

因爲,Filesystem使用配置從config/filesystems.php下,您可能有這樣的事情:

'disks' => [ 
    'local' => [ 
     'driver' => 'local', 
     'root' => storage_path('app'), 
    ], 
    // ... 
] 

默認情況下,Laravel使用local磁盤,並將其指向到不同的路徑。所以,爲了使它的工作,你已經設置你的磁盤的配置,例如,添加以下進入陣列:

'web' => [ 
    'driver' => 'local', 
    'root' => base_path('public'), 
], 

然後,你可以使用這樣的事情:

$dir = 'images'; // public/images 
if($files = \Storage::disk('web')->allFiles('images')) { 
    $path = $files[array_rand($files)]; 
} 

要在您的view中使用此$path,請使用<img src="{{asset($path)}}">Check more here

+1

謝謝你,你的迴應是有益的。 – nabil

+0

不客氣:-) –