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

如何在PHP中从FTPS服务器下载文件?遇ftp_fget报错求助

解决PHP ftp_fget从FTPS下载文件时的命令识别错误

可能的原因及解决方案

1. 未启用被动模式

多数FTPS服务器默认要求使用被动模式,主动模式下易触发命令兼容问题。登录成功后添加被动模式开启代码:

$login = ftp_login($ftp_conn, 'user', 'pwd');
if ($login) {
    echo "Successfully logged in";
    // 开启被动模式
    ftp_pasv($ftp_conn, true);
} else {
    echo "Log in failed";
}

2. 传输模式不兼容

当前使用的FTP_ASCII模式可能不被服务器支持,尝试切换为FTP_BINARY模式:

if (ftp_fget($ftp_conn, $fp, $rsr_product_file, FTP_BINARY, 0)) {
    echo "Successfully written to $local_file.";
} else {
    echo "Error downloading $rsr_product_file.";
}

3. 服务器路径格式问题

部分FTPS服务器要求使用绝对路径而非相对路径,尝试给文件路径添加根目录前缀:

$rsr_product_file = '/keydealer/categories.txt';

4. 混淆FTPS与SFTP协议

ftp_ssl_connect用于FTPS(FTP over SSL/TLS),但2222端口常被用作**SFTP(SSH文件传输协议)**的端口。若服务器实际是SFTP服务,PHP的ftp_*系列函数无法兼容,需改用ssh2_*扩展相关函数:

// SFTP连接下载示例
$sftp_conn = ssh2_connect('ftps.test.com', 2222);
ssh2_auth_password($sftp_conn, 'user', 'pwd');
$local_file = "test.txt";
$remote_file = 'keydealer/categories.txt';
ssh2_scp_recv($sftp_conn, $remote_file, $local_file);

额外调试建议

启用FTP调试模式,查看交互过程中的命令细节,帮助精准定位问题:

ftp_set_option($ftp_conn, FTP_DEBUG, 3); // 开启调试,输出所有FTP命令与响应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:32:36