2017-05-30 123 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);