2011-12-26 4 views
1

Хит обновления несколько раз, и иногда я получаю «null».около 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"; 
    } 
} 
+1

Я мог бы загрузить файл с именем, например, как 'not.amp3.txt' и ваш код будет считать его одним. – alex

+0

Операция 'preg_match()' также будет соответствовать 'notanmp3.exe', так как' .' соответствует любому символу. Предложение 'glob()' alex, вероятно, лучше всего, но вы также можете посмотреть в [pathinfo()] (http://php.net/pathinfo). –

ответ

2

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

$rand = array_rand($mp3); 
$mp3 = $mp3[$rand]; 
+0

DUDE! WOW ... СПАСИБО. Вот и все. Это вызывало у меня столько боли в as3, поскольку именно там я пытался загрузить звуковой файл. как 10 часов его ... но понял его в php. спасибо моему другу, вы так быстро ответили, что я даже не мог нажать «правильный ответ», потому что я должен ждать 5 минут. :) –

+0

Я исправил это, добавив -1 после значения $ count. :) –

1

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

Try ...

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

$key = array_rand($mp3s); 

$randomMp3 = $mp3s[$key]; 
+0

Это отличный сценарий, который работает. Вау, мне нужно многому научиться, кажется, о php. Спасибо, парни. –