2017-05-30 121 views
0

我有IP公共FTP服務器,讓說:192.0.0.12。但在一些網絡不同的地區,連接到這個IP不適用。在這種情況下,我們可以通過另一個IP連接到FTP,例如:171.0.0.13。如何限制FTP連接時間

所以我寫了PHP腳本來連接到FTP服務器並使用ftp_connect()下載文件。爲避免長時間回覆,我使用set_time_limit()將時間限制設置爲5秒。這是腳本:

<?php 
include "config.php"; 
function ftp_konek($ftp_server){ 
    set_time_limit(5); 
    $conn_id = ftp_connect($ftp_server); 
    return $conn_id; 
} 
if(ftp_konek($ftp_server)){ 
    /*download the file*/ 
}else{ 
    $ftp_server = "171.0.0.13"; 
    $change_ip = ftp_konek($ftp_server); 
    if($change_ip){ 
     /*download the file*/ 
    }else{ 
     echo "Failed!"; 
    } 
} 
?> 

的公網IP和用戶名+密碼存儲在config.php。這個想法是:

  1. 使用第一個IP連接到FTP服務器。
  2. 如果在5秒內成功,請下載文件。
  3. 否則,如果不成功,更改FTP服務器IP並連接。
  4. 如果連接成功,下載文件

的問題是,我得到了警告:

Fatal error: Maximum execution time of 5 seconds exceeded

和操作停止。

任何想法?

回答

1

好的,已經注意了這個問題!

腳本的最大執行時間爲5秒,極低。 ftp_connect的默認超時時間爲90秒,所以顯然有些問題。

變化

$conn_id = ftp_connect($ftp_server); 

$conn_id = ftp_connect($ftp_server, 21, 2); 

,它可能會奏效。我也希望將最大執行時間設置得更高。如果你把這個在你的腳本的開頭:

set_time_limit(30); 

然後,你可以用更合理的超時

$conn_id = ftp_connect($ftp_server, 21, 10); 
0

ftp_connect功能有$timeout參數。

設置,而不是通過限制PHP執行時間黑客。

ftp_connect($ftp_server, 21, 5); 
0

set_time_limit設置全局時限整個腳本,不只是爲ftp_connectftp_connect有自己的第三個參數$timeout

$conn_id = ftp_connect($ftp_server, 21, 5);