PHP从文件夹中提取随机图像
Posted
技术标签:
【中文标题】PHP从文件夹中提取随机图像【英文标题】:PHP pull random image from folder 【发布时间】:2012-05-02 23:14:56 【问题描述】:我想知道从文件夹中提取随机图像的“更好”方式。
就像说,让 php 从文件夹中选择一个随机图像,而不是搜索并创建一个数组。
这就是我今天的做法
<?php
$extensions = array('jpg','jpeg');
$images_folder_path = ROOT.'/web/files/Header/';
$images = array();
srand((float) microtime() * 10000000);
if ($handle = opendir($images_folder_path))
while (false !== ($file = readdir($handle)))
if ($file != "." && $file != "..")
$ext = strtolower(substr(strrchr($file, "."), 1));
if(in_array($ext, $extensions))
$images[] = $file;
closedir($handle);
if(!empty($images))
$header_image = $images[array_rand($images)];
else
$header_image = '';
?>
【问题讨论】:
【参考方案1】:试试这个:
<?php
$dir = "images/";
$images = scandir($dir);
$i = rand(2, sizeof($images)-1);
?>
<img src="images/<?php echo $images[$i]; ?>" />
【讨论】:
你的回答很好很简短!但是有一个问题!如果图像目录包含大量图像(1K),scandir 会将所有图像加载到数组中。虽然您只需要一张图像。有没有办法改进你的答案?如果您可以将其包装在一个函数中,并可以选择获取有限数量的图像。即$returned_images_count=10;
,我的意思在this question 中有部分解释。 + opendir
在分析中看起来更快。【参考方案2】:
以下代码通过图像扩展名验证图像列表。
<?php
function validImages($image)
$extensions = array('jpg','jpeg','png','gif');
if(in_array(array_pop(explode(".", $image)), $extensions))
return $image;
$images_folder_path = ROOT.'/web/files/Header/';
$relative_path = SITE_URL.'/web/files/Header/';
$images = array_filter(array_map("validImages", scandir($images_folder_path)));
$rand_keys = array_rand($images,1);
?>
<?php if(isset($images[$rand_keys])): ?>
<img src="<?php echo $relative_path.$images[$rand_keys]; ?>" />
<?php endif; ?>
【讨论】:
【参考方案3】:function get_rand_img($dir)
$arr = array();
$list = scandir($dir);
foreach ($list as $file)
if (!isset($img))
$img = '';
if (is_file($dir . '/' . $file))
$ext = end(explode('.', $file));
if ($ext == 'gif' || $ext == 'jpeg' || $ext == 'jpg' || $ext == 'png' || $ext == 'GIF' || $ext == 'JPEG' || $ext == 'JPG' || $ext == 'PNG')
array_push($arr, $file);
$img = $file;
if ($img != '')
$img = array_rand($arr);
$img = $arr[$img];
$img = str_replace("'", "\'", $img);
$img = str_replace(" ", "%20", $img);
return $img;
echo get_rand_img('images');
用您的文件夹替换“图像”。
【讨论】:
【参考方案4】:我在互联网上搜索了几个小时,以实现我想要的代码。我整理了一些我在网上找到的各种答案。代码如下:
<?php
$folder = opendir("Images/Gallery Images/");
$i = 1;
while (false != ($file = readdir($folder)))
if ($file != "." && $file != "..")
$images[$i] = $file;
$i++;
//This is the important part...
for ($i = 1; $i <= 5; $i++) //Starting at 1, count up to 5 images (change to suit)
$random_img = rand(1, count($images) - 1);
if (!empty($images[$random_img])) //without this I was sometimes getting empty values
echo '<img src="Images/Gallery Images/' . $images[$random_img] . '" />';
echo '<script>console.log("' . $images[$random_img] . '")</script>'; //Just to help me debug
unset($images[$random_img]); //unset each image in array so we don't have double images
?>
使用这种方法,我能够毫无错误地实现 opendir(因为 glob()
不适合我),我能够为轮播画廊提取 5 张图像,并摆脱重复的图像并整理空值。使用我的方法的一个缺点是,图库中的图像数量在 3 到 5 个图像之间变化,可能是由于删除了空值。这并没有打扰我太多,因为它可以根据需要工作。如果有人可以使我的方法更好,我欢迎您这样做。
工作示例(网站顶部的第一个轮播画廊):Eastfield Joinery
【讨论】:
以上是关于PHP从文件夹中提取随机图像的主要内容,如果未能解决你的问题,请参考以下文章