Laravel:如何从目录中获取随机图像?

时间:2016-12-15 14:14:33

标签: php image laravel random

我有一个包含子目录的目录,在每个子目录中都有图像。我想随机显示图像。 在我的PHP代码下面运行良好,但它在Laravel中不起作用,问题在于opendir()readdir()

查看刀片

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

6 个答案:

答案 0 :(得分:4)

在Laravel中,您需要使用Storage来处理文件系统。

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

答案 1 :(得分:1)

您可以使用Laravel的allFiles方法获取所有文件,并使用随机逻辑获取其中一个图像。

File::allFiles($directory)

答案 2 :(得分: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)];
}

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

答案 3 :(得分:0)

这是执行此操作的方法。我现在拥有laravel 5.7,但也应该适用于旧版本。

$files = Storage::files('path/to/directory');
$randomFile = array_random($files);

答案 4 :(得分:0)

您可以使用Laravel方法,在其中可以返回1个或多个随机元素;

$all = Storage::allFiles($directory);

$rand = Arr::random($all, 1);

别忘了立面:

use Illuminate\Support\Arr;

答案 5 :(得分:0)

试试这个:

$files = Storage::allFiles($directory); 

$randomFile = $files[array_rand($files)];