Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从目录中选择随机文件_Php - Fatal编程技术网

Php 从目录中选择随机文件

Php 从目录中选择随机文件,php,Php,我正在尝试建立一个网站,用户可以提交照片,然后在另一个页面上一张一张地随机查看其他照片。我有一个名为“上传”的目录,在那里提交图片。我在读取文件中的图片时遇到问题。我只是想从上传目录中随机选择一张图片,并将其显示在页面上。如有任何建议,我们将不胜感激 您可以使用获取目录中的所有文件,然后从该数组中获取一个随机元素。这样的函数将为您提供: function random_pic($dir = 'uploads') { $files = glob($dir . '/*.*'); $f

我正在尝试建立一个网站,用户可以提交照片,然后在另一个页面上一张一张地随机查看其他照片。我有一个名为“上传”的目录,在那里提交图片。我在读取文件中的图片时遇到问题。我只是想从上传目录中随机选择一张图片,并将其显示在页面上。如有任何建议,我们将不胜感激

您可以使用获取目录中的所有文件,然后从该数组中获取一个随机元素。这样的函数将为您提供:

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

我对它做了一些调整,使用数组从一个目录中获取多个随机文件

<?php

function random_pic($dir)
{
 $files = glob($dir . '/*.jpg');
 $rand_keys = array_rand($files, 3);
 return array($files[$rand_keys[0]], $files[$rand_keys[1]], $files[$rand_keys[2]]);
}

// Calling function

list($file_1,$file_2,$file_3)= random_pic("images"); 

?>


您还可以使用loop来获取值。

或者您可以使用代替glob(),因为它更快。

这一行代码显示目标目录中的一个随机图像

<img src="/images/image_<?php $random = rand(1,127); echo $random; ?>.png" />
.png”/>
目标目录:
/images/

图像前缀:
图像

目录中的图像数:
127


缺点

  • 图像必须按顺序命名(例如
    image\u 1.png
    image\u 2.png
    image\u 3.png
    ,等等)

  • 您需要提前知道目录中有多少图像


备选方案

也许有一种简单的方法可以让它在任意的图像名和文件数下工作,这样你就不必重命名或计算你的文件

未经检验的想法:

  • />

  • shuffle()

  • scanDir()
    带有
    rand(1,scanDir.length)


+1比调用random_pic()三次要好,因为这样可以避免重复。(最好将3作为random_pic()的可选参数)。您可能是正确的。您应该编写一个使用opendir()方法的实现,并将其发布到您的答案中。看起来,您不能。
opendir()
glob()
被称为两个不同的函数。请参见。这里使用的是
glob()
;请参见。我的意思显然是,使用opendir方法(opendir,然后遍历文件)比使用opendir函数更快。我包含的链接解释了opendir()返回的内容。