如何限制FTP连接时间

时间:2017-05-30 06:32:26

标签: php ftp timeout

我有IP公共FTP服务器,比方说:192.0.0.12。但在某些具有不同网络的区域中,与此IP的连接不适用。在这种情况下,我们可以通过另一个IP连接到FTP,比方说:171.0.0.13。

所以我在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. 如果连接成功,请下载文件
  5. 问题是,我收到了警告:

      

    致命错误:超过最长执行时间5秒

    操作停止了。

    有什么想法吗?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

ftp_connect函数有$timeout参数。

设置,而不是通过限制PHP执行时间来破解它。

ftp_connect($ftp_server, 21, 5);

答案 2 :(得分:0)

set_time_limit为整个脚​​本设置全局时间限制不仅适用于ftp_connectftp_connect有自己的第三个参数$timeout

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