我有一个包含子目录的目录,在每个子目录中都有图像。我想随机显示图像。
在我的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>
答案 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)];