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。

posted @ 2017-06-09 15:13  年来未归客  阅读(3723)  评论(2编辑  收藏  举报