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。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM