如何从目录中随机选择PHP中的文件?

时间:2015-02-10 16:06:02

标签: php glob

我必须从PHP中的目录中随机选择一个文件,假设有三个文件让我们说index.php,a.php和b.php。如何确保我不接收文件index.php,而是随机选择其他文件。 到目前为止,我有以下代码

$dir = 'uploads';
$files = glob($dir . '/*.php');
$file = array_rand($files);
echo $files[$file];

3 个答案:

答案 0 :(得分:0)

这应该这样做:

$dir = 'uploads';
$files = glob($dir . '/*.php');
while (in_array($file = array_rand($files),array('index.php')));
echo $files[$file];

您可以排除该数组中包含' index.php'的其他文件名。

仅当文件多于' index.php'在目录中。

答案 1 :(得分:0)

我获取随机文件的设置,也许你只需添加文件扩展名,..但这确实有效。

我不喜欢array_rand,因为它会复制数组,它也会使用大量的CPU和RAM。

我想出了这个结果。

<?php
$handle = opendir('yourdirname');
$entries = [];
while (false !== ($entry = readdir($handle))) {
  if($entry == 'index.php'){
    // Sorry now allowed to read this one...
  }else{
    $entries[] = $entry;
  }
}

// Echo a random item from our items in our folder.
echo getrandomelement($entries);


// Not using array_rand because to much CPU power got used.
function getrandomelement($array) {
    $pos=rand(0,sizeof($array)-1);
      $res=$array[$pos];
      if (is_array($res)) return getrandomelement($res);
        else return $res;
}

答案 2 :(得分:0)

只需构建一个数组即可排除并使用array_diff()

$exclude = array("$dir/index.php");
$files = array_diff(glob("$dir/*.php"), $exclude);