You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP获取原始格式音频文件?附代码求助

如何使用PHP获取专辑文件夹中的原始音频文件

先聊聊你现有代码存在的几个小问题:

  • 循环里反复执行chdir切换目录,最后$curr_dir只会指向最后一个专辑的目录,所以只能拿到最后一个专辑的文件,没法获取用户所有专辑里的音频。
  • scandir会返回目录下所有条目(包括.和..这两个特殊目录),而且不会自动过滤非音频文件。

下面是优化后的代码,能帮你精准获取所有用户专辑里的原始音频文件:

<?php
// 获取当前登录用户ID
$user = $_SESSION['user_id'];
// 改用预处理语句避免SQL注入风险
$sql = "SELECT * FROM albums WHERE user_id=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $user); // 假设user_id是整数类型,若为字符串则用"s"
$stmt->execute();
$result = $stmt->get_result();

// 定义需要筛选的音频文件扩展名,可根据需求增减
$audioExtensions = ['mp3', 'wav', 'flac', 'ogg', 'm4a', 'aac'];
$allAudioFiles = [];

if ($result->num_rows > 0) {
    // 遍历用户的每一张专辑
    while ($row = $result->fetch_assoc()) {
        $albumDir = "uploaded/" . $row['al_id'];
        
        // 先检查专辑目录是否存在,避免报错
        if (!is_dir($albumDir)) {
            continue;
        }
        
        // 扫描当前专辑目录下的所有内容
        $files = scandir($albumDir);
        foreach ($files as $file) {
            // 跳过当前目录和上级目录的特殊标识
            if ($file === '.' || $file === '..') {
                continue;
            }
            
            // 获取文件扩展名并转为小写,统一判断逻辑
            $fileExt = strtolower(pathinfo($file, PATHINFO_EXTENSION));
            // 如果是目标音频格式,就存入结果数组
            if (in_array($fileExt, $audioExtensions)) {
                $allAudioFiles[] = [
                    'album_id' => $row['al_id'],
                    'file_name' => $file,
                    'full_path' => realpath($albumDir . '/' . $file) // 获取文件绝对路径,方便后续操作
                ];
            }
        }
    }
}

// 输出所有音频文件信息
print_r($allAudioFiles);
?>

代码细节说明:

  1. 避免目录切换混乱:直接用路径拼接$albumDir = "uploaded/" . $row['al_id'],不用chdir,不会干扰脚本的当前工作目录。
  2. 安全检查:增加is_dir判断专辑目录是否存在,防止因目录缺失抛出错误。
  3. 精准筛选音频:通过定义扩展名数组,配合pathinfo和in_array,只保留音频格式的文件。
  4. 结构化结果:把每个音频文件的专辑ID、文件名、绝对路径都整理好,后续不管是播放还是下载都更方便。
  5. SQL注入防护:把原代码的字符串拼接SQL改成预处理语句,提升系统安全性。

额外小提示:

  • 如果需要支持更多音频格式,直接在$audioExtensions数组里添加对应的扩展名就行。
  • 要是你只需要相对路径,可以把realpath替换成$albumDir . '/' . $file。

内容的提问来源于stack exchange,提问作者user7807032

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:01:21