初始代碼:
<?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。