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

升级至PHP 7.4后MP3文件遍历代码故障求助

修复PHP 7.4下的MP3文件遍历代码

问题分析

  1. split()函数废弃:PHP 7.0起split()已被彻底移除,即便改用preg_split()也因正则写法或多文件名场景容易出错,更适合用专门处理文件路径的函数替代。
  2. 文件过滤逻辑不严谨:原代码中substr($file,1) != '.'的写法不够直观,无法准确过滤隐藏文件。
  3. 输出截断/格式问题:原代码中转义处理不完整,可能导致HTML属性被破坏,同时stripslashes()在PHP 7.4环境下大多属于冗余操作(默认已关闭magic_quotes_gpc)。

修复后的代码

<music>
    <?php
    $targetDir = 'files/mp3';
    if ($handle = opendir($targetDir)) {
        while (false !== ($file = readdir($handle))) {
            // 跳过当前目录、上级目录,以及以.开头的隐藏文件
            if ($file === '.' || $file === '..' || substr($file, 0, 1) === '.') {
                continue;
            }
            
            // 用pathinfo解析文件信息,准确分离文件名和扩展名
            $fileInfo = pathinfo($file);
            if (isset($fileInfo['extension']) && strtolower($fileInfo['extension']) === 'mp3') {
                // 转义HTML属性,确保单引号也被处理,避免格式破坏
                $safeSongName = htmlspecialchars($fileInfo['filename'], ENT_QUOTES);
                echo "<song name='{$safeSongName}' />";
            }
        }
        closedir($handle);
    }
    ?>
</music>

关键修改说明

  • 替换split()为pathinfo():pathinfo()是PHP原生的文件路径解析函数,能精准分离文件名和扩展名,即便文件名包含多个.也能正确处理,比字符串拆分更可靠。
  • 优化文件过滤逻辑:直接通过substr($file, 0, 1) === '.'判断隐藏文件,逻辑清晰易懂,避免原代码的模糊判断。
  • 完善HTML转义:使用ENT_QUOTES参数让htmlspecialchars()同时转义单引号和双引号,彻底避免属性值中的特殊字符破坏HTML结构。
  • 移除冗余操作:去掉不必要的stripslashes(),PHP 7.4默认已关闭魔术引号,无需手动去除转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:40:28