PHP扫描目录生成MP4视频列表报错,请求技术支持
解决PHP目录扫描路径错误并生成视频播放列表
你遇到的核心问题是目录路径不匹配,代码里指定的../videosmlp/fim和实际存储视频的moviesmlp/fim不一致,同时原代码缺少目录存在检查和文件过滤逻辑,导致报错。下面是修正后的完整解决方案:
问题根源拆解
- 路径错误:你的脚本位于
S:\equestriaspace\series\index.php,原代码里的../videosmlp/fim指向的是不存在的目录,实际视频存储在同级的moviesmlp/fim目录下。 - 未过滤无效项:
scandir()会返回.(当前目录)和..(上级目录),直接遍历会导致无效的视频项。 - 视频路径拼接错误:原代码给文件名额外添加
.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
相关产品推荐
相关产品推荐

