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