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

PHP FTP远程服务器文件下载页面问题及显示优化求助

解决你的MP3下载页面问题:链接失效与多余条目

让我们一步步搞定你遇到的两个问题:下载链接提示“URL未找到”,以及页面显示多余的点。

1. 下载链接失效的问题

原因分析

你用ftp_nlist获取的$mp3_url是服务器文件系统的绝对路径(比如/public_html/wp/wp-content/plugins/AbonneerProgrammas/Albums/xxx.mp3),但浏览器需要的是可通过HTTP访问的公开URL,而不是服务器内部的文件路径。直接把这个路径作为链接地址,浏览器自然找不到资源。

解决方案

你需要把服务器文件路径转换成网站的HTTP可访问URL。假设你的WordPress站点域名是https://your-domain.com,那么Albums目录的公开URL应该是https://your-domain.com/wp-content/plugins/AbonneerProgrammas/Albums/。

最简单的方式是提取文件名后拼接公开URL前缀,这样就能生成浏览器可识别的下载地址。

2. 页面显示多余点的问题

原因分析

ftp_nlist默认会返回当前目录(.)和上级目录(..)这两个特殊条目,你的代码没有过滤它们,循环时就会把这两个也渲染出来,于是出现了多余的点。

解决方案

在循环前过滤掉这两个特殊条目,同时只保留.mp3后缀的文件,避免显示非MP3格式的内容。

修改后的完整代码

<?php
// Connectiegegevens
$ftp_server = "myserver";
$ftp_user_name = "myuser";
$ftp_user_pass = "mypass";
$destination_folder = "/public_html/wp/wp-content/plugins/AbonneerProgrammas/Albums";

// 连接FTP并登录
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, true);

// 获取目录内容
$contents = ftp_nlist($conn_id, $destination_folder);

// 过滤掉.和..,只保留MP3文件
$filtered_contents = array_filter($contents, function($item) {
    $filename = basename($item);
    return $filename !== '.' && $filename !== '..' && pathinfo($filename, PATHINFO_EXTENSION) === 'mp3';
});

// 构建公开URL前缀(替换成你的站点实际域名)
$public_url_prefix = "https://your-domain.com/wp-content/plugins/AbonneerProgrammas/Albums/";

foreach ($filtered_contents as $mp3_path) {
    $filename = basename($mp3_path, ".mp3");
    $mp3_filename = basename($mp3_path);
    $mp3_url = $public_url_prefix . $mp3_filename;
?>
<br>
<table>
    <tr>
        <th>Programma</th>
    </tr>
    <tr>
        <td><a href='<?php echo $mp3_url; ?>'><?php echo $filename; ?></a></td>
    </tr>
</table>
<?php } ?>

关键修改点:

  • 添加了$filtered_contents数组过滤,去掉.、..和非MP3文件
  • 定义了$public_url_prefix,替换成你的实际站点域名,构建正确的下载URL
  • 从$mp3_path中提取文件名,拼接成可访问的HTTP URL

额外建议

  • 确保你的Albums目录在服务器上设置了正确的访问权限(通常是755),否则即使URL正确,浏览器也会无法访问
  • 可以给链接添加download属性,让浏览器直接触发下载:<a href='<?php echo $mp3_url; ?>' download='<?php echo $filename; ?>.mp3'><?php echo $filename; ?></a>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:22:34