如何从目录中随机 select PHP 中的文件?
How do I select a file in PHP randomly from directory?
我必须从 PHP 中的目录中随机 select 一个文件,假设有三个文件 index.php 、 a.php 和 b.php.如何确保我不选择文件 index.php 而是随机选择其他文件。
到目前为止,我有以下代码
$dir = 'uploads';
$files = glob($dir . '/*.php');
$file = array_rand($files);
echo $files[$file];
应该这样做:
$dir = 'uploads';
$files = glob($dir . '/*.php');
while (in_array($file = array_rand($files),array('index.php')));
echo $files[$file];
您可以排除该数组中包含 'index.php'.
的其他文件名
仅当目录中的文件数超过'index.php'时才有效。
我获取随机文件的设置,也许你只需要添加文件扩展名,..但这肯定有效。
我不喜欢 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;
}
就建个数组排除用array_diff()
:
$exclude = array("$dir/index.php");
$files = array_diff(glob("$dir/*.php"), $exclude);
我必须从 PHP 中的目录中随机 select 一个文件,假设有三个文件 index.php 、 a.php 和 b.php.如何确保我不选择文件 index.php 而是随机选择其他文件。 到目前为止,我有以下代码
$dir = 'uploads';
$files = glob($dir . '/*.php');
$file = array_rand($files);
echo $files[$file];
应该这样做:
$dir = 'uploads';
$files = glob($dir . '/*.php');
while (in_array($file = array_rand($files),array('index.php')));
echo $files[$file];
您可以排除该数组中包含 'index.php'.
的其他文件名仅当目录中的文件数超过'index.php'时才有效。
我获取随机文件的设置,也许你只需要添加文件扩展名,..但这肯定有效。
我不喜欢 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;
}
就建个数组排除用array_diff()
:
$exclude = array("$dir/index.php");
$files = array_diff(glob("$dir/*.php"), $exclude);