我在IP Public中拥有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
中。这个想法是:
- 使用第一个IP连接到FTP服务器。
- 如果在5秒内成功,请下载文件。
- 否则,如果不成功,请更改FTP服务器IP并连接。
- 如果连接成功,请下载文件
问题是,我得到了警告:
致命错误:最大执行时间超过5秒
,操作停止了。
有什么想法?
好的,更加关注这个问题!
脚本的最大执行时间为5秒,非常低。ftp_connect
的默认超时为90秒,所以显然有些问题。
更改
$conn_id = ftp_connect($ftp_server);
to
$conn_id = ftp_connect($ftp_server, 21, 2);
,它可能会起作用。我还希望将最大执行时间设置为更高。如果您将其放在脚本的开头:
set_time_limit(30);
然后您可以使用更合理的超时
$conn_id = ftp_connect($ftp_server, 21, 10);
ftp_connect
函数具有 $timeout
参数。
设置,而不是通过限制PHP执行时间来黑客入侵。
ftp_connect($ftp_server, 21, 5);
set_time_limit
设置了整个脚本的全局时间限制,不仅针对ftp_connect
。ftp_connect
有自己的第三参数$timeout
:
$conn_id = ftp_connect($ftp_server, 21, 5);