随机文件选择程序

时间:2019-04-12 17:41:06

标签: php file random

我正在尝试创建一个php文件,该文件在与.php文件相同的目录中找到一个随机文件,获取该文件的名称并返回它。即,它将返回类似“ text45.txt”的内容作为输出。 (不是文件内的文本,只是文件名和扩展名)

我需要它选择一个随机文件,但是在选择的目录中选择一个随机文件时,请停止选择“ results.php”,因为这是用于捕获随机文件的文件。

<?php
$files = glob(realpath('./') . '/*.*');
$file = array_rand($files);
echo basename($files[$file]);
?>

4 个答案:

答案 0 :(得分:0)

用于随机选择文件

function random_files($array_files_list, $no_of_select ){
    if( count($array_files_list) <= $no_of_select ){
        return array_rand($array_files_list, $no_of_select);
    }else{
        return array_rand($array_files_list, count($array_files_list)-1 );
    }
}

答案 1 :(得分:0)

如果不需要过滤器文件,则可以使用scandir而不是glob来获取目录中的文件名。这是解决方案

// current directory
$dir = getcwd();
// get all files in directory
$files = scandir($dir);

//filter only files and remove 'results.php' file
$file_arr = array_filter($files, function($file){
     return is_file($file) && $file != "results.php";
});

$file_name = array_rand($file_arr);
echo $file_arr[$file_name];

答案 2 :(得分:0)

您可以这样做:

<?php

$files = glob(realpath('./') . '/*.*');

// Search the array for the file results.php and return its key
$unwanted_file = array_search(realpath('./results.php'),$files);

//Then remove it from the array
unset($files[$unwanted_file]);

$file = array_rand($files);

echo basename($files[$file]);

?>

答案 3 :(得分:0)

您可以使用basename(__FILE__)查找当前正在执行的脚本的名称并将其从文件数组中删除。

<?php
$files = glob(realpath('./') . '/*.*');

// Ensure the current script is not chosen.
$currentFile = basename(__FILE__);
if (array_key_exists($currentFile, $files)) {
    unset($files[$currentFile]);
}

$file = array_rand($files);

echo basename($files[$file]);

更新

由于$key中的$files是数字,因此上述代码无效。我们需要遍历文件并检查每个文件的basename。如果找到,请取消设置。有更有效的方法来处理此问题,但是对于较小的(ish)目录应该可以。

<?php
$files = glob(realpath('./') . '/*.*');

// Ensure the current script is not chosen.
$currentFile = basename(__FILE__);
foreach ($files as $key => $file) {
    if (basename($file) === $currentFile) {
        unset($files[$key]);
    }
}

$randomFile = array_rand($files);

echo basename($files[$randomFile]);