大约20%的时间opendir脚本失败.看到的例子


about 20% of time opendir script fails. See example

刷新几次,有时会得到"null"

此脚本循环遍历文件夹以获取所有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";
     }
}

这是因为数组索引从0length - 1,但您的脚本正在生成从0length的随机索引。修复此问题的首选方法是使用array_rand():

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

您的随机范围超出了(max整数是count()的结果,并且记住数组的计数比基于0的有序数组的最高索引高1),并且您的代码看起来太啰嗦了。

试试……

$mp3s = glob('../../hope/upload/php/files/*.mp3');
$key = array_rand($mp3s);
$randomMp3 = $mp3s[$key];