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

ftp_connect()本地正常运行,部署到Web服务器后无法连接求助

问题描述

我编写了以下PHP FTP连接代码:

<?php
//user and pass
$ftp_username = "user";
$ftp_userpass = "pass";

// connect and login to FTP server
$ftp_server = "server_addr";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to {$ftp_server} from {$_SERVER['HTTP_HOST']}");
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);

// then do something...
echo $login;

// close connection
ftp_close($ftp_conn);
?>

本地运行时能正常连接群晖DS220j的FTP服务器并返回1,但部署到Web服务器后,页面提示Could not connect to xxx.xxx.xxx.xxx from mysite.co.uk。已排查:Web服务器IP不在NAS黑名单中,且已将Web服务器的域名和IP加入NAS白名单,问题仍未解决。

可能的解决方案
  • 检查FTP端口连通性:群晖默认FTP端口是21,被动模式下还有默认端口范围55536-56559。在Web服务器上用telnet xxx.xxx.xxx.xxx 21或nc -zv xxx.xxx.xxx.xxx 21测试21端口是否能连通;如果用被动模式,还要确认该端口范围在NAS防火墙、路由器端口转发中都已放行(可在群晖控制面板>文件服务>FTP>高级设置查看/修改被动端口范围)。
  • 切换为被动模式连接:ftp_connect默认用主动模式,部分Web服务器环境会限制主动模式的出站连接。在登录后添加被动模式启用代码:
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
ftp_pasv($ftp_conn, true); // 启用被动模式
  • 检查群晖FTP权限细节:
    1. 进入群晖控制面板>用户和群组>用户,找到FTP对应的用户,确认应用程序权限>FTP已开启;
    2. 进入控制面板>文件服务>FTP>权限设置,查看是否开启了仅允许安全连接,如果是,需要改用ftp_ssl_connect()替代ftp_connect()。
  • 确认Web服务器真实出站IP:部分云服务器或共享主机的出站IP和你以为的服务器IP不一致,在Web服务器上执行curl ifconfig.me获取真实出站IP,将该IP加入NAS白名单。
  • 查看群晖防火墙日志:进入群晖控制面板>安全性>防火墙>日志,检查是否有Web服务器IP被拦截的记录——即使不在黑名单,防火墙的其他规则也可能导致拦截。
  • 排查网络路由问题:在Web服务器上执行traceroute xxx.xxx.xxx.xxx(Linux)或tracert xxx.xxx.xxx.xxx(Windows),查看网络链路是否有中断节点,确认是否是路由阻断导致无法连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:48:23