我正在尝试创建一个php文件,该文件在与.php文件相同的目录中找到一个随机文件,获取该文件的名称并返回它。即,它将返回类似“ text45.txt”的内容作为输出。 (不是文件内的文本,只是文件名和扩展名)
我需要它选择一个随机文件,但是在选择的目录中选择一个随机文件时,请停止选择“ results.php”,因为这是用于捕获随机文件的文件。
<?php
$files = glob(realpath('./') . '/*.*');
$file = array_rand($files);
echo basename($files[$file]);
?>
答案 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]);