около 20% времени сценарий opendir терпит неудачу. См пример - PullRequest
1 голос
/ 27 декабря 2011

Хит обновить несколько раз, и иногда я получаю "ноль".

Этот скрипт просматривает папку, чтобы получить все 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 ]

2 голосов
/ 27 декабря 2011

Это происходит потому, что индексы массива идут от 0 до length - 1, но ваш скрипт генерирует случайный индекс от 0 до length. Предпочтительный способ исправить это - использовать array_rand():

$rand = array_rand($mp3);
$mp3 = $mp3[$rand];
1 голос
/ 27 декабря 2011

Ваш случайный диапазон отсутствует (целое число max является результатом count(), и помните, что число массивов на единицу больше, чем его самый высокий индекс в массиве на основе порядкового номера 0), иваш код выглядит слишком многословно.

Попробуйте ...

$mp3s = glob('../../hope/upload/php/files/*.mp3');

$key = array_rand($mp3s);

$randomMp3 = $mp3s[$key];
...