программа случайного выбора файлов

#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 .