如何使用PHP通过FTP将文件传输至另一服务器?(附故障代码)
PHP FTP文件传输故障排查与修复方案
核心问题分析
你的代码无法正常运行,大概率是以下几个常见问题导致的:
- 未启用被动FTP模式:多数服务器防火墙会拦截主动模式的FTP连接,必须开启被动模式才能正常传输
- 错误处理缺失:仅判断了连接错误,未处理登录失败的情况,会导致后续代码无意义执行
- 文件路径或权限问题:本地文件可能不存在,或远程目标目录无写入权限
修复后的完整代码
// 连接FTP服务器 $my_connection = ftp_connect("tel.bpo.fr", 21) or exit('Erreur : connexion au serveur FTP impossible.'); // 验证登录状态,失败则终止 if (!ftp_login($my_connection, "AD_185", "UYTREE")) { exit('Erreur : échec de connexion avec les identifiants fournis.'); } // 启用被动模式(必须步骤,适配大多数服务器防火墙规则) ftp_pasv($my_connection, true); // 本地文件路径:用__DIR__确保路径绝对正确,避免相对路径解析错误 $from = __DIR__ . "/test.csv"; // 远程目标文件路径 $to = "/entree/test.csv"; // 先检查本地文件是否存在 if (!file_exists($from)) { exit('Erreur : fichier local test.csv introuvable.'); } // 执行二进制模式上传 if (ftp_put($my_connection, $to, $from, FTP_BINARY)){ echo "Transfert réussi <br/>" ; } else { echo "Erreur lors du transfert"; } // 完成后关闭FTP连接,释放资源 ftp_close($my_connection);
额外排查步骤
- 确认PHP已启用FTP扩展:执行
phpinfo(),搜索“FTP”模块,若未找到需在php.ini中开启extension=ftp - 手动验证FTP连通性:用FileZilla等客户端,使用相同账号密码连接
tel.bpo.fr,尝试手动上传文件,确认远程目录/entree/存在且有写入权限 - 查看错误日志:检查PHP错误日志或Web服务器日志,获取更详细的报错信息,精准定位问题
内容的提问来源于stack exchange,提问作者yassin040
相关产品推荐
相关产品推荐

