Explicit FTPS上传时ftp_put报连接失败及超时问题求助
问题分析与解决思路
核心矛盾是文件实际上传成功但PHP侧触发连接失败/超时,说明数据传输完成后,控制连接的会话维持/握手环节出现异常,而非数据传输本身的问题。结合你的环境配置,从以下几个方向排查修复:
1. 调整vsftpd的FTPS超时与会话配置
vsftpd默认控制连接超时过短,大文件上传完成后服务器可能主动关闭连接,导致PHP返回失败。修改/etc/vsftpd/vsftpd.conf:
# 延长控制连接超时(单位:秒,建议设为600) idle_session_timeout=600 # 延长数据连接超时 data_connection_timeout=300 # 确保被动模式配置正确(显式FTPS依赖被动模式) pasv_enable=YES pasv_min_port=40000 pasv_max_port=50000 pasv_address=你的虚拟机同网段IP # 优化SSL会话兼容性 ssl_reuse_session=YES require_ssl_reuse=NO
修改后重启vsftpd:
systemctl restart vsftpd
2. 优化PHP的FTP参数与超时设置
PHP原生FTP扩展默认超时配置不足以支撑大文件上传,在代码中添加:
// 初始化FTP连接后设置超时(单位:秒) ftp_set_option($ftp_conn, FTP_TIMEOUT_SEC, 300); // 强制开启被动模式(FTPS必须确保启用) ftp_pasv($ftp_conn, true); // 临时延长脚本执行时间,避免触发超时致命错误 set_time_limit(600);
3. 排查网络与防火墙配置
- Windows主机防火墙需放行FTP(21端口)和被动模式端口范围(40000-50000)的入站/出站规则;
- Rocky Linux虚拟机开放对应端口:
firewall-cmd --add-service=ftp --permanent firewall-cmd --add-port=40000-50000/tcp --permanent firewall-cmd --reload
- 确认VMware桥接网卡配置正常,虚拟机IP可被Windows主机直接访问,无NAT端口映射冲突。
4. 改用CURL替代原生FTP扩展
PHP原生FTP扩展对FTPS的会话处理存在兼容性问题,改用CURL实现上传更稳定:
$local_file = $_FILES['upload']['tmp_name']; $remote_file = '/path/to/remote/file.jpg'; $ftp_host = 'ftp://你的FTPS服务器IP'; $ftp_user = '你的FTP用户名'; $ftp_pass = '你的FTP密码'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ftp_host . $remote_file); curl_setopt($ch, CURLOPT_USERPWD, "$ftp_user:$ftp_pass"); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, fopen($local_file, 'r')); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($local_file)); curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_ALL); curl_setopt($ch, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS); curl_setopt($ch, CURLOPT_TIMEOUT, 300); // 开启调试可查看详细会话日志 // curl_setopt($ch, CURLOPT_VERBOSE, true); $response = curl_exec($ch); if (!$response) { echo '上传错误: ' . curl_error($ch); } else { echo '上传成功'; } curl_close($ch);
5. 查看vsftpd日志定位具体问题
通过日志排查连接断开的根因:
tail -f /var/log/vsftpd.log
若日志显示SSL handshake failed或Connection closed by remote host,可进一步调整vsftpd的SSL加密套件配置,优先选择兼容性好的套件。
内容的提问来源于stack exchange,提问作者user16088441
相关产品推荐
相关产品推荐

