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

如何通过PHP的ftp_pasv()向其他主机传文件?解决Zip损坏问题

问题解答

首先明确:可以通过PHP结合ftp_pasv函数向其他主机传输文件,你遇到的Zip文件损坏问题根源在于传输模式错误。

问题原因

你使用了FTP_ASCII模式传输Zip文件,这种模式专为纯文本文件设计,会自动转换换行符(比如将Windows的CRLF转为Unix的LF)。但Zip属于二进制文件,包含不可打印的二进制数据,ASCII模式会破坏这些数据结构,最终导致文件损坏无法打开。

修复后的代码

将传输模式替换为FTP_BINARY即可解决问题,同时建议补充关键步骤的错误检查,避免隐性问题:

$ftp_server = "ftp.domain.com";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$ftp_username = "USERNAME";
$ftp_userpass = "PASSWORD";

// 验证FTP登录状态
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
if (!$login) {
    die("Failed to login to FTP server");
}

// 启用被动模式(多数网络环境下必需)
ftp_pasv($ftp_conn, true);

// 定义本地与远程文件路径
$local_file = "path/to/your/local/file.zip";
$remote_file = "target/remote/file.zip";

// 使用二进制模式上传Zip文件
$upload_success = ftp_put($ftp_conn, $remote_file, $local_file, FTP_BINARY);

if ($upload_success) {
    echo "Zip file uploaded successfully";
} else {
    echo "Failed to upload Zip file";
}

ftp_close($ftp_conn);

额外注意事项

  • 确保$local_file变量指向正确的本地Zip文件路径,避免因路径错误传输空文件或错误文件
  • 被动模式ftp_pasv($ftp_conn, true)在防火墙、NAT环境中是必需的,能解决主动模式下的连接阻塞问题
  • 若传输大文件,可通过ftp_set_option($ftp_conn, FTP_TIMEOUT_SEC, 60)调整超时时间,避免因网络延迟导致传输中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:42:07