#php #file #random
#php #файл #Случайный
Вопрос:
Я пытаюсь создать php-файл, который находит случайный файл в том же каталоге, что и файл .php, берет имя этого файла и возвращает его. т.Е. Он вернет что-то вроде «text45.txt » в качестве выходного сигнала. (не текст внутри файла, а только имя и расширение файла)
Мне нужно выбрать случайный файл, но при выборе случайного файла в выбранном каталоге остановитесь «results.php » от того, чтобы стать выбранным, поскольку это файл, используемый для захвата случайного файла.
<?php
$files = glob(realpath('./') . '/*.*');
$file = array_rand($files);
echo basename($files[$file]);
?>
Комментарии:
1. php.net/manual/en/function.basename.php или php.net/manual/en/function . pathinfo.php
Ответ №1:
для случайного выбора файла
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 );
}
}
Ответ №2:
Если вам не нужны файлы фильтра, вы можете использовать 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) amp;amp; $file != "results.php";
});
$file_name = array_rand($file_arr);
echo $file_arr[$file_name];
Ответ №3:
Вы можете сделать это следующим образом:
<?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]);
?>
Комментарии:
1. к сожалению, это не сработало, arilis.win/api/google/getrandompurchase/request.php вы можете видеть, что он все еще показывает «request.php «досье.
2. @Arilis Я только что заметил, что имя файла вашей живой версии request.php нет results.php , может быть, в этом и есть проблема.
Ответ №4:
Вы могли бы использовать 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
in $files
является числовым. Нам нужно перебрать файлы и проверить basename
каждый из них. Если он найден, сбросьте его. Есть более эффективные способы справиться с этим, но это должно быть нормально для небольшого (небольшого) каталога.
<?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]);
Комментарии:
1. к сожалению, в результате ничего не отображается. arilis.win/api/google/getrandompurchase/request.php <- как видно там
2. Изменить
return
наecho
.