Около 20% времени сценарий opendir терпит неудачу. См пример
Хит обновить несколько раз, и иногда я получаю "ноль".
Этот скрипт просматривает папку, чтобы получить все mp3-файлы, и случайным образом выбирает один. Что я делаю неправильно? Спасибо
if ($handle = opendir('../../hope/upload/php/files/')) {
while (false !== ($entry = readdir($handle))) {
$entry = trim($entry);
if(preg_match('/.mp3/', $entry))
{
$mp3[] = "$entry";
}
}
closedir($handle);
$count = count($mp3);
$rand = rand(0,$count -1); /// FIXED BY adding a -1 after count**
$mp3 = $mp3[$rand];
if($mp3)
{
echo "http://MyWebsite.com/hope/upload/php/files/$mp3";
}
else
{
echo "null";
}
}
2 ответа
Решение
Это происходит потому, что индексы массива идут от 0
в length - 1
, но ваш скрипт генерирует случайный индекс из 0
в length
, Предпочтительный способ исправить это будет использовать array_rand()
:
$rand = array_rand($mp3);
$mp3 = $mp3[$rand];
Ваш случайный диапазон отсутствует (максимальное целое число является результатом count()
и помните, что число массивов на единицу больше, чем его самый высокий индекс в массиве, основанном на порядковом 0), и ваш код выглядит слишком многословным.
Пытаться...
$mp3s = glob('../../hope/upload/php/files/*.mp3');
$key = array_rand($mp3s);
$randomMp3 = $mp3s[$key];