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

PHP扫描目录生成MP4视频列表报错,请求技术支持

解决PHP目录扫描路径错误并生成视频播放列表

你遇到的核心问题是目录路径不匹配,代码里指定的../videosmlp/fim和实际存储视频的moviesmlp/fim不一致,同时原代码缺少目录存在检查和文件过滤逻辑,导致报错。下面是修正后的完整解决方案:

问题根源拆解

  1. 路径错误:你的脚本位于S:\equestriaspace\series\index.php,原代码里的../videosmlp/fim指向的是不存在的目录,实际视频存储在同级的moviesmlp/fim目录下。
  2. 未过滤无效项:scandir()会返回.(当前目录)和..(上级目录),直接遍历会导致无效的视频项。
  3. 视频路径拼接错误:原代码给文件名额外添加.mp4,如果文件名本身已带后缀,会出现xxx.mp4.mp4的错误路径。

修正后的代码

<?php
// 修正为实际视频存储的相对路径(从series/index.php向上一级到根目录,再进入moviesmlp/fim)
$dir = "../moviesmlp/fim";
$episodes = [];

// 先检查目录是否存在,避免触发scandir报错
if (is_dir($dir)) {
    $scans = scandir($dir);
    foreach ($scans as $file) {
        // 过滤掉系统目录项,只保留MP4文件
        if ($file !== '.' && $file !== '..' && pathinfo($file, PATHINFO_EXTENSION) === 'mp4') {
            // 用无后缀的文件名作为video的id,更符合HTML规范
            $episodeId = pathinfo($file, PATHINFO_FILENAME);
            $episodes[] = [
                'id' => $episodeId,
                'filename' => $file
            ];
        }
    }
} else {
    echo "<p>Error: 视频目录不存在,请检查路径配置</p>";
}
?>

<?php foreach ($episodes as $episode): ?>
<video id="<?php echo htmlspecialchars($episode['id']); ?>" width="960" height="540" data-overscale="false">
    <source type="video/mp4" src="../moviesmlp/fim/<?php echo htmlspecialchars($episode['filename']); ?>" />
</video>
<?php endforeach; ?>

关键调整说明

  • 路径修正:将$dir改为../moviesmlp/fim,匹配实际存储目录;视频src也使用完整相对路径,确保浏览器能正确加载文件。
  • 目录存在检查:用is_dir()提前判断目录是否存在,避免出现scandir的致命报错。
  • 文件过滤:通过pathinfo()只保留MP4文件,同时过滤掉.和..,避免无效项进入播放列表。
  • 安全优化:用htmlspecialchars()转义输出内容,防止文件名中包含特殊字符导致的XSS风险。
  • ID优化:使用无后缀的文件名作为video标签的ID,避免出现带.mp4的非标准ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:44:00