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

PHP中调用display_indivsong()时filesize()抛出stat警告求助

问题排查与解决方法

问题原因

  • 使用file()函数读取播放列表(txt文件)时,返回的每一行字符串会包含末尾的换行符(\n或\r\n)。当把这个字符串直接拼接到路径songs/$file时,实际的文件路径会变成类似songs/xxx.mp3\n,这个路径对应的文件不存在,因此filesize()会抛出"文件不存在"的错误。
  • 而displaysong()方法中通过glob('songs/*.mp3')获取的文件名是纯净的,没有多余的换行符,所以能正常调用filesize()。

解决方法

1. 清理播放列表的文件名

在传递文件名给display_indivsong()之前,用trim()函数去掉字符串首尾的空白字符(包括换行、空格等),修改播放列表处理的循环代码:

foreach($content as $indiv_song){
    // 清理文件名中的换行符和空白字符
    $clean_song = trim($indiv_song);
    $song->display_indivsong($clean_song);
}

2. 修复file_size()方法的逻辑漏洞

原方法先调用filesize()再判断文件是否存在,若文件不存在会直接报错。调整为先判断文件存在性,再获取大小:

function file_size($filename){
    // 先校验文件是否存在
    if(!file_exists($filename)){
        return " (无效文件)";
    }
    $size = filesize($filename);
    if( $size>1023 && $size<1048575){
        $size = $size/1024;
        $size = " (". $size." kb)";
    }
    else if($size>1048575){
        $size = $size/1048576;
        $size = " (". round($size, 2) ." mb)";
    }
    else{
        $size = " (". $size." b)";
    }
    return $size;
}

3. (可选)给display_indivsong()增加容错处理

避免空文件名或无效路径导致的异常:

function display_indivsong($file){ 
    $clean_file = trim($file);
    if(empty($clean_file)) return;
    $path = "songs/$clean_file";
?>
<li class="mp3item">
    <a href="<?php echo $path?>"> <?php echo $clean_file; echo $this->file_size($path);?></a>
</li>
<?php }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:40:38