Javascript 自动列出目录中的特定文件并在页面上显示

Javascript 自动列出目录中的特定文件并在页面上显示,javascript,php,html,Javascript,Php,Html,我创建了一个网络MP3播放器,它工作得很好,只是每次在我的网络服务器上添加新歌时我都要编辑我的脚本。我希望列表在我添加更多歌曲时自动更新。我的脚本基本上如下所示: <body> <audio id="audio" preload="auto" tabindex="0" controls="" type="audio/mpeg"> </audio> <ul id="playlist"> <li clas

我创建了一个网络MP3播放器,它工作得很好,只是每次在我的网络服务器上添加新歌时我都要编辑我的脚本。我希望列表在我添加更多歌曲时自动更新。我的脚本基本上如下所示:

<body>
    <audio id="audio" preload="auto" tabindex="0" controls="" type="audio/mpeg">

    </audio>
    <ul id="playlist">
        <li class="active"><a href="usb/music1.mp3">Music 1</a></li>
        <li><a href="usb/music2.mp3">Music 2</a></li>
        <li><a href="usb/music3.mp3">Music 3</a></li>
        <li><a href="usb/music4.mp3">Music 4</a></li>

    </ul>
</body>
<?php
...............
echo '
<body>
    <audio id="audio" preload="auto" tabindex="0" controls="" type="audio/mpeg">

    </audio>
    <ul id="playlist">';
exec('find /www/usb/ -name "*.mp3"',$list);
$x=0;
while($x<count($list)){   
if($list[$x]==$h[0]){
echo '<li class="active"><a href="$list[$x]">$list[$x]</a></li>';

$x++;
}
}
echo '
</ul>
</body>
</html>';
?>
但它给了我以下错误:致命错误:第64行的/www/test2.php中超过了30秒的最大执行时间

我的完整脚本:

<?php
echo '
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#playlist,audio{background:#666;width:400px;padding:20px;}
.active a{color:#5DB0E6;text-decoration:none;}
li a{color:#eeeedd;background:#333;padding:5px;display:block;}
li a:hover{text-decoration:none;}
</style>
    <script type="text/javascript" src="jquery-1.11.2.min.js"></script>
    <script type="text/javascript">
var audio;
var playlist;
var tracks;
var current;

$(document).ready(function() {
  init();
});
function init(){
    current = 0;
    audio = $("audio");
    playlist = $("#playlist");
    tracks = playlist.find("li a");
    len = tracks.length - 1;
    audio[0].volume = .10;
    audio[0].play();
    playlist.find("a").click(function(e){
        e.preventDefault();
        link = $(this);
        current = link.parent().index();
        run(link, audio[0]);
    });
    audio[0].addEventListener("ended",function(e){
        current++;
        if(current == len){
            current = 0;
            link = playlist.find("a")[0];
        }else{
            link = playlist.find("a")[current];    
        }
        run($(link),audio[0]);
    });
}
function run(link, player){
        player.src = link.attr("href");
        par = link.parent();
        par.addClass("active").siblings().removeClass("active");
        audio[0].load();
        audio[0].play();
}
</script>
</head>
<body>
    <audio id="audio" preload="auto" tabindex="0" controls="" type="audio/mpeg">

    </audio>
    <ul id="playlist">';
exec('find /www/usb/ -name "*.mp3"',$list);
$x=0;
while($x<count($list)){   
if($list[$x]==$h[0]){
echo '<li class="active"><a href="$list[$x]">$list[$x]</a></li>';

$x++;
}
}
echo '
</ul>
</body>
</html>';
?>
我该如何解决这个问题?请注意,我也希望能够在子目录中搜索。多谢各位

更新1我尝试了@RhapX建议,但显示的结果是这样的,每当我单击music1.mp3或music2.mp3时,它都不会播放,因为url指向http://192.168.1.1/music1.mp3 和http://192.168.1.1/music2.mp3 实际位置在哪里http://192.168.1.1/usb/music1.mp3

以下函数允许您扫描主目录及其所有子目录,并仅列出具有$allowedExtensions数组中所示的允许文件类型的结果

通过调用要在其中显示列表的函数来使用

您可以通过将要扫描的根路径传递给函数来更改它

例如:

这将循环遍历目录中的每个文件,并删除这些文件。和可能存在的文件,只留下您的音乐文件

正如Hobo Sapien所指出的,如果返回错误,您的循环将变得无限,这可能是导致执行时间耗尽的原因


通过使用这个简单的脚本,您可以提取目录/子目录中的每个文件,而不管它是如何命名的,而无需将脚本放入无限循环。

if块中增加$x可能是重复的。如果条件为false,则$x永远不会递增,循环变为无穷大。您为什么不使用glob或scandir而不是使用系统实用程序?他可以这样做,但这不能解释他为什么想这样做,或者他自己的方法有什么问题。@HoboSapiens感谢您的反馈。我补充了一点理由。我尝试了你的建议,但没有成功,请查看我的后期更新。请记住,我只想列出*.mp3only@Don显然,您必须更新链接路径。我会更新代码。给我一点时间。
<?php
function getFiles($path = '/www/usb') {

    // Open the path set
    if ($handle = opendir($path)) {

        // Loop through each file in the directory
        while ( false !== ($file = readdir($handle)) ) {

            // Remove the . and .. directories
            if ( $file != "." && $file != ".." ) {

                // Check to see if the file is a directory
                if( is_dir($path . '/' . $file) ) {

                    // The file is a directory, therefore run a dir check again
                    getFiles($path . '/' . $file);

                }

                // Get the information about the file
                $fileInfo = pathinfo($file);

                // Set multiple extension types that are allowed
                $allowedExtensions = array('mp3', 'wav', 'ogg', 'flac');

                // Check to ensure the file is allowed before returning the results
                if( in_array($fileInfo['extension'], $allowedExtensions) ) {
                    echo '<li class="active"><a href="' . $path . '/' . $file . '">' . $file . '</a></li>';
                }

            }
        }

        // Close the handle
        closedir($handle);
    }
} 
?>