1.报错背景
代码如下:
$conn = ftp_connect("45it.com") or die("Could not connect"); ftp_login($conn,"test","test1234"); ftp_put($conn,"target.rar","local.rar",FTP_BINARY,0); ftp_close($conn); echo "done";
端口是默认21的可省略,以上代码连接正常,但上传错误了。其功能是:将本地文件local.rar上传到远程FTP文件服务器上,并保存为target.rar。报错如下:
Warning: ftp_put() [function.ftp-put]: Opening BINARY mode data connection for target.rar.
Fatal error: Maximum execution time of 60 seconds exceeded in
2.错误分析
服务器一般都是放在防火墙后面,因此FTP客户端程序如果需要穿越防火墙,需要开启被动模式,否则执行任何ftp命令都没有响应,直到出现“最大执行时间超时”的致命错误,导致程序终止运行。
3.解决方案
开启FTP被动模式。代码如下:
$conn = ftp_connect(ftp.com) or die("Could not connect"); ftp_login($conn,"test","test1234"); ftp_pasv($conn, true); ftp_put($conn,"target.rar","local.rar",FTP_BINARY,0); ftp_close($conn); echo "done";