我正在使用一些带有PHP cURL多处理程序的FTP服务器,通过多重连接从它们下载成像器。
我想知道,每台服务器支持多少个连接。我怎么能用curl库来做这个?
答案 0 :(得分:1)
除非您是管理员,否则您将无法确定允许某个FTP服务器同时连接的数量。
部分解决方案1:
作为替代方案,您可以尝试制作50个同时连接到ftp的连接,并检查服务器何时发出错误max connections (#) exceeded
部分解决方案2: 联系ftp管理员,询问他有多少同时连接。
答案 1 :(得分:0)
我的临时解决方案
<?php
$params = [
'host' => '{FTP_SERVER}',
'user' => '{FTP_LOGIN}',
'password' => '{FTP_PASSWORD}',
'streams' => {FTP_CONNECTIONS_COUNT}
];
$defaults = [
CURLOPT_HEADER => 1,
CURLOPT_RETURNTRANSFER => 0,
CURLOPT_NOBODY => 1,
CURLOPT_USERPWD => $params['user'] . ':' . $params['password'],
];
$mh = curl_multi_init();
$streams = [];
// Generate N requests to FTP-server
$tasks = array_fill(0, $params['streams'], $params['host'] . '/');
// Create streams
foreach ($tasks as $n => $task) {
$ch = curl_init();
curl_setopt_array($ch, $defaults + [
CURLOPT_URL => $task,
CURLOPT_FTPLISTONLY => 0,
CURLOPT_VERBOSE => 0
]);
curl_multi_add_handle($mh, $ch);
$streams[$n] = $ch;
}
// Process streams
$isAvailable = true;
do {
curl_multi_exec($mh, $running);
// Break if we have server error
if ($i = curl_multi_info_read($mh) and curl_getinfo($i['handle'], CURLINFO_HTTP_CODE) > 500) {
$isAvailable = false;
break;
}
curl_multi_select($mh);
} while ($running > 0);
// Close streams
foreach ($streams as $ch) {
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
curl_multi_close($mh);
// Print result
var_dump($isAvailable);
如果我错了,请纠正我。