Пустой array_rand () при поиске случайного mp3 из каталога

#php #random #directory #mp3

#php #Случайный #каталог #mp3

Вопрос:

Это находится в теле моего index.php корневого каталога сайта и localhost/sound/ содержит кучу файлов со случайными именами mp3 .

 <?php
$files = glob("/sound/*.mp3");
$random = array_rand($files)
?>
<embed src="<?php echo $random ?>" 
width="140" height="40" autostart="true" loop="TRUE"> 
</embed>
  

Когда я просматриваю исходный код страницы в браузере, он показывает

 <embed src="" 
width="140" height="40" autostart="true" loop="TRUE"> 
</embed>
  

Ответ №1:

Убедитесь, что glob действительно возвращаются совпадения:

 $files = glob("/sound/*.mp3");
if (count($files) < 1)
  die('No files found');
$random = $files[array_rand($files)];

...
  

Вы могли бы сделать то же самое, но предоставить запасной вариант по умолчанию:

 $files = glob("/sound/*.mp3");
$random = count($files) > 1 ? $files[array_rand($files)] : 'path/to/default.mp3';

...
  

Комментарии:

1. к сожалению, это, похоже, ничего не меняет, я попытался использовать mp3 в том же каталоге, что и файл php, чтобы я мог использовать ‘default.mp3’; но по-прежнему ничего не отображается, и просматриваемый источник тот же… что происходит? O.o

2. Сделайте var_dump дальше $files , что вы видите?

3. извините, как мне реализовать var_dump?

4. $files = glob("/sound/*.mp3"); var_dump($files); die(); — скопируйте / вставьте выходные данные в свой вопрос в качестве редактирования. (отредактируйте аргумент в glob , чтобы использовать правильный путь …)

5. спасибо, Крис! наконец, некоторый прогресс — вот результат: array(2) { [0]=> string(24) «sound /lowyourchicken.mp3» [1]=> string(20) «sound /opencircle.mp3» }

Ответ №2:

Во-первых, убедитесь, что вы действительно получаете некоторые имена файлов обратно. Обратите внимание, что glob() ожидается путь к вашей файловой системе. Путь /sound/*.mp3 , вероятно, должен быть чем-то вроде sound/*.mp3 (т. Е. относительно вашего PHP-скрипта) или /var/www/html/sound/*.mp3 (абсолютный путь к месту хранения ваших веб-файлов).

Вам следует поставить галочку в своем коде, чтобы убедиться, что вы получаете файлы обратно. Например:

 if ($files === FALSE || count($files) == 0)
{
    die('No MP3s!');
}
  

Во-вторых, array_rand() возвращает случайный ключ массива. Вам нужно будет найти этот ключ в массиве, чтобы получить соответствующее значение:

 <embed src="<?php echo $files[$random] ?>" 
  

Комментарии:

1. спасибо за совет относительно пути, я удалил первый / там (он относится к файлу php, но я не знаю абсолютного пути, поскольку он размещен не на сервере — я думаю, что это виртуальный сервер centos (вы можете использовать URL-адреса?) Я попробовал оба ваших предложения, но конечный результат всегда один и тот же. На странице не должны печататься MP3-файлы, если таковые не найдены, верно? потому что это не так, и просматриваемый источник тот же…