PHP利用FTP上传文件连接超时之开启被动模式解决方法
初始代码:
<?php $conn = ftp_connect("localhost") or die("Could not connect"); ftp_login($conn,$user,$password); ftp_put($conn,"target.jpg","local.jpg",FTP_BINARY,0); ftp_close($conn); ?>
本代码通过PHP服务器使用 FTP 协议将本地文件 上传到远程 FTP 文件服务器上
提示错误:
Warning: ftp_put() [function.ftp-put]: Opening BINARY mode data connection for target.jpg. in web\ftp.phpon line 4 Fatal error: Maximum execution time of 60 seconds exceeded in web\ftp.php on line 5
原因分析:
服务器开启了防火墙,因此 FTP 客户端程序如果需要穿越防火墙,需要开启被动模式,否则执行任何 ftp 命令都没有响应,直到出现 “最大执行时间超时” 错误,程序终止运行。
W3SCHOOL规定:ftp_pasv() 函数把被动模式设置为打开或关闭。
在被动模式中,数据连接是由客户机来初始化的,而不是服务器。这在客户机位于防火墙之后时比较有用。
语法
ftp_pasv(ftp_connection,mode);
<?php $conn = ftp_connect("localhost") or die("Could not connect"); ftp_login($conn,$user,$password); ftp_pasv($conn, true); ftp_put($conn,"target.jpg","local.jpg",FTP_BINARY,0); ftp_close($conn); ?>
相反,利用FlashFXP连接FTP服务器一切正常,但Filezilla“读取目录列表失败”。
因为通过了防火墙,将FileZilla传输模式设置为主动模式,Done。