#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-файлы, если таковые не найдены, верно? потому что это не так, и просматриваемый источник тот же…